정적 팩토리 메서드란?
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이므로)
💡 언제 쓰면 좋을까?
- 객체 생성 방식이 다양할 때
- 여러 방법으로 객체를 생성해야 할 경우, 메서드를 통해 명확하게 표현할 수 있다.
- 싱글톤 패턴을 구현할 때
- 하나의 인스턴스만 필요할 때 유용하다.
- 생성 의도를 명확히 하고 싶을 때
- User.admin("홍길동")처럼 메서드 이름으로 의도를 분명히 전달할 수 있다.
- 서브타입을 반환해야 할 때
- 서브클래스를 반환하는 경우, 정적 팩토리 메서드가 유리하다.
- 불변 객체를 만들 때
- 생성자를 private으로 막고, 객체 생성을 완전히 제어할 수 있다.
🛑 사용하지 말아야 할 때
- 단순한 객체 생성만 필요한 경우에는 정적 팩토리 메서드가 불필요하게 복잡할 수 있다.
- 간단한 객체 생성에는 생성자 방식이 더 직관적이고 코드가 간결하다.
- 상속이 필요한 경우, 생성자가 private일 경우 서브클래스에서 사용하기 어려운 제약이 있다.
'Spring > 문법' 카테고리의 다른 글
JSON 포맷 변경하기: Jackson 설정 커스터마이징 (1) | 2025.05.23 |
---|---|
Spring Boot Logger 사용법 – SLF4J & Logback (0) | 2025.05.23 |
Spring Boot 환경별 설정 관리하기 – application-{profile}.properties (0) | 2025.05.23 |
다중 데이터소스 설정 하기 (feat. DB 여러 개 연결하기) (0) | 2025.05.12 |
MultiValueMap<K, V> (0) | 2025.05.03 |