서론

이전 포스팅에 이어 팩토리 패턴에 대해 더 깊게 알아보고자 한다.



팩토리 패턴를 정리하며


팩토리 패턴의 가장 큰 특징은 객체를 생성하는 부분을 일반 코드로 짜는 것이 아니라 캡슐화하여 주입식으로 생성한다는 특징이 있다. 구체적인 방법으로는 객체 생성부분을 추상메소드로 관리하여 구상 클래스의 인스턴스를 만드는 부분을 추상메소드에서 직접 구현하도록 권한을 넘겨주는 것이다.


장점

객체 생성 부분이 인터페이스로 분리되기 때문에 클라이언트 입장에서는 인터페이스를 바탕으로 프로그래밍 할 수 있게 되고, 추후 객체 생성부분에 대한 수정이 필요할때도 한 곳만 관리하면 된다. 이러한 구조는 유연성과 확장성이 뛰어난 코드로 만들어 준다.

추후 피자의 종류가 더 늘어나게 될 경우 기존의 코드라면 PizzaStore 클래스를 직접 수정해야하는 일이 발생하지만, 팩토리로 분리하여 관리한다면 PizzaStore 클래스의 코드는 수정이 필요하지 않고 해당 분점의 createPizza() 추상 메소드의 코드 부분만 수정하면 된다.


의존성 뒤집기

디자인 원칙: 추상화된 것에 의존하도록 만들어라. 구상 클래스에 의존하도록 만들지 않도록 한다. 구상 클래스에 대한 의존성을 줄인다는 원칙이 바로 의존성 뒤집기이다.


고수준 구성요소가 저수준 구성요소에 의존하면 안되기 때문에 항상 추상화에 의존하도록 만들어야 한다.

앞선 예시에서는 PizzaStore는 “고수준의 구성요소”라고 할 수 있고, 피자 클래스들은 “저수준 구성요소”라고 할 수 있다. PizzaStore는 전체 피자 생산의 중심지인 본사의 느낌이고, 피자 클래스들은 단순히 피자의 종류를 결정짓는 클래스들이기 때문이다. 기존에는 PiazzaStore에서 구상 피자 클래스들에 의존하고 있는 느낌이 있었지만, 의존성 뒤집기 원칙에 의해 구상클래스처럼 구체적인 것이 아닌 추상클래스나 인터페이스와 같이 추상적인 것에 의존하는 코드로 변형된 것이다.


앞선 예제와 정리된 팩토리패턴의 개념을 활용하여 피자 생산시 사용하는 원재료 또한 팩터리 패턴으로 분리해보도록 하자.



참고문헌


Head First Design patterns 서적