Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

생성자 Constructor 본문

Java/객체지향

생성자 Constructor

빌드이너프 2023. 6. 1. 16:26

생성자

인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 메서드(iv 초기화를 편하게 하기 위함)

인스턴스 생성시 수행할 작업(instance variable 초기화)에 사용

Time t = new Time();
t.hout = 12;
t.minute = 34;
t.second = 56;

 

Time t = new Time(12, 34, 56);

 

생성자 조건

1. 이름이 클래스 이름과 같아야한다

2. return 값이 없다(void 없음)

return값이 없는 경우 void를 붙이는데 생성자의 경우 항상 반환값이 없기 때문에 void 안붙임

3. 모든 클래스는 반드시 생성자를 가져야 한다

클래스이름(타입 변수명, 타입 변수명, ...) {
    // 인스턴스 생성 시 수행될 코드,
    // 주로 인스턴스 변수의 초기화 코드를 적는다
}

 

생성자 오버로딩

class Card { // 클래스 이름
    Card() { // 매개변수가 없는 생성자
        // 인스턴스 초기화 작업
    }

    Card(String kind, int number) { // 매개변수가 있는 생성자
        // 인스턴스 초기화 작업
    }
}

 

생성자 수행과정

1. 연산자 new에 의해서 메모리(heap)에 Card 클래스의 인스턴스가 생성된다

2. 생성자 Card()가 호출되어 수행된다

3. 연산자 new의 결과로, 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장된다

Card c = new Card();

 

기본 생성자 default constructor

매개 변수가 없는 생성자

모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야 한다(기본 생성자 넣는 것이 습관이 될 수 있게 하기)

클래스에 생성자를 정의하지 않고 인스턴스를 생성할 수 있었던 이유는 컴파일러가 제공하는 기본 생성자 때문

클래스이름() {} // 기본 생성자
Point() {} // Point 클래스의 기본 생성자

 

생성자가 하나도 없을 때만 컴파일러가 자동 추가

class Data_1 {
    int value;
}

class Data_2 {
    int value;
    Data_2(int x) {
        value = x;
    }
}

public class ConstructorTest {
    public static void main(String[] args) {
        Data_1 d1 = new Data_1();
        // Data_2 d2 = new Data_2(); // compile error 발생
    }
}

 

 

오류 해결

Data_2 기본 생성자 추가(이미 Data_2의 생성자가 1개 있기 때문에 직접 넣어줘야 함)

Data_1의 기본 생성자는 compile가 자동으로 넣어준다

class Data_1 {
    int value;
    // Data_1() {} // 기본 생성자 추가, 하지만 주석 처리해도 상관없음
}

class Data_2 {
    int value;

    Data_2() {} // 기본 생성자
    Data_2(int x) {
        value = x;
    }
}

public class ConstructorTest {
    public static void main(String[] args) {
        Data_1 d1 = new Data_1();
        Data_2 d2 = new Data_2();
    }
}

 

매개변수가 있는 생성자

Car c2 = new Car();

new가 하는 일: 객체 생성

Car()가 하는 일: 객체 초기화

class Car {
    String color;
    String gearType;
    int door;

    Car() {} // 생성자
    Car(String c, String g, int d) { // 매개변수가 있는 생성자
        color = c;
        gearType = g;
        door = d;
    }
}

class CarTest {
    public static void main(String[] args) {
        Car c1 = new Car();
        c1.color = "white"; // 인스턴스 변수 따로 초기화
        c1.gearType = "auto"; // 인스턴스 변수 따로 초기화
        c1.door = 4; // 인스턴스 변수 따로 초기화

        Car c2 = new Car("white", "auto", 5); // 인스턴스를 생성하는 동시에 원하는 값으로 초기화 
        System.out.println(c1.color +" "+  c1.gearType +" "+ c1.door);
        System.out.println(c2.color +" "+  c2.gearType +" "+ c2.door);
    }
}

white auto 4
white auto 5


생성자 초기화