본문 바로가기
코딩테스트/자바 Java

자바 Java | 생성자(Constructor) 개념: 객체 초기화의 핵심, this() 키워드, 생성자 간 호출 방법

by YUNI Heo 2023. 2. 16.
반응형

 

✅ 생성자 Constructor

객체를 생성할 때 호출되어 인스턴스(Instance) 변수의 초기화를 담당하는 메서드이다.

생성자를 이용하여 객체를 생성하고, 다양한 형태의 생성자를 정의하여 사용한다.

 

  • 클래스와 같은 이름을 가진다.
  • 반환 타입이 없다.
  • 인스턴스 변수를 초기화하기 위한 매개변수를 가질 수 있다.
  • 객체를 생성할 때 반드시 호출된다.

 

생성자를 사용하여 객체를 생성할 때는 new 연산자를 사용하며, 객체 생성과 동시에 생성자가 호출된다. 

생성자는 클래스 내에 여러 개 정의할 수 있으며, 매개변수의 개수나 타입에 따라 다른 생성자로 인식한다.

 

💡 생성자 조건

  1. 클래스와 같은 이름을 가져야 한다.
  2. 반환 타입이 없어야 한다.
  3. 객체 생성 시 반드시 호출되어야 한다.

 

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

 

✅ 생성자 간 호출

생성자 간 호출은 같은 클래스 내에서 다른 생성자를 호출하는 것을 의미한다.

 

Java에서는 this() 키워드를 이용하여 생성자 간 호출을 구현한다.

생성자 간 호출을 통하여 중복되는 코드를 줄이고, 코드의 재사용성을 향상한다.

 

💡 this() 키워드

  • 반드시 생성자의 첫 번째 줄에서만 호출한다.
  • 다른 생성자를 호출할 때 사용하며, 인자를 이용하여 호출할 생성자를 구분한다.
  • this()를 이용하여 다른 생성자를 호출할 경우, 해당 생성자의 내용이 먼저 실행된 후, 다시 원래의 생성자로 돌아와서 남은 코드를 실행한다.

 

class Car2 {
    String color;       // 색상
    String gearType;    // 변속기 종류 - auto(자동), manual(수동)
    int door;           // 문의 개수

    Car2() { // Car2(String color, String gearType, int door) 호출
        this("white", "auto", 4);
    }

    Car2(String color) { // Car2(String color, String gearType, int door) 호출
        this(color, "auto", 4);
    }

    Car2(String color, String gearType, int door) {
        this.color = color;
        this.gearType = gearType;
        this.door = door;
    }
}

class Ex6_13 {
    public static void main(String[] args) {
        Car2 c1 = new Car2();   
        Car2 c2 = new Car2("blue");

        System.out.println("c1의 color=" + c1.color + ", gearType=" + c1.gearType+ ", door="+c1.door);
        System.out.println("c2의 color=" + c2.color + ", gearType=" + c2.gearType+ ", door="+c2.door);
    }
}
c1의 color=white, gearType=auto, door=4
c2의 color=blue, gearType=auto, door=4

 

✅ 생성자 종류

💡 기본 생성자 Default Constructor 

  • 클래스에 생성자가 명시되어 있지 않은 경우 컴파일러에 의해 자동 생성한다.
  • 매개변수가 없는 생성자로, 객체를 생성할 때 호출된다.

 

public class MyClass {
    public MyClass() {
        // 기본 생성자 내용
    }
}

 

💡 매개변수가 있는 생성자 Parameterized Constructor

  • 객체를 생성할 때 인자를 전달받아 초기화하는 생성자이다.
  • 클래스 내에 매개변수를 갖는 생성자를 선언하여 사용한다.

 

💡 오버로딩된 생성자 Overloaded Constructor

  • 클래스 내에 매개변수를 갖는 여러 개의 생성자를 선언하여 사용한다.
  • 객체를 생성할 때 전달하는 인자의 타입, 개수, 순서에 따라 알맞은 생성자가 선택되어 호출된다.

 

💡 복사 생성자 Copy Constructor

  • 기존 객체를 복사하여 새로운 객체를 생성하는 생성자이다.
  • Cloneable, Serializable 인터페이스를 사용하거나, 직접 복사하는 방법을 사용한다.

 

💡 Private 생성자

  • 클래스 내부에서만 생성자 호출이 가능하도록 접근 제한자를 private으로 지정하는 생성자이다.
  • 싱글톤 패턴(Singleton Pattern)에서 사용한다.

 

💡 캡슐화된 생성자 Encapsulated Constructor

  • 객체를 생성하는 과정을 캡슐화하여 외부에서 접근할 수 없도록 제어하는 생성자이다.
  • 팩토리 메서드(Factory Method) 패턴에서 사용한다.
반응형