개발 일지/Java

[Java] 생성자(Constructor, ctor)

미숫가루설탕많이 2022. 12. 28. 13:29

 생성자(Constructor)는 객체를 생성하는 역할을 하는 클래스의 구성 요소로서, 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드이다. 여기서, 인스턴스 생성을 담당하는 것은 new 키워드이고 생성자는 인스턴스 변수들을 초기화하는 데 사용되는 특수한 메서드이다.

 

생성자는 객체가 처음 생성될 때 호출되어 멤버 변수를 초기화하고 필요에 따라 자원을 할당하기도 한다. 객체의 생성 시에 호출되기 때문에 생성자라는 이름이 붙었다.

 

 생성자는 메서드와 비슷한 구조를 갖고 있지만 크게 두 가지 부분에서 차이를 가진다.

 

  1. 생성자의 이름은 반드시 클래스의 이름과 같아야 한다. 만약 클래스 이름과 생성자의 이름이 다르다면 그 메서드는 더이상 생산자로서의 기능을 수행할 수 없다.

  2. 생상자는 리턴 타입이 없다. 하지만 메서드에서 리턴 값이 없을 때 표현하는 void 키워드를 사용하지 않는다. 무언가를 '리턴하지 않는다'를 의미하는 void와 다르게 생성자는 리턴 타입 자체가 존재하지 않기 때문이다.

 

/* 클래스명(매개변수) { // 생성자 기본 구조
	...생략...
}	*/


public class ConstructorExample {
    public static void main(String[] args) {
        Constructor constructor1 = new Constructor();
        Constructor constructor2 = new Constructor("Hello World");
        Constructor constructor3 = new Constructor(1,10);
    }
}

class Constructor {
    Constructor() { // (1) 생성자 오버로딩
        System.out.println("1번 생성자");
    }

    Constructor(String str) { // (2) 
        System.out.println("2번 생성자");
    }

    Constructor(int a, int b) { // (3) 
        System.out.println("3번 생성자");
    }
}

 

 위 코드와 같이 클래스명과 같은 이름의 생산자명을 작성하고 리턴 타입이 없기 때문에 리턴 타입에는 아무것도 작성하지 않는다. 또한, 생성자도 오버로딩이 가능하므로 한 클래스 내에 여러 개의 생성자가 존재할 수 있다. 매개변수는 있을 수도 있고 없을 수도 있다.

 

 생성자의 모양에 따라 객체를 생성하는 방법이 결정되는데 위 코드의 (2)번 생성자를 호출하기 위해서는 객체 생성 시에 문자열을 전달해야 하고, (3)번 생성자를 호출하기 위해서는 두 개의 int형 매개변수를 전달해야 한다.

 

 

 

 

기본 생성자(Default Constructor)


 모든 클래스에는 반드시 하나 이상의 생성자가 존재해야 한다. 생성자를 따로 만들지 않아도 정상적으로 인스턴스를 만들 수 있었던 이유는 자바 컴파일러가 생성자가 클래스 안에 포함되어 있지 않은 경우에 기본 생성자를 자동으로 추가해줬기 때문이다. 기본 생성자는 매개 변수가 없는 생성자를 의미한다.

 

클래스명(){} //	기본 생성자

DefaultConst(){} //	DefaultConst 클래스의 기본 생성자

 

 위 코드처럼 컴파일러가 자동으로 추가해주는 기본 생성자에는 매개변수도 없고 바디에 아무런 내용이 없다. 만약 생성자가 이미 추가되어 있는 경우에는 기본 생성자가 아니라 이미 추가되어 있는 생성자를 기본으로 사용하게 된다.

 

 

 

 

매개변수가 있는 생성자


 매개변수가 있는 생성자는 메서드처럼 매개변수를 통해 호출 시에 해당 값을 받아서 인스턴스를 초기화하는 데 사용된다. 고유한 특성을 가진 인스턴스를 계속 만들어야 하는 경우에 인스턴스마다 각기 다른 값을 갖고 초기화를 할 수 있어서 유용하다.

 

// 기본 생성자
car() {}


// 매개변수가 있는 생성자
car(String m, String c, int d) {
model = m;	// 차량 모델
color = c;	// 차량 색상
door = d;	// 문 개수
}

 

 인스턴스 생성 시에 매개변수가 있는 생성자를 사용하게 되면 인스턴스를 만든 후에 인스턴스의 필드값을 일일이 설정해줄 필요없어서 편리하다. 또한, 생성자의 모양에 따라 객체를 생성하는 방법도 달라지게 된다. 기본 생성자의 경우에는 매개변수가 없기 때문에 new 키워드와 생성자를 호출하면 되지만, 매개변수가 있는 경우에는 그 개수와 타입에 알맞게 생성자를 호출해야 한다.

'개발 일지 > Java' 카테고리의 다른 글

[Java] 내부 클래스(Inner Class)  (0) 2022.12.28
[Java] this 와 this()  (0) 2022.12.28
[Java] 메서드 오버로딩(Method Overloading)  (0) 2022.12.27
[Java] 메서드(Method)  (0) 2022.12.27
[Java] static 키워드  (0) 2022.12.27