템플릿 메서드 패턴과 전략 패턴

Q. 템플릿 메서드 패턴에 대해 설명해주시고 해당 패턴에 대한 단점과 그것을 보완하는 다른 디자인 패턴에 대해 설명해주세요.

템플릿 메서드 패턴은 알고리즘의 구조를 상위 클래스에서 정의하고, 그 구조의 일부 단계를 하위 클래스에서 구현하도록 하는 디자인 패턴입니다. 상위 클래스에서 알고리즘의 뼈대를 설계한 후, 하위 클래스에서 세부적인 로직을 오버라이드하여 구현합니다. 이를 통해 알고리즘의 구조는 변경하지 않으면서도, 일부 단계를 다양하게 구현할 수 있습니다. 이 패턴의 단점 중 하나는 상속을 통해 구조를 확장해야 하므로, 상속에서 오는 단점들을 그대로 안고갑니다. 자식 클래스가 부모클래스와 컴파일 시점에서 강하게 결합되는 의존관계에 대한 문제로 자식 클래스는 부모 클래스의 기능을 전혀 사용하지 않는데, 부모 클래스를 알아야합니다. 만약 부모 클래스를 수정하면, 자식 클래스에게도 영향을 줄 수 있어 단일 책임 원칙에 위배됩니다. 이러한 단점을 보완할 수 있는 디자인 패턴 중 하나가 전략 패턴입니다. 전략 패턴은 알고리즘 자체를 인터페이스로 분리하고, 이를 다양한 구현체로 만들어서 런타임에 동적으로 변경할 수 있도록 합니다. 템플릿 메서드 패턴에서 고정된 알고리즘 단계를 전략 패턴을 사용해 동적으로 교체할 수 있게 되면, 유연성과 확장성이 높아집니다. 이를 통해 알고리즘의 특정 단계를 다양한 방식으로 구현하거나, 필요에 따라 쉽게 변경할 수 있습니다.


Q. 그렇다면 전략패턴을 사용했을 때의 단점은 없나요?

전략 패턴은 유연성과 확장성을 높여주는 좋은 디자인 패턴이지만 이것 역시 단점이 존재합니다. 첫번째로 추가적인 클래스 및 인터페이스가 필요하기에 전체적인 코드의 복잡성이 증가될 수 있습니다. 이러한 단점은 템플릿 메서드 패턴과 유사합니다. 두번째로 런타임 시에 전략을 선택하는 데 추가적인 오버헤드가 발생할 가능성이 있다는 점입니다. 이는 특히 성능이 중요한 애플리케이션에서 문제가 될 수 있습니다.

Last updated