본문 바로가기

2023/JAVA_나도코딩 강의 공부

생성자

_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);

    }
}

[ 실행 결과 ]

_08_Constructor 실행 결과

생성자를 따로 정의해서 한꺼번에 값을 전달받아 이를 인스턴스 변수에 직접 집어넣거나

다른 초기작업을 생성자에서 할 수 있다.

즉, 객체를 생성할 때마다 매번 인스턴스 변수에 값을 넣어(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);

    }
}

빨간색으로 표시한 부분에 주목하라.

 

_08_Constructor.class의 메인 메소드를 실행한 실행결과

 

 

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