[객체 지향 프로그래밍] 생성자 (Constructor)

sy·2023년 7월 1일
0

생성자란?

인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드

생성자 조건
생성자의 이름은 클래스의 이름과 같아야한다.
생성자는 리턴값이 없다.

  • 생성자도 오버로딩 가능
  • 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다. 단순히 초기화에 사용된다.
Card c = new Card();

// 1. 연산자 new에 의해 메모리(heap)에 Card 클래스의 인스턴스가 생성
// 2. 생성자 Card()가 호출 되어 수행
// 3. 연산자 new의 결과로 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장

기본 생성자 (default constructor)

모든 클래스에는 반드시 하나 이상의 생성자가 정의 되어 있어야 한다.
컴파일러가 기본 생성자를 제공하므로 우리는 따로 정의하지 않고도 인스턴스를 생성할 수 있다.
컴파일러가 자동적으로 기본 생성자를 추가해주는 경우는 클래스 내에 생성자가 하나도 없을 때 뿐이다.

매개 변수가 있는 생성자

class Car {
	String color;
    String gearType;
    int door;
    
    Car() {} // 생성자 
    Car(String color, String gearType, int door) { // 생성자
    	this.color = color;
        this.gearType = gearType;
        this.door = door;
    }
    
    Car(String color) {
        this(color, "auto", 4); // 생성자에서 다른 생성자 호출하기
    }
}

class CarTest {
	Car car = new Car("white", "auto", 4);
}

생성자에서 다른 생성자 호출하기 - this(), this

  • 생성자의 이름으로 클래스 이름 대신 this를 사용한다.
  • 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.

💡 첫 줄에서만 호출이 가능한 이유는 생성자 내에서 초기화 작업 도중에 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버 변수들의 값을 초기화 할 것이므로 다른 생성자를 호출 하기 이전의 초기화 작업이 무의미해질 수 있기 때문

0개의 댓글