이펙티브 자바를 찍먹하면서 정적 팩토리 메서드에 대해 정리할 필요성을 느꼈다.
예시를 보기 전까지는 뭔지 잘 몰랐다😅 허허
정적 팩토리 메서드란 객체 생성의 역할을 하는 클래스 메서드이다
그리고 객체 생성을 캡슐화하기 위해서 사용된다.
* 디자인 패턴에서의 팩토리 패턴과 일치하지는 않는다고 한다
사용 방식
정적 팩토리 메서드 사용 전
Foo x = new Foo();
정적 팩토리 메서드 사용 후
Foo x = Foo.create();
정적 팩토리 메서드의 예시
- valueOf
String number = String.valueOf(10);
- getInstance : 할당된 하나의 인스턴스(메모리)를 계속 쓰는 방식 - 싱글톤 패턴에서 사용된다
public class Instance {
static Instance instance;
private Instance {}
public static Instance getInstance() {
if (instance == null) {
instance = new Instance();
}
return instance;
}
}
장점
팩토리가 많은 서브클래스 중 하나를 선택하여 리턴할 수 있다.
이 때, 계층을 알거나 이해할 필요 없이 매개변수를 통해 원하는 동작을 수행한다
Connection과 같이 제한된 리소스에 대한 접근을 제어한다
재사용 가능한 객체 풀을 구현하는 방식이다
이렇게 되면 객체를 생성/파괴하는 비용이 비쌀 때 효과적이다.
매개변수 타입이 유사해도 다른 해석이 가능해진다.
여러가지 메서드를 만들어 가독성을 높일 수 있다.
객체 풀?✍ - Creational Pattern
(이쯤되면 디자인 패턴 카테고리를 하나 파야겠다 ^^)
객체를 관리하는 풀 클래스를 만드는 것이다
- 객체를 사용할 때, 풀에 요청을 하면 풀에서 객체를 초기화하고 사용자에게 넘겨준다
- 객체 사용이 끝났을 때, 객체를 제거하기보다 풀에 반환 해 준다.
참고 링크
https://stackoverflow.com/questions/929021/what-are-static-factory-methods
