자바에서 객체를 생성하는 대표적인 세 가지 방식인 생성자(Constructor), 정적 팩토리 메서드(Static Factory Method), 빌더 패턴(Builder Pattern)에 대해 비교해보고, 각각의 장단점과 사용 예시를 정리한 문서입니다.
new 키워드로 객체 생성 가능User user = new User("kim", 30, "seoul");
public class User {
private String name;
private int age;
private User(String name, int age) {
this.name = name;
this.age = age;
}
public static User of(String name, int age) {
return new User(name, age);
}
}
User user = User.of("kim", 30);
User user = User.builder()
.name("kim")
.age(30)
.address("seoul")
.build();
| 항목 | 생성자 | 정적 팩토리 메서드 | 빌더 패턴 |
|---|---|---|---|
| 가독성 | 낮음 | 중간 | 높음 |
| 필드 수 많을 때 | 비추천 | 중간 | 추천 |
| 선택적 파라미터 | 불편 | 불편 | 유연함 |
| 불변 객체 | 불편 | 가능 (약간 불편) | 매우 용이 |
| 상속 | 가능 | 제한적 | 가능 (Builder도 필요) |
| 객체 재사용 | 불가 | 캐싱 가능 | 불가 (보통 새로 만듦) |
| 코드 길이 | 짧음 | 중간 | 김 |
| 유지보수 | 어려움 | 중간 | 쉬움 |
| 상황 | 추천 방식 |
|---|---|
| 필드 1~2개, 단순 객체 | 생성자 |
| 이름으로 의미 부여하고 싶을 때 | 정적 팩토리 메서드 |
| 선택적 파라미터 많고 불변 객체 필요할 때 | 빌더 패턴 |
| 인터페이스 기반 반환 원할 때 | 정적 팩토리 |
| DTO나 설정 객체 등 값 수정 필요할 때 | 빌더 패턴 (toBuilder) |
👉 상황에 맞게 객체 생성 방식을 선택하는 것이 가장 중요합니다!