본문 바로가기

전체 글 보기

반응형

이번 글에서는 메서드 오버로딩(Method Overloading)을 통해
같은 이름의 메서드를 매개변수 형태에 따라 구분하여 정의하고 호출하는 방법을 학습합니다.
오버로딩을 사용하면 이름이 같더라도 다양한 입력 상황에 맞춰 메서드를 유연하게 사용할 수 있습니다.


📦 클래스 코드 (calculator.java)

package ch06.sec08.exam04;

public class calculator {
	double areaRectangle(double width) {
		return width * width;
	}

	double areaRectangle(double width, double height) {
		return width * height;
	}
}

📌 실행 코드 (calculatorExample.java)

package ch06.sec08.exam04;

public class calculatorExample {
	public static void main(String[] args) {
		calculator cal = new calculator();

		double re1 = cal.areaRectangle(10);
		double re2 = cal.areaRectangle(10, 20);

		System.out.println("정사각형 넓이 : " + re1);
		System.out.println("직사각형 넓이 : " + re2);
	}
}

💬 코드 설명

  • areaRectangle(double width)
    한 변만 주어진 정사각형의 넓이를 계산
    → width * width
  • areaRectangle(double width, double height)
    가로와 세로가 다른 직사각형의 넓이를 계산
    → width * height
  • 메서드 이름은 같지만 매개변수 수가 다르기 때문에 구분 가능

💻 실행 결과

정사각형 넓이 : 100.0
직사각형 넓이 : 200.0

📌 간단 정리

메서드 호출 결과
areaRectangle(10) 10 × 10 = 100.0
areaRectangle(10, 20) 10 × 20 = 200.0

💡 포인트 정리

  • 메서드 오버로딩이름이 같아도 매개변수 형태가 다르면 여러 메서드를 정의할 수 있음
  • 매개변수의 또는 타입이 달라야 함
  • 오버로딩을 통해 이름이 같은 메서드를 다양한 상황에 맞게 사용할 수 있어 가독성 향상
  • 호출할 때 전달하는 인자에 맞는 메서드가 자동으로 선택됨
댓글
반응형

이번 글에서는 객체 내부에 데이터를 저장하는 필드(field)와,
그 필드를 조작하고 제어하는 메서드(method)를 사용하는 구조를 학습합니다.
특히 while 루프를 통해 객체의 상태 변화에 따라 동작을 제어하는 방식을 실습합니다.


📦 클래스 코드 (Car.java)

package ch06.sec08.exam03;

public class Car {
	private int gas;

	void setGas(int gas) {
		this.gas = gas;
	}

	boolean checkGas() {
		if (gas == 0) {
			System.out.println("가스가 없습니다.");
			return false;
		}

		System.out.println("가스가 있습니다.");
		return true;
	}

	void run() {
		while (true) {
			if (gas <= 0) {
				System.out.println("멈춥니다. (가스 잔량 : " + gas + ")");
				return;
			}
			System.out.println("달립니다. (가스 잔량 : " + gas + ")");
			gas--;
		}
	}
}

📌 실행 코드 (CarExample.java)

package ch06.sec08.exam03;

public class CarExample {
	public static void main(String[] args) {
		Car car = new Car();
		car.setGas(5);

		if (car.checkGas()) {
			System.out.println("출발합니다.");
			car.run();
		}

		System.out.println("가스를 주입하세요.");
	}
}

💬 코드 설명

  • private int gas;
    가스 잔량을 저장하는 비공개(private) 필드
  • setGas(int gas)
    → 외부에서 가스를 설정하는 메서드 (Setter)
  • checkGas()
    → 현재 가스 상태를 확인하고, 결과를 boolean으로 반환
  • run()
    → 가스가 남아있는 동안 "달립니다" 출력하고,
    가스가 0이 되면 "멈춥니다" 출력 후 반복 종료
  • while (true)
    → 무한 반복, 가스가 0이 되면 return으로 탈출

💻 실행 결과

가스가 있습니다.
출발합니다.
달립니다. (가스 잔량 : 5)
달립니다. (가스 잔량 : 4)
달립니다. (가스 잔량 : 3)
달립니다. (가스 잔량 : 2)
달립니다. (가스 잔량 : 1)
멈춥니다. (가스 잔량 : 0)
가스를 주입하세요.

📌 간단 정리

메서드 역할
setGas(int) 가스 주입
checkGas() 가스 존재 여부 확인
run() 가스가 있을 때까지 주행

💡 포인트 정리

  • private로 선언된 필드는 외부 직접 접근이 불가능 → 메서드로 간접 접근
  • Setter 메서드를 통해 필드 값을 안전하게 변경
  • Checker 메서드를 통해 객체 상태를 외부에 알림
  • 반복문(while)을 돌리면서 상태 변화로 탈출 조건 제어
  • 객체는 상태(state) + 동작(behavior)을 가진다 → 이 예제는 그 기본 구조를 잘 보여줌
댓글
반응형

이번 글에서는 메서드에서 가변 인자(Variable Arguments)를 사용하여
매개값의 개수에 상관없이 데이터를 처리하는 방법을 학습합니다.
가변 인자를 사용하면 메서드 호출 시 매번 배열을 따로 만들지 않고,
편리하게 여러 값을 넘길 수 있습니다.


📦 클래스 코드 (Computer.java)

package ch06.sec08.exam01;

public class Computer {
	int sum(int... values) {
		int sum = 0;

		for (int i : values)
			sum += i;

		return sum;
	}
}

📌 실행 코드 (ComputerExample.java)

package ch06.sec08.exam01;

public class ComputerExample {
	public static void main(String[] args) {
		Computer com = new Computer();

		int re1 = com.sum(1, 2, 3);
		System.out.println("result1 : " + re1);

		int re2 = com.sum(1, 2, 3, 4, 5);
		System.out.println("result2 : " + re2);

		int values[] = { 1, 2, 3, 4, 5 };
		int re3 = com.sum(values);
		System.out.println("result3 : " + re3);

		int re4 = com.sum(new int[] { 1, 2, 3, 4, 5 });
		System.out.println("result4 : " + re4);
	}
}

💬 코드 설명

  • int sum(int... values)
    → 가변 인자를 사용하여 0개 이상의 int 값을 받을 수 있음 → 내부적으로 values는 배열처럼 동작
  • for (int i : values)
    → 향상된 for문을 사용해 전달된 모든 값을 합산
  • 다양한 방식으로 호출:
    • 단일 값 나열
    • 배열 자체를 전달
    • new int[] { ... }로 전달

💻 실행 결과

result1 : 6
result2 : 15
result3 : 15
result4 : 15

📌 간단 정리

호출 방식 설명
com.sum(1, 2, 3) 직접 값 나열
com.sum(1, 2, 3, 4, 5) 여러 값 직접 나열
com.sum(values) 배열 전달
com.sum(new int[]{1,2,3,4,5}) 배열 생성 후 전달

💡 포인트 정리

  • 타입... 변수명 형태로 가변 인자를 선언할 수 있음
  • 가변 인자는 0개 이상의 값을 받을 수 있음
  • 내부적으로는 배열로 처리되어 for문이나 인덱스 접근 가능
  • 가변 인자는 메서드 매개변수 목록 중 가장 마지막에만 위치해야 함
  • 메서드 호출 시 편리성을 높여주는 문법
댓글
반응형

✅ 1. 클래스와 객체 생성 기본 (ch06.sec06.exam01 ~ exam02)

📌 필드 초기화 없이 기본값 확인

Car car = new Car();
System.out.println(car.model); // null
System.out.println(car.start); // false
System.out.println(car.speed); // 0

📌 필드에 값 대입 후 출력

car.company = "현대자동차";
car.model = "그랜저";
  • 필드는 객체 생성 후 직접 접근하여 값 설정 가능

✅ 2. 생성자 선언과 객체 생성 (ch06.sec07.exam01 ~ exam04)

📌 생성자 선언

Car(String model, String color, int maxSpeed) {
    this.model = model;
    this.color = color;
    this.maxSpeed = maxSpeed;
}

📌 오버로딩된 생성자

  • 생성자 여러 개 정의 가능 (매개변수 다르게)
Car()
Car(String model)
Car(String model, String color)
Car(String model, String color, int maxSpeed)

📌 생성자 호출 예

Car car = new Car("택시", "검정", 200);

✅ 3. 생성자에서 this 사용 (ch06.sec07.exam02 – Korean 클래스)

  • this.name, this.ssn은 필드와 매개변수 이름이 같을 때 구분하기 위해 사용
public Korean(String name, String ssn) {
    this.name = name;
    this.ssn = ssn;
}

✅ 4. 메서드 선언 및 호출 (ch06.sec08.exam01 – Calculator 클래스)

📌 메서드 종류

void powerOn()
int plus(int x, int y)
double divide(int x, int y)
void powerOff()

📌 호출 예

Calculator cal = new Calculator();

cal.powerOn();
int result = cal.plus(5, 6);
double result2 = cal.divide(10, 4);
cal.powerOff();

📌 10일차 핵심 요약

개념 설명
클래스 필드와 생성자, 메서드를 포함하는 사용자 정의 타입
객체 생성 new 키워드를 사용하여 클래스 인스턴스 생성
생성자 객체 초기화 시 사용되는 특별한 메서드
생성자 오버로딩 매개변수에 따라 다양한 생성자 제공 가능
this 키워드 필드와 매개변수 이름을 구분할 때 사용
메서드 정의/호출 기능을 수행하고 값을 반환하거나 출력

 

댓글
반응형

이번 글에서는 클래스 내부에 동작(기능)을 구현하는 메서드(method)를 정의하고,
객체를 통해 메서드를 호출하는 기본 구조를 학습합니다.
메서드는 객체의 동작을 정의하는 핵심 요소이며,
입력값(매개변수)을 받아 결과를 반환하거나 단순 동작을 수행합니다.


📦 클래스 코드 (Calculator.java)

package ch06.sec08.exam01;

public class Calculator {
	void powerOn() {
		System.out.println("전원을 켭니다.");
	}

	void powerOff() {
		System.out.println("전원을 끕니다.");
	}

	int plus(int x, int y) {
		return x + y;
	}

	double divide(int x, int y) {
		return (double) x / (double) y;
	}
}

📌 실행 코드 (CalculatorExample.java)

package ch06.sec08.exam01;

public class CalculatorExample {
	public static void main(String[] args) {
		Calculator cal = new Calculator();

		cal.powerOn();

		int re1 = cal.plus(5, 6);
		System.out.println("result1 : " + re1);

		int x = 10, y = 4;
		double b = cal.divide(x, y);
		System.out.println("result2 : " + b);

		cal.powerOff();
	}
}

💬 코드 설명

  • void powerOn() / powerOff()
    반환값 없이 콘솔 메시지를 출력하는 기능 메서드
  • int plus(int x, int y)
    → 두 정수 값을 받아 합계를 반환하는 정수 연산 메서드
  • double divide(int x, int y)
    → 정수 두 개를 받아 실수로 나눈 결과를 반환
  • Calculator cal = new Calculator();
    → Calculator 객체 생성 후, 해당 메서드들을 호출

💻 실행 결과

전원을 켭니다.
result1 : 11
result2 : 2.5
전원을 끕니다.

📌 간단 정리

메서드 설명
void powerOn() 전원 켜기 메시지 출력
int plus(x, y) 정수 덧셈 결과 반환
double divide(x, y) 정수 나눗셈 결과를 실수로 반환
void powerOff() 전원 끄기 메시지 출력

💡 포인트 정리

  • 메서드는 객체의 동작(기능)을 정의하는 구성 요소
  • void → 반환값 없음 / int, double → 결과 반환
  • 메서드는 객체를 통해 호출해야 동작함 (cal.메서드명() 형태)
  • 연산 메서드는 결과를 변수에 저장하거나 직접 출력 가능
  • 나눗셈 결과를 실수로 얻으려면 형변환 필요
댓글
반응형

이번 글에서는 자바의 생성자 오버로딩(Constructor Overloading)을 통해
객체를 다양한 방식으로 초기화하는 방법을 배웁니다.
생성자 오버로딩이란, 같은 이름의 생성자를 매개변수의 수나 타입에 따라 여러 개 정의하는 것을 말합니다.


📦 클래스 코드 (Car.java)

package ch06.sec07.exam04;

public class Car {
	String company = "현대";
	String model;
	String color;
	int maxSpeed;

	Car() {
	}

	Car(String model) {
		this.model = model;
	}

	Car(String model, String color) {
		this.model = model;
		this.color = color;
	}

	Car(String model, String color, int maxSpeed) {
		this.model = model;
		this.color = color;
		this.maxSpeed = maxSpeed;
	}
}

📌 실행 코드 (CarExample.java)

package ch06.sec07.exam04;

public class CarExample {
	public static void main(String[] args) {
		Car car = new Car();

		System.out.println("car.company : " + car.company);
		System.out.println("-".repeat(40));

		car = new Car("자가용");
		System.out.println("car.company : " + car.company);
		System.out.println("car.model : " + car.model);
		System.out.println("-".repeat(40));

		car = new Car("자가용", "빨강");
		System.out.println("car.company : " + car.company);
		System.out.println("car.model : " + car.model);
		System.out.println("car.color : " + car.color);
		System.out.println("-".repeat(40));

		car = new Car("택시", "검정", 200);
		System.out.println("car.company : " + car.company);
		System.out.println("car.model : " + car.model);
		System.out.println("car.color : " + car.color);
		System.out.println("car.maxSpeed : " + car.maxSpeed);
	}
}

💬 코드 설명

  • Car()
    → 매개변수 없는 기본 생성자
  • Car(String model)
    → 모델명만 초기화
  • Car(String model, String color)
    → 모델명과 색상 초기화
  • Car(String model, String color, int maxSpeed)
    → 모델명, 색상, 최고속도까지 모두 초기화
  • 각각의 생성자는 this.필드 = 매개변수 형식으로 필드를 초기화함

💻 실행 결과

car.company : 현대
----------------------------------------
car.company : 현대
car.model : 자가용
----------------------------------------
car.company : 현대
car.model : 자가용
car.color : 빨강
----------------------------------------
car.company : 현대
car.model : 택시
car.color : 검정
car.maxSpeed : 200

📌 간단 정리

생성자 호출 초기화 내용
new Car() company만 초기값 ("현대")
new Car("자가용") model만 설정
new Car("자가용", "빨강") model + color 설정
new Car("택시", "검정", 200) model + color + maxSpeed 설정

💡 포인트 정리

  • 생성자 오버로딩은 매개변수의 개수나 타입이 다르면 여러 개 정의 가능
  • 필요한 정보만 넣어 객체를 생성할 수 있어 유연한 객체 생성이 가능
  • 모든 생성자에서 공통 필드는 기본값으로 설정되거나, 일부만 지정 가능
  • this.필드 = 매개변수 구문은 필드와 매개변수 이름이 동일할 때 사용
댓글
반응형

이번 글에서는 생성자를 사용하여 객체의 필드 값을 초기화하는 방법을 학습합니다.
this 키워드를 통해 매개변수를 필드에 대입하고,
같은 클래스로 서로 다른 데이터를 가진 객체를 여러 개 생성하여 활용하는 예제를 실습합니다.


📦 클래스 코드 (Korean.java)

package ch06.sec07.exam02;

public class Korean {
	String nation = "대한민국";
	String name;
	String ssn;

	public Korean(String name, String ssn) {
		this.name = name;
		this.ssn = ssn;
	}
}

📌 실행 코드 (KoreanExample.java)

package ch06.sec07.exam02;

public class KoreanExample {
	public static void main(String[] args) {
		String name = "박자바";
		String ssn = "011225-1234567";

		Korean korean1 = new Korean(name, ssn);
		System.out.println("korean1.nation : " + korean1.nation);
		System.out.println("korean1.name : " + korean1.name);
		System.out.println("korean1.ssn : " + korean1.ssn);

		System.out.println("-".repeat(40));

		name = "김자바";
		ssn = "930525-0654321";

		Korean korean2 = new Korean(name, ssn);
		System.out.println("korean2.nation : " + korean2.nation);
		System.out.println("korean2.name : " + korean2.name);
		System.out.println("korean2.ssn : " + korean2.ssn);
	}
}

💬 코드 설명

  • String nation = "대한민국";
    모든 객체에 공통 적용되는 필드값
  • this.name = name;
    → 생성자 매개변수 name을 필드 name에 저장
    → 이름이 같기 때문에 this로 필드와 매개변수 구분
  • new Korean(...)
    → 생성자 호출 시 각각의 객체에 맞는 데이터를 전달하여 상태 초기화

💻 실행 결과

korean1.nation : 대한민국
korean1.name : 박자바
korean1.ssn : 011225-1234567
----------------------------------------
korean2.nation : 대한민국
korean2.name : 김자바
korean2.ssn : 930525-0654321

📌 간단 정리

필드 설명 값 (예시)
nation 모든 객체 공통값 "대한민국"
name 객체마다 다른 값 "박자바", "김자바"
ssn 객체마다 다른 주민등록번호 각 객체별 입력값

💡 포인트 정리

  • 생성자는 객체 생성 시 필드 초기화를 담당
  • this.필드명 = 매개변수명 형태로 필드와 지역변수 구분
  • 여러 객체를 생성해도 공통 필드는 유지되며,
    매개변수에 따라 다른 상태를 가진 객체 생성 가능
  • 객체지향 프로그래밍의 기본은 "상태 + 동작" → 지금은 상태 설정 중심
댓글
반응형

이번 글에서는 자바 클래스에서 객체를 생성할 때 초기값을 지정하는 생성자(Constructor)에 대해 배웁니다.
생성자는 클래스 이름과 동일하며, 객체가 생성될 때 자동으로 호출되어 필드를 초기화하는 역할을 합니다.


📦 클래스 코드 (Car.java)

package ch06.sec07.exam01;

public class Car {
	Car(String model, String color, int maxspeed) {
		// 생성자 본문
	}
}

📌 실행 코드 (CarExample.java)

package ch06.sec07.exam01;

public class CarExample {
	public static void main(String[] args) {
		Car car = new Car("그랜저", "검정", 20);
	}
}

💬 코드 설명

  • Car(String model, String color, int maxspeed)
    → Car 클래스의 생성자
    → 매개변수를 받아 객체 생성 시 필요한 값을 전달받음
  • new Car("그랜저", "검정", 20);
    → 생성자 호출과 동시에 객체 생성
  • 아직 필드 정의나 초기화 내용은 없지만, 형식을 갖춘 생성자 사용을 시작하는 예제

💻 실행 결과

(화면 출력 없음 — 생성자만 호출되고, 출력하는 내용이 없기 때문)


📌 간단 정리

요소 설명
생성자(Constructor) 클래스와 동일한 이름을 가지며, 객체 생성 시 자동 호출됨
매개변수 객체 생성 시 전달되는 값
반환 타입 생성자는 반환 타입이 없음 (void도 X)
목적 객체 생성과 동시에 초기값을 설정

💡 포인트 정리

  • 생성자는 클래스 이름과 같아야 하며, 리턴 타입을 쓰지 않음
  • 객체 생성 시 new 클래스명(값1, 값2, ...) 으로 호출됨
  • 생성자를 사용하면 객체 생성과 동시에 필드 초기화를 편리하게 처리할 수 있음
  • 현재 예제는 구조만 보여주며, 다음 단계에서는 실제 필드와 연결할 예정
댓글