정적 팩토리 메서드에 대해 알아보자
정적 팩토리 메서드는 팩토리 패턴에서 용어를 가져와 정의한 기법으로 객체 생성 메서드라고 정의한다.
정적 팩토리 메서드를 객체 생성 메서드라고 정의했는데 우리에겐 생성자가 있지 않은가? 그런데 왜 생성자를 통해 인스턴스를 생성하지 않고 static 메서드를 활용해서 생성할까? ‘이펙티브 자바’에서는 정적 팩토리 메서드에 대한 장점을 설명한다.
정적 팩토리 메서드를 사용했을 때의 장점
1. 이름을 가질 수 있다!
new 키워드를 통해 인스턴스를 생성하는 생성자를 사용한 방법은 그저 단순히 인스턴스를 생성한다는 의미를 가질 뿐이지 이 로직이 어떤 의미를 가지는 지는 설명하지 못한다. 하지만, 정적 팩토리 메서드는 메서드가 이름을 가지기 때문에 생성 로직에 대한 의미를 나타낼 수 있어 가독성 측면에서 좋다.
2. 객체 생성을 관리할 수 있다!
정적 팩토리 메서드를 사용하면 인스턴스를 매번 생성하지 않고 미리 캐싱해두어 필요할 때 생성 없이 인스턴스를 받아 사용할 수 있다.
3. 하위 객체를 반환할 수 있다!
상, 하위 클래스의 상속 구조인 경우 상위 클래스의 정적 팩토리 메서드의 반환 값으로 하위 클래스를 사용할 수 있기 때문에 하위 클래스에 의존하지 않아도 된다.
4. 객체 생성을 캡슐화할 수 있다!
캡슐화는 데이터의 은닉으로 생성자를 정적 팩토리 메서드 안으로 숨겨서 생성에 필요한 입력 파라미터를 단순화 시킬 수 있다.
정적 팩토리 메서드를 사용했을 때의 단점(?)
정적 팩토리 메서드 패턴을 사용하면 생성자를 private으로 닫아두고 팩토리 메서드만 public으로 열어두게 된다. 이렇게 되면 생성자가 private이기 때문에 해당 클래스는 상속받을 수 없게 되는 단점이 존재한다.
하지만, 일부러 확장 불가능한 객체를 만드는 경우에는 유용하게 사용될 수 있다.
정적 팩토리 메서드의 네이밍 컨벤션
- from
- 하나의 매개 변수를 받아서 인스턴스를 생성하여 반환
- of
- 여러 개의 매개 변수를 받아서 인스턴스를 생성하여 반환
- getInstance or instance
- 인스턴스를 생성하여 반환하지만 싱글톤처럼 동일한 인스턴스를 반환하지는 않을 수 있음
- newInstance or create
- 항상 새로운 인스턴스를 생성하여 반환
Reference
'개인 공부' 카테고리의 다른 글
WebMvcTest에서 MockMVC로 실패 테스트하기 (0) | 2023.03.04 |
---|---|
당근마켓 클론코딩 - 게시글 검색 기능 구현을 위한 실험 (1) | 2023.02.08 |
Logback.xml 동일 패키지 내 다른 레벨 처리 (2) | 2022.11.10 |
Garbage Collector 동작원리 (0) | 2022.11.01 |
프로토 타입 패턴 (0) | 2022.10.30 |