반응형
정적 팩토리 메서드란?
정적 팩토리 메서드란 객체 생성을 생성자가 하지 않고 객체 생성의 역할을 하는 메서드라는 의미다.
pulbic static CarDto from(Car car) {
return new CarDto(car.getName(), car.getPosition());
}
장점
1. 생성자에서는 쓸 수 없었던 메서드 이름을 가질 수 있다.(위 코드에서 from이라는 이름을 사용)
2. 호출할 때마다 새로운 객체를 생성할 필요가 없다.
위의 코드는 메서드를 호출 할 때마다 new로 매번 새로 생성하지만 싱글톤 패턴을 이용해 기존 객체를 호출하는 방식으로 사용할 수 있다.
3. 하위 자료형 객체를 반환할 수 있다.
개인적으로 정적 팩토리 메서드만의 장점인건 잘모르겠다.
전략 패턴을 사용하는 생성자 패턴에서도(대표적인 예인 컬렉션 프레임워크의 List) 하위 객체(ArrayList, LinkedList)를 반환할 수 있다.
List list = new ArrayList();
책에서는 컬렉션 프레임워크에서도 정적 팩토리 메서드 패턴을 사용한다고 나와있는데 아래가 그 예제다. ArrayList의 asList 메소드를 이용해 하위 객체인 ArrayList를 반환 할 수 있다.
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
4. 객체 생성을 캡슐화할 수 있다.
정적 팩토리 메서드에 DTO에서 꺼낸 변수가 아닌 DTO를 던지고 안에서 다시 가공을 하면 변수를 캡슐화 할 수 있다.
결론
생성자 방식이나 정적 팩토리 메소드나 장단점이 있으나 확실한건 정적 팩토리 메소드가 더 장점이 많으므로
자주 이용하는 것이 좋다고 한다.
728x90
'📘 Effective Java' 카테고리의 다른 글
[Item 6] 불필요한 객체 생성을 피하라 (0) | 2022.09.02 |
---|---|
[Item 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2022.09.02 |
[Item 4] 인스턴스화를 막으려거든 private 생성자를 사용하라. (0) | 2022.09.02 |
[Item 3] private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2022.09.02 |
[Item 2] 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2022.09.02 |