JAVA

자바 생성자 — 객체를 만들 때 처음 값을 채우는 법(CONSTRUCTOR)

PANCO_IT
#자바#JAVA#생성자#객체#this

생성자 없이 값을 하나씩 채우는 경우와 생성자로 한 번에 채우는 경우를 비교한 그림

생성자를 쓰면 객체를 만드는 순간 초기값을 한 번에 채웁니다.

1편에서 객체를 만들고 필드를 하나씩 채웠던 것을 기억하시나요. new Dog()로 만든 뒤 d.name = "바둑이", d.age = 3처럼 줄줄이 값을 넣었습니다. 값이 많아지면 번거롭고, 하나 빠뜨리기도 쉽습니다. 이걸 객체를 만드는 순간 한 번에 해결해 주는 것이 오늘의 주제, 생성자입니다.

생성자가 뭔가요?

생성자는 new로 객체를 만들 때 자동으로 딱 한 번 실행되는 특별한 메서드입니다. 여기서 객체의 초기값을 채웁니다.

쉽게 — 붕어빵 틀에 반죽과 팥을 넣는 순간과 같습니다. 빵을 찍어내는(new) 그 순간에 속을 채워 넣죠. 나중에 하나씩 뜯어 팥을 넣는 게 아니라, 만들 때 이미 채워져 나옵니다. 생성자가 바로 그 '만들 때 채우는' 일을 맡습니다.

생성자 만들기

생성자는 두 가지 규칙만 지키면 됩니다. 이름을 클래스와 똑같이 짓고, 반환타입을 쓰지 않는 것입니다.

class Dog {
    String name;
    int age;

    Dog(String name, int age) {   // 생성자: 클래스명과 같은 이름, 반환타입 없음
        this.name = name;
        this.age = age;
    }
}

메서드처럼 생겼지만 voidint 같은 반환타입이 앞에 없습니다. 이름도 Dog으로 클래스와 똑같습니다. 이 둘이 생성자의 표시입니다.

생성자의 세 가지 규칙: 이름은 클래스명, 반환타입 없음, new 때 자동 호출

그림 1. 이름은 클래스명과 같게, 반환타입은 쓰지 않고, new 할 때 자동으로 실행됩니다.

new로 부르면 자동 실행

이제 객체를 만들 때 값을 함께 넘기면, 생성자가 그 값으로 초기화해 줍니다.

Dog d = new Dog("바둑이", 3);   // 생성자가 자동 실행되어 채움

한 줄로 끝입니다. d.name, d.age를 따로 넣을 필요가 없습니다. 값을 빠뜨릴 걱정도 줄어듭니다. 만드는 순간 반드시 채워지기 때문입니다.

this — 필드와 매개변수 구분하기

위 생성자에서 this.name = name이 낯설 수 있습니다. 매개변수 이름(name)과 필드 이름(name)이 같을 때, **this.name은 "이 객체의 필드"**를 가리킵니다.

this.name = name;   // 이 객체의 필드 name  ←  매개변수 name

왼쪽 this.name은 객체가 가진 필드, 오른쪽 name은 밖에서 받은 매개변수입니다. this를 붙여 둘을 구분하는 것입니다.

단골 함정 — 기본 생성자가 사라진다

생성자를 하나도 안 만들면, 자바가 매개변수 없는 기본 생성자를 몰래 만들어 줍니다. 그래서 new Dog()가 됩니다. 그런데 매개변수 있는 생성자를 직접 만들면, 이 기본 생성자는 사라집니다.

Dog d = new Dog();            // 오류: 매개변수 생성자만 있으면 new Dog() 불가
Dog d = new Dog("바둑이", 3);  // 정상

new Dog()도 쓰고 싶다면, 매개변수 없는 생성자를 직접 하나 더 만들어 두면 됩니다. 이렇게 이름이 같고 매개변수만 다른 생성자를 여러 개 두는 것도 가능합니다.

직접 실행해 보기

아래 코드를 돌려 보고, new Dog(...)에 다른 이름과 나이를 넣어 객체를 여러 개 만들어 보세요.

생성자로 객체 만들기
class Dog {
  String name;
  int age;
  Dog(String name, int age) {   // 생성자
      this.name = name;
      this.age = age;
  }
  void info() {
      System.out.println(name + " (" + age + "살)");
  }
}

public class Main {
  public static void main(String[] args) {
      Dog d = new Dog("바둑이", 3);
      d.info();                    // 바둑이 (3살)
      Dog d2 = new Dog("초코", 5);
      d2.info();                   // 초코 (5살)
  }
}

📱 코드 실행(실습)은 태블릿·PC에서 이용할 수 있어요. 모바일에서는 위 코드를 눈으로 따라가며 확인하세요.

한 장 정리

항목내용
생성자란new 할 때 자동 실행되는 초기화용 메서드
이름클래스명과 똑같이
반환타입쓰지 않음 (void도 안 됨)
this.필드매개변수와 이름이 같을 때 "이 객체의 필드"
기본 생성자직접 안 만들면 자동 제공, 매개변수 생성자 만들면 사라짐

이것만 기억하면 됩니다. 생성자는 객체를 만드는 순간 초기값을 채워 주는 특별한 메서드입니다. 이름은 클래스명과 같게, 반환타입은 쓰지 않고, 매개변수로 값을 받아 this로 필드에 담습니다. 매개변수 생성자를 만들면 기본 생성자는 사라진다는 점만 기억하세요.

미니 퀴즈

개념을 제대로 잡았는지 직접 풀어 봅니다. 정답은 눌러야 나옵니다.

미니 퀴즈

OX 2문제 + 4지선다 3문제


포켓코딩(JAVA2) 3편 · 예제 출처: 강사 개인 GitHub 저장소. 다음 편: 캡슐화 — 필드를 숨기고 안전하게 다루는 법.

PANCO_IT

IT 지식을 정리하는 개발자

관련 글