[생성자(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"); // 만들자마자 완성
[정리하자면]
생성자는 단순히 객체를 만드는 문법이 아니라 객체가 태어나는 순간, "정상 상태"를 보장하기 위한 안전장치이다
'Java' 카테고리의 다른 글
| [Java] 많은 프로그램들은 왜 여전히 자바(Java)를 사용할까? (0) | 2026.01.22 |
|---|---|
| [Java] main은 왜 static이 붙을까? (0) | 2026.01.13 |
| [Java] 오버로딩(Method Overloading) (0) | 2026.01.11 |
| [Java] Garbage Collector에 대해 알아보자 (0) | 2026.01.04 |
| [Java] 단위 테스트와 통합 테스트의 차이점과 장단점 (0) | 2026.01.02 |