본문 바로가기

Programming/Java

[Java] 클래스 생성자 선언 시 사용되는 this와 this()

반응형

this

public class Phone{

    // 필드
    String company = "Samsung";
    String model;
    int price;

    // 생성자
    public Phone(String model, int price){

        this.model = model; // this.필드 = 매개변수
        this.price = price; // this.필드 = 매개변수

    }
}

다음과 같이 Phone 클래스에 필드를 선언하고 그 밑에 생성자를 선언했다. 생성자 매개변수로 model, price를 가진다.

여기서 'this.필드' 이렇게 선언하는 부분이 있는데, 이것은 매개변수와 필드값을 구분하기 위해 객체 자신을 참조한다는 의미로 this를 붙이는 것이다. 

 

상기 코드에서 알 수 있듯이 생성자 매개변수와 필드의 이름이 동일하기 때문에 생성자 내부에서 해당 필드에 접근할 수 없다. 왜냐하면 동일한 이름의 매개 변수가 사용 우선순위기 높기 때문이다. 이를 해결하기 위해 'this.필드' 이렇게 사용해 필드와 매개변수를 구분한다.

 

this()

 

this() 메소드는 생성자 내부에서만 사용할 수 있으며, 같은 클래스의 다른 생성자를 호출할 때 사용한다.

생성자 오버로딩이 많아질 경우 매개 변수의 수만 다르고 필드 초기화 내용이 비슷한 경우 코드를 좀 더 간결하게 작성하기 위해 사용한다.

 

클래스( [매개변수 선언은 optional] ){
    this(매개변수 혹은 값); // 클래스의 다른 생성자를 호출한다.
}
public class Phone{

    // field
    String company = "Samsung";
    String model;
    int price;
    int productionYear;
    
    // constructor
    Phone(){}

    Phone(String model){
        this(model, 999, 2021);
    }

    Phone(String model, int price){
        this(model, int, 2021);
    }

    Phone(String model, int price, int productionYear){
        this.model = model;
        this.price = price;
        this.productionYear = productionYear;
    }
}

맨 아래에 위치한 Phone 클래스의 생성자를 Phone(String model), Phone(String model, int price) 생성자가 호출한다.

 


참고

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788968481475&orderClick=LAG&Kc=

 

이것이 자바다 - 교보문고

신용권의 Java 프로그래밍 정복 | 15년 이상 자바 언어를 교육해온 자바 전문강사의 노하우를 아낌 없이 담아낸 자바 입문서. 저자 직강의 인터넷 강의와 Q/A를 위한 커뮤니티(네이커 카페)까지 무

www.kyobobook.co.kr

반응형