본문으로 건너뛰기
Advertisement

6.3 생성자 (Constructor)

클래스로부터 객체를 생성할 때, 생성과 동시에 인스턴스 변수들을 적절한 값으로 자동으로 초기화해주는 메서드와 매우 유사한 구조를 가진 것을 바로 생성자(Constructor) 라고 부릅니다.

1. 생성자의 조건 및 특징

  1. 생성자의 이름은 무조건 클래스의 이름과 완전히 같아야 합니다.
  2. 일반 메서드와 달리 리턴 값이 전혀 없으며, void 조차 붙이지 않습니다.
  3. 인스턴스를 생성할 때 (즉 new 키워드를 사용하는 즉시) 단 한 번 실행됩니다.

개발자는 이를 이용해, 객체가 생성될 때 무조건 거쳐가야만 하는 '초기 셋팅 로직'을 강제할 수 있습니다.

class Car {
String color;
String gearType;

// 생성자 (클래스 이름과 동일, 반환 타입 없음)
Car() {
System.out.println("자동차 객체가 갓 만들어졌습니다!");
color = "white"; // 기본 색상을 흰색으로 초기화
gearType = "auto";
}
}

// 사용시 바로 호출됨
Car c = new Car(); // '자동차 객체가 갓 만들어졌습니다!' 출력됨

2. 매개변수가 있는 생성자

생성자도 일반 메서드처럼 호출 시 매개변수를 받을 수 있어서 인스턴스마다 각각 다른 값으로 초기화할 수 있습니다. 각기 다른 개성을 가진 인스턴스를 생산력 있게 만드는데 매우 유용합니다.

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

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

// 인스턴스 생성 시 원하는 값들을 함께 넘겨주기
Car c1 = new Car("white", "auto", 4);
Car c2 = new Car("red", "manual", 2);

3. 기본 생성자 (Default Constructor)

사실, 지금까지 우리가 클래스를 만들 때 생성자를 만들지 않아도 new Car()같이 객체를 만들 수 있던 것은, 컴파일러가 알아서 아무 내용이 없는 "기본 생성자"를 몰래 추가해주고 있었기 때문입니다.

Car() { }

그러나 클래스 내부에 매개변수가 있는 등 우리가 사용자가 새로 작성한 생성자가 단 1개라도 선언되어 있다면 컴파일러는 이 기본 생성자를 추가하지 않습니다. 따라서 기본 생성자 형식이 필요하다면 수동으로 추가 선언해두는 것이 안전하고 좋은 습관입니다.

Advertisement