정적 팩토리 메서드 장단점
장점
- 이름을 가질 수 있다.
- 메서드의 이름으로 생성한 객체의 특성이나 역할을 코드 상에서 쉽게 유추할 수 있다. → 가독성 up
- 메서드의 이름으로 생성한 객체의 특성이나 역할을 코드 상에서 쉽게 유추할 수 있다. → 가독성 up
- 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다.
- Boolean 클래스에서 TRUE, FALSE 두가지 상태 인스턴스
- 불변 클래스
- 싱글턴 방식
- 생성된 인스턴스를 재사용하는 것이 가능한 경우에는 불필요하게 인스턴스를 새로 생성하지 않고 정적 팩토리 메서드를 이용한 재사용 인스턴스를 이용하는 것이 좋다.
- 플라이웨이트 패턴
- 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다.
- 부모 클래스(혹은 인터페이스)를 구현한 자식 클래스가 있다면 자식 클래스를 반환타입으로 사용할 수 있다.
- 인터페이스의 요소들만 알아도, 그 구현체들에 대한 이름조차 몰라도 인터페이스를 사용하는데 지장이 없다.
- 인터페이스를 수정하지 않고 구현체를 수정할 수 있다. → 유연성 up
- 입력 매개 변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.
- 부모(인터페이스)를 구현한 클래스가 여러개라면 매개 변수에 따라 다른 클래스의 객체를 반환할 수 있다.
EnumSet
클래스를 구현한RegularEnumSet
,JumboEnumSet
은 Set의 크기에 따라 다른 객체가 반환된다.
- 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.
- 구현체나 자식 클래스를 구현하지 않은 상태에서도 정적 펙터리 메서드를 작성하는데 오류가 없다
- 구현체나 자식 클래스를 구현하지 않은 상태에서도 정적 펙터리 메서드를 작성하는데 오류가 없다
단점
- 상속을 하려면
public
이나protected
생성자가 필요하니 정적 팩터리 메서드만 제공하면 하위 클래스를 만들 수 없다. - 정적 팩터리 메서드는 프로그래머가 찾기 어렵다.
핵심 정리
정적 팩터리 메서드와 public
생성자는 각자 쓰임새가 있으니 상대적인 장단점을 이해하고 사용하는 것이 좋다. 그렇다고 하더라도 정적 팩터리를 사용하는게 유리한 경우가 더 많으므로 무작정 public
생성자를 제공하던 습관이 있다면 고치자
references
[생성자, 정적 팩터리 메서드 차이점](https://www.notion.so/ITEM-1-b60f9579f44f46d186f6eec33b48efbb)
https://www.geeksforgeeks.org/difference-between-constructor-and-static-factory-method-in-java/#:~:text=Constructors can't have any,perform the initialization of objects.
'programming > java' 카테고리의 다른 글
Item4. 인스턴스화를 막으려거든 pricate 생성자를 사용하라 (0) | 2023.03.23 |
---|---|
Item 55. 옵셔널 반환은 신중히 하라 (0) | 2023.03.17 |
Item 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라 (0) | 2023.03.17 |
Item 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2023.03.16 |
Item 2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2023.03.13 |