자바 객체 생성 방식

김재윤·2025년 4월 17일

☕ 자바 객체 생성 방식 비교: 생성자 vs 정적 팩토리 vs 빌더 패턴

자바에서 객체를 생성하는 대표적인 세 가지 방식인 생성자(Constructor), 정적 팩토리 메서드(Static Factory Method), 빌더 패턴(Builder Pattern)에 대해 비교해보고, 각각의 장단점과 사용 예시를 정리한 문서입니다.


📌 1. 생성자 (Constructor)

✅ 장점

  • 가장 기본적이고 직관적인 방법
  • 별도의 구현 없이 new 키워드로 객체 생성 가능
  • 코드 길이가 짧음

❌ 단점

  • 필드 수가 많아질 경우 파라미터 순서 헷갈림
  • 오버로딩이 많아지면 유지보수 어려움
  • 선택적 파라미터 처리 어려움
  • 가독성 떨어짐

💡 사용 예시

User user = new User("kim", 30, "seoul");

📌 2. 정적 팩토리 메서드 (Static Factory Method)

✅ 장점

  • 메서드 이름으로 객체 생성의 의도를 명확히 표현 가능
  • 객체를 캐싱해 재사용 가능 (성능 향상)
  • 하위 타입 반환이 가능 (인터페이스나 추상 클래스 숨김)
  • 복잡한 생성 로직 캡슐화 가능

❌ 단점

  • 생성자인지 일반 메서드인지 직관적으로 구분 어려움
  • 상속이 제한됨 (생성자 숨기면 서브클래싱 어려움)
  • 필드 수가 많으면 코드가 복잡해짐

💡 사용 예시

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);

📌 3. 빌더 패턴 (Builder Pattern)

✅ 장점

  • 필드가 많을 때도 가독성 좋고, 순서 상관없이 값 설정 가능
  • 선택적 파라미터 처리에 용이
  • 불변 객체(Immutable Object) 생성 가능
  • 메서드 체이닝으로 직관적인 코드 작성 가능

❌ 단점

  • Builder 패턴은 객체를 생성하는 의도가 명확히 드러나지 않는다.(선택적 파라미터 선언으로 인해 다른 사람은 이해할 수 없는 객체를 생성할 수 도 있음.)
  • 코드 길이가 길고 클래스가 추가됨 (Builder 클래스)
  • 단순 객체에는 과한 설계일 수 있음
  • 런타임 시 누락된 필드로 오류 가능성 존재

💡 사용 예시

User user = User.builder()
    .name("kim")
    .age(30)
    .address("seoul")
    .build();

✅ 비교 요약 표

항목생성자정적 팩토리 메서드빌더 패턴
가독성낮음중간높음
필드 수 많을 때비추천중간추천
선택적 파라미터불편불편유연함
불변 객체불편가능 (약간 불편)매우 용이
상속가능제한적가능 (Builder도 필요)
객체 재사용불가캐싱 가능불가 (보통 새로 만듦)
코드 길이짧음중간
유지보수어려움중간쉬움

🎯 언제 어떤 방식을 써야 할까?

상황추천 방식
필드 1~2개, 단순 객체생성자
이름으로 의미 부여하고 싶을 때정적 팩토리 메서드
선택적 파라미터 많고 불변 객체 필요할 때빌더 패턴
인터페이스 기반 반환 원할 때정적 팩토리
DTO나 설정 객체 등 값 수정 필요할 때빌더 패턴 (toBuilder)

✅ 마무리

  • 생성자: 가장 단순하고 빠름, 하지만 가독성 낮음
  • 정적 팩토리: 의미 부여, 재사용, 서브타입 감춤에 유리
  • 빌더: 복잡한 객체에 유리, 유연성 최고

👉 상황에 맞게 객체 생성 방식을 선택하는 것이 가장 중요합니다!

profile
그럼에도 불구하고, Do it.

0개의 댓글