Cute Running Puppy

Language/[Java] 혼자 공부하는 자바

[혼자공부하는자바] chapter 06-3. 생성자

R.silver 2021. 7. 19. 17:46
반응형

[혼자공부하는자바] chapter 06-3. 생성자

생성자: new 연산자로 호출되어 객체의 초기화를 담당

기본 생성자

클래스에 명시적으로 생성자를 선언하지 않으면 컴파일러는 기본 생성자를 추가한다. 

생성자 선언

//생성자 선언 방법

클래스( 매개변수선언, ...) {
    //객체의 초기화 코드;
}

생성자

  1. 반환 값이 없다. 
  2. 필드를 초기화 할 때 사용할 수 있다. 
  3. 클래스 이름과 동일하다. 

클래스에 생성자가 명시적으로 선언되어 있을 경우, 반드시 선언된 생성자를 호출해서 객체를 생성해야 함 

생성자 선언

 

package sec02.exam01;

public class Cake {
	
	Cake (String cream, int price){
	}
}
생성자를 호출해서 객체 생성

 

package sec02.exam01;

public class Cake1 {

	public static void main(String[] args) {
		
		Cake myCake = new Cake("choco", 30000);
		
		//기본 생성자를 호출 할 수 없음
		//Cake myCake = new Cake();
	}
}

필드 초기화

클래스로부터 객체가 생성될 때 필드는 기본 초기값으로 자동 설정

다른 값으로 초기화 하고 싶다면 아래 두 가지 방법을 사용하여 초기화할 수 있다. 

  1. 필드 선언시 초기값을 주기
  2. 생성자에서 초기값 주기
생성자에서 필드 초기화

 

package sec02.exam01;

public class Cake {
	
	//필드
	String cream = "choco";
	String topping;
	int price;
	
	//생성자
	public Cake(String t, int p) {
		topping = t;
		price = p;
	}
}
객체 생성 후 필드 값 출력

 

package sec02.exam01;

public class Cake1 {

	public static void main(String[] args) {
		
		Cake myCake = new Cake("banana", 30000);
		System.out.println("topping: " + myCake.topping);
		System.out.println("price: " + myCake.price);

	}
}
실행 결과

 

topping: banana
price: 30000

위의 코드에서 Cake 생성자 매개변수 이름을 t, p를 사용하였다.

그러나 매개 변수의 이름을 짧게 짓는 것은 좋지 않기에

보통 초기화시킬 필드 이름과 비슷하거나 동일한 이름을 사용한다. 

 

그러나 필드 이름과 매개변수의 이름이 동일하다면 생성자 내부에서 해당 필드에 접근할 수 없다. 

(∵ 동일한 이름의 매개 변수가 우선순위가 높기 때문에)

이때 this. 라는 객체 자신의 참조를 사용한다면 해결할 수 있다. 

 

수정한 Cake 생성자

 

package sec02.exam01;

public class Cake {
	
	//필드
	String cream = "choco";
	String topping;
	int price;
	
	//생성자
	public Cake(String t, int p) {
		this.topping = topping;
		this.price = price;
	}
}

생성자 오버로딩

매개 변수를 달리하는 생성자를 여러개 선언하는 것 

생성자 오버로딩을 사용하면 인수에 의해 수와 형이 일치하는 메소드가 출력된다.

<주의>

매개 변수의 타입, 개수, 선언된 순서 중 하나라도 달라야 한다. 

다른 생성자 호출: this ()

생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다. 

이때 중복된 코드를 줄이기 위해 this() 코드를 사용할 수 있다.

//this()를 사용하여 다른 생성자를 호출하는 방법

클래스( [매개변수, ...]) {
    this( 매개변수, ..., 값,  ...); //클래스의 다른 생성자 호출
    실행문;
}

this()는 반드시 생성자의 첫 줄에 작성해야 한다. 

다른 생성자를 호출해서 중복 코드 줄이기 

 

package sec02.exam01;

public class Cake {
	
	//필드
	String cream = "choco";
	String topping;
	int price;
	int kcal;
	
	//생성자
	Cake() {
	}
	
	Cake(String topping){
		this(topping, "30000", "2000");
	}
	
	Cake(String topping, int price){
		this(topping, price, "2000");
	}
	
	Cake(String topping, int price, int kcal){
		this.topping = topping;
		this.price = price;
		this.kcal = kcal;
	}
}

 

반응형