본문 바로가기
Java

[Java] 생성자(Constructor)에 대해 알아보자

by 세류오 2026. 1. 14.

[생성자(Constructor)란 무엇인가?]

자바 코드를 보다 보면 이런 코드를 자주 보게 된다

User user = new User();

여기서 보통은 그냥 객체를 선언한거구나, 객체를 만든거구나 생각하겠지만 중요한것은

new User()가 실행되는 순간 자바는 무슨일을 하는걸까?이다.

 

[생성자는 왜 필요할까?]

1. 객체를 "사용 가능한 상태" 로 만들어야 한다.

객체는 new로 만들면 메모리(Heap)에 공간이 생기는데, 그 순간 객체는 단순히 만들어 진 것이지 사용할 준비가 완료된 것이 아니다.

예를 들어 User를 생성한다고 보면 생성자에서 "최소한 이정도는 갖춰야 User로 인정"같은 초기 세팅을 하는것이다.

class User {
    String name;

    User(String name) {
        this.name = name; // 태어날 때부터 name을 갖게 함
    }
}

 

 2. 규칙(불변식)을 강제하려고

객체는 현실 세계의 어떠한 의미를 담는 경우가 많다.

예를들어

- 나이는 음수가 될 수 없다

- 가격은 0 이상이여야 한다

- 아이디는 비어있으면 안된다

이런 규칙이 깨진 객체가 생성되면, 그 객체는 존재 자체가 잘못된 것이다.

생성자는 이 규칙을 생성 순간 검사해서, 규칙이 틀리면 객체가 생성되지 못하게 막는다.

class Product {
    int price;

    Product(int price) {
        if (price < 0) throw new IllegalArgumentException("가격은 0 이상");
        this.price = price;
    }
}

 

3. 중복 초기화를 없애려고

생성자가 없다면 다음과같은 코드가 생길 수 있다.

User u1 = new User();
u1.name = "Van";

User u2 = new User();
u2.name = "Kim";

여기서 문제는 name을 실수로 안넣을 수도 있고, 초기화 코드가 곳곳에퍼져서 수정해야할 때 마다 찾으러 다녀야하는 수고가 생길 수 있다.

생성자를 사용하면 "객체를 만들 때 항상 이 초기화가 실행된다" 가 보장되는 것이다.

User u = new User("Van"); // 만들자마자 완성

 

[정리하자면]

생성자는 단순히 객체를 만드는 문법이 아니라 객체가 태어나는 순간, "정상 상태"를 보장하기 위한 안전장치이다