Spring/문법

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

가지코딩 2025. 5. 9. 13:39

정적 팩토리 메서드란?

new 키워드를 사용하지 않고, 클래스에 정의된 static 메서드를 통해 객체를 반환하는 방식이다.

public class User {
    private String name;

    private User(String name) {
        this.name = name;
    }

    public static User of(String name) {
        return new User(name);
    }
}
User user = User.of("홍길동");

장단점

✅ 장점

 

 

  • 이름을 가질 수 있어 의미가 명확하다
    → User.of("홍길동") vs new User("홍길동")
  • 생성 로직을 캡슐화할 수 있다
    → 내부적으로 캐싱, 서브타입 반환 등도 가능
  • 생성자보다 유연하다
    → 같은 파라미터로도 다른 객체를 반환할 수 있음

 

❌ 단점

 

  • new처럼 명확히 보이지 않아서 처음엔 익숙하지 않을 수 있다
  • 하위 클래스에서 상속이 어렵다 (생성자가 private이므로)

💡 언제 쓰면 좋을까?

  1. 객체 생성 방식이 다양할 때
    • 여러 방법으로 객체를 생성해야 할 경우, 메서드를 통해 명확하게 표현할 수 있다.
  2. 싱글톤 패턴을 구현할 때
    • 하나의 인스턴스만 필요할 때 유용하다.
  3. 생성 의도를 명확히 하고 싶을 때
    • User.admin("홍길동")처럼 메서드 이름으로 의도를 분명히 전달할 수 있다.
  4. 서브타입을 반환해야 할 때
    • 서브클래스를 반환하는 경우, 정적 팩토리 메서드가 유리하다.
  5. 불변 객체를 만들 때
    • 생성자를 private으로 막고, 객체 생성을 완전히 제어할 수 있다.

 

 

 

🛑 사용하지 말아야 할 때

 

  • 단순한 객체 생성만 필요한 경우에는 정적 팩토리 메서드가 불필요하게 복잡할 수 있다.
  • 간단한 객체 생성에는 생성자 방식이 더 직관적이고 코드가 간결하다.
  • 상속이 필요한 경우, 생성자가 private일 경우 서브클래스에서 사용하기 어려운 제약이 있다.