_08_Constructor ( 생성자 )
1. 기본 생성자 호출
package chap_07;
public class _08_Constructor {
public static void main(String[] args) {
// 생성자 : 객체가 만들어질 때 자동으로 호출되는 메소드
BlackBox b1=new BlackBox();
}
}
package chap_07;
public class BlackBox {
String modelName; // 모델명
String resolution; // 해상도
int price; // 가격
String color; // 색상
static boolean canAutoReport=false; // 자동 신고 기능
BlackBox(){
System.out.println("기본 생성자 호출");
}
}
위와 같은 상태에서 main 메소드를 실행해보면
[ 실행 결과 ]
기본 생성자 호출
2. 사용자 정의 생성자 호출
package chap_07;
public class BlackBox {
String modelName; // 모델명
String resolution; // 해상도
int price; // 가격
String color; // 색상
static boolean canAutoReport=false; // 자동 신고 기능
BlackBox(){
System.out.println("기본 생성자 호출");
}
BlackBox(String modelName, String resolution, int price, String color){
System.out.println("사용자 정의 생성자 호출");
this.modelName=modelName;
this.resolution=resolution;
this.price=price;
this.color=color;
}
}
package chap_07;
public class _08_Constructor {
public static void main(String[] args) {
// 생성자 : 객체가 만들어질 때 자동으로 호출되는 메소드
BlackBox b1=new BlackBox();
b1.modelName="까망이";
b1.resolution="FHD";
b1.price=200000;
b1.color="블랙";
BlackBox b2=new BlackBox("하양이", "UHD", 300000, "화이트");
// b2 객체의 클래스명 뒤의 괄호안에 필요한 값들 다 정의해주었으므로
// b1과 같은 작업을 안해도 된다.
System.out.println(b2.modelName);
System.out.println(b2.resolution);
System.out.println(b2.price);
System.out.println(b2.color);
}
}
[ 실행 결과 ]
생성자를 따로 정의해서 한꺼번에 값을 전달받아 이를 인스턴스 변수에 직접 집어넣거나
다른 초기작업을 생성자에서 할 수 있다.
즉, 객체를 생성할 때마다 매번 인스턴스 변수에 값을 넣어(b1)주지 않고 한줄로 처리 가능(b2)한 편리함이 있다.
3. this();를 활용하여 기본 생성자 호출(마치 메소드 오버로딩처럼~)과 이를 통한 사용자 정의 생성자 만들기
package chap_07;
public class BlackBox {
String modelName; // 모델명
String resolution; // 해상도
int price; // 가격
String color; // 색상
int serialNumber; // 시리얼 번호
static int counter=0; // 시리얼 번호를 생성해주는 역할(처음엔 0이었다가 ++연산을 통해 값을 증가시킴)
BlackBox(){ // 이 생성자 호출시에는 자동으로 시리얼 넘버를 발급받을 수 있다.
System.out.println("기본 생성자 호출");
this.serialNumber=++counter;
System.out.println("새로운 시리얼 넘버를 발급받았습니다. : "+this.serialNumber);
}
BlackBox(String modelName, String resolution, int price, String color){
this(); // 기본 생성자 호출
// 기본 생성자에 바로 접근하여 기본 생성자에 정의된 동작들을 모두 실행
// 이후 사용자 정의 생성자에 정의된 나머지 동작들을 모두 실행
System.out.println("사용자 정의 생성자 호출");
this.modelName=modelName;
this.resolution=resolution;
this.price=price;
this.color=color;
}
}
package chap_07;
public class _08_Constructor {
public static void main(String[] args) {
// 생성자 : 객체가 만들어질 때 자동으로 호출되는 메소드
BlackBox b1=new BlackBox();
b1.modelName="까망이";
b1.resolution="FHD";
b1.price=200000;
b1.color="블랙";
System.out.println(b1.modelName);
System.out.println(b1.serialNumber);
System.out.println("-----------------------------------");
BlackBox b2=new BlackBox("하양이", "UHD", 300000, "화이트");
// b2 객체의 클래스명 뒤의 괄호안에 필요한 값들 다 정의해주었으므로
// b1과 같은 작업을 안해도 된다.
System.out.println(b2.modelName);
System.out.println(b2.serialNumber);
}
}
빨간색으로 표시한 부분에 주목하라.
1. 생성자에 기본적으로 실행되어야 하는 동작을 명시할 수 있다.
2. 객체가 생성됨과 동시에 전달값으로 초기화하고자 할 떄에도 생성자 활용 가능
3. 생성자 간에 서로를 호출하기 위해 this();를 사용할 수 있다.
참고 : 나도코딩 자바 기본편
'2023 > JAVA_나도코딩 강의 공부' 카테고리의 다른 글
상속 (0) | 2023.02.28 |
---|---|
패키지 (0) | 2023.02.28 |
this (0) | 2023.02.27 |
메소드 오버로딩 / 클래스 메소드 (0) | 2023.02.25 |
클래스 (1) | 2023.02.25 |