📘 Effective Java

[Item 1] 생성자 대신 정적 팩터리 메서드를 고려하라

loose 2022. 9. 2. 15:43
반응형

정적 팩토리 메서드란?


정적 팩토리 메서드란 객체 생성을 생성자가 하지 않고 객체 생성의 역할을 하는 메서드라는 의미다.

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