특징
하위 자료형 객체 반환
public class Level {
...
public static Level of(int score) {
if (score < 50) {
return new Basic();
} else if (score < 80) {
return new Intermediate();
} else {
return new Advanced();
}
}
...
}
단점
1. 생성자 없이 정적 팩토리 메서드만 제공한다면 상속을 할 수 없다.
네이밍 규칙
이름 | 설명 |
---|---|
from | 매개변수를 1개 받아 해당 타입의 인스턴스 반환 |
of | 매개변수를 여러 개 받아 적합한 타입의 인스턴스 반환 |
valueOf | from, of의 자세한 버전 |
instance / getInstance | 매개변수로 명시한 인스턴스를 반환하지만, 같은 인스턴스임을 보장하지는 않음 |
create / newInstance | 위와 같지만 매번 새로운 인스턴스 반환 |
getType | getInstance와 동일, 다른 클래스에 팩토리 메서드 정의. Type은 반환할 객체 타입 |
newType | newInstance와 동일, 다른 클래스에 팩토리 메서드 정의. Type은 반환할 객체 타입 |
type | getType과 newType의 간결 버전 |
장점
1. 필요한 데이터만 설정 가능
2. 유연성 확보 가능
3. 가독성을 높임
4. 변경 가능성을 최소화
빌더패턴 구현 방법
생성 디자인 패턴 - https://refactoring.guru/ko/design-patterns/creational-patterns
생성 패턴의 종류 - https://velog.io/@ha0kim/Design-Pattern-%EC%83%9D%EC%84%B1-%ED%8C%A8%ED%84%B4Creational-Patterns
정적 팩토리 메서드1 - https://tecoble.techcourse.co.kr/post/2020-05-26-static-factory-method/
정적 팩토리 메서드2 - https://joon2974.tistory.com/16
빌더 패턴1 - https://readystory.tistory.com/121
빌더 패턴2 - https://mangkyu.tistory.com/163
팩토리메서드와 빌더 리팩토링 - https://velog.io/@znftm97/%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81-%EC%97%94%ED%8B%B0%ED%8B%B0-%EC%83%9D%EC%84%B1%ED%8C%A8%ED%84%B4