생성자는 객체가 만들어질 때 자동을 호출되는 메소드를 의미한다.
기존에 생성한 BlackBox 클래스를 이용해 이해해보자.
"기본생성자 호출"을 출력하는 BlackBox() 생성자를 만들었다.
보통 생성자는 변수 선언 뒤에 위치하는 점을 참고하자.
생성자는 보통 클래스명() { 실행할 명령 } 으로 선언한다.
위와 같이 _08_Constructor 클래스 내에 BlackBox b1 객체를 생성하였다.
b1 객체 생성 외에 아무런 명령도 입력하지 않은 상태로 실행하게 되면 "기본 생성자 호출"을 출력하게 된다.
이는 BlackBox 클래스 내에 생성자 메소드가 자동을 호출되었기 때문이다.
생성자 BlackBox()를 오버로딩으로 추가로 생성하여 블랙박스의 정보를 입력받는 메소드를 생성해보자.
BlackBox 클래스 내에 BlackBox(String modelName, String resolution, int price, String color) 전달값을 필요로 하는 생성자를 선언하였다.
각각 입력받은 modelName, resolution, price, color 값을 인스턴스 변수에 저장하는 메소드이다.
b1 객체의 경우 b1.modelName="까망이" 형식으로 각 인스턴스 변수의 값을 지정해주었다.
하지만 위에 생성한 BlackBox() 클래스를 활용하면 b2 객체와 같이,
객체 생성과 동시에 인스턴스 변수 값을 지정할 수 있다. (modelName, resolution, price, color)
이번에는 BlackBox 클래스 내에 생성자를 통하여 클래스 변수 값을 적용 및 출력하는 방법을 알아보자.
BlackBox 클래스 내에 int serialNumber 인스턴스 변수와 static int counter 클래스 변수를 추가로 선언하였다.
serialNumber 변수에는 counter 값을 적용하고, counter의 값은 0, 1, 2 ... 로 하나 씩 증가하는 값으로 생성자를 선언해보자.
* 편의상 첫번째 BlackBox() 생성자는 기본 생성자,
두번째 BlackBox(String modelName, String resolution, int price, String color)은 사용자 정의 생성자로 지칭한다.
int serialNumber; //시리얼번호
static int counter=0; //시리얼번호를 생성(1, 2 ... ) - 클래스변수(모든객체에 공통적용)
BlackBox(){
System.out.println("기본 생성자 호출");
this.serialNumber = ++counter;
System.out.println("새로운 시리얼 넘버를 발급받았습니다 : " + this.serialNumber);
}
BlackBox() 기본 생성자 호출 시
this.serialNumber 안에 ++counter 값을 적용 후
// this.serialNumber : 해당 클래스 내의 인스턴스 변수 serialNumber
"새로운 시리얼 넘버를 발급받았습니다." + serialNumber 값을 출력한다.
이때 사용자정의 생성자를 살펴보자.
기존에 BlackBox(String modelName, String resolution, int price, String color) 전달값을 필요로 하는 생성자를 선언하였는데 객체에서 사용자 정의 생성자만 호출하게되면 serialNumber 값이 적용되지 않는다.
BlackBox(String modelName, String resolution, int price, String color){
this(); //기본 생성자 BlackBox() 호출
System.out.println("사용자 정의 생성자 호출");
this.modelName = modelName;
this.resolution = resolution;
this.price = price;
this.color = color;
}
그래서 위와 같이 사용자정의 생성자 안에 this(); 를 추가하였다.
this() 은 해당 클래스의 생성자를 호출하게 되는데 () 전달값 없이 호출하였으므로 기본 생성자를 호출하게된다.
즉, 사용자정의 생성자 호출 시 기본생성자 BlackBox()를 호출하여 serialNumber 값을 발급받을 수 있게 하였다.
* 반대로 기본생성자 BlackBox() 에서도 아래와 같이 사용자정의생성자를 호출할 수 있다.
BlackBox() { this("까망이","UHD",20000,"블랙") }
_08_Constructor 클래스에서 b1, b2 객체를 각각 생성하였다.
b1 은 BlackBox() 전달값이 없는 기본생성자를 호출하게 되고,
b2은 BlackBox("하양이","UHD",30000,"화이트") 전달값 4개를 받는 사용자 정의 생성자를 호출하게 된다.
위 코드를 실행하면 아래와 같이 serialNumber가 부여되고 출력되는 것을 확인할 수 있다.
'Spec UP - Backend > 나도코딩의 자바기본편' 카테고리의 다른 글
Chap_07. 접근 제어자 (0) | 2023.04.27 |
---|---|
Chap_07. Getter & Setter (0) | 2023.04.26 |
Chap_07. This (1) | 2023.04.25 |
Chap_07. 클래스 메소드 (0) | 2023.04.21 |
Chap_07. 메소드 오버로딩 (0) | 2023.04.21 |
댓글