팩토리 패턴 🔑 정리
- DIP에 따르면 구체 클래스에 의존하는 것은 피하고 추상 클래스에 의존하는 것을 선호해야 한다.
- 사실 new 키워드 사용하면 엄격하게 DIP를 어기는 셈이다.
- 사실 근데 구체 클래스가 쉽게 변경되는 종류의 클래스가 아니라면(String같은) 큰 문제는 없다.
- 하지만 변경되기 쉬운 구체 클래스들에 의존하는 것은 문제가 된다
- 대부분의 변경에 영향을 받지 않도록 추상 인터페이스에 의존하는 것이 Good!
- 팩토리 패턴 => 추상 인터페이스에만 의존하게! 그러면서도 구체적 객체들의 인스턴스를 만들 수 있다.
- 사용되는 구체 클래스의 변경이 잦을 때 사용하면 좋은 패턴이다.
- 팩토리 패턴의 큰 장점 중 하나 => 팩토리의 구현을 다른 구현으로 대체 가능하다!
- 즉 애플리케이션 안에 사용하던 객체 집합을 다른 객체 집합으로 통째로 변경도 가능하다.
- 또한 단위 테스트를 작성할 때도 팩토리 패턴을 응용 가능하다.
- 하지만 사실 DIP를 극단적으로 지키기 위해 팩토리를 너무 많이 사용하는 것은 너무 극단적이라고 볼 수 있다.
- 보통 팩토리를 고려하지 않고 꼭 필요할때 도입하는 것이 좋다.
- 당연히 필요할 것이라고 가정하지 말자!
- 피할려면 피할 수 있는 복잡함이다.
- 팩토리를 기본으로 사용하여 설계하면 설계를 확장하기 어려워지는 지점이 생기게 된다.(지금 단계에서 크게 감은 안 온다. 하지만 구조가 조금 더 복잡해지고 클래스를 많이 만들어야하는 것은 맞는 것 같다.)
- 또한 만들어야할 클래스도 매우 증가한다.
- 팩토리 패턴이 최선인 경우는 드물다...