ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Design Pattern] Template Method Pattern 템플릿 메소드 패턴
    Study/Design Pattern 2021. 7. 31. 21:39

     

    템플릿 메소드 패턴이란 비지니스 로직은 세부 구현으로 부터 분리하는 디자인 패턴으로 GOF에 따르면 다음과 같다. 즉 간단하게 말하자면 여러 클래스에서 공통된 행위를 상위 클래스에서 정의하고, 하위 클래스에서 각각의 상세부분을 구현하는 것을 말한다.

    더보기

    알고리즘의 구조를 메소드에 정의하고, 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의 하는 패턴이다. 알고리즘이 단계별로 나누어 지거나, 같은 역할을 하는 메소드이지만 여러곳에서 다른형태로 사용이 필요한 경우 유용한 패턴이다. – GoF Design Patterns

     

     

    만약 다음과 같이 Gun이라는 추상클래스가 존재하고 shoot이라는 메소드를 가진다고 가정하자. shoot은 3가지 단계로 이루어진것을 확인할 수 있다. 하지만 각 단계의 구현은 총의 종류에 따라 달라질 수 있으므로 구현은 하위클래스에서 오버라이드하여 완성하는것이다. 

    public abstract class Gun{
    	
        public shoot(){
        	bullet();
            load();
            trigger();
        }
        
        abstract bullet();
        abstract load();
        abstract trigger();
    }

     

    그래서 아래처럼 K2 클래스가 Gun 추상클래스를 상속하여 메소드들을 직접 구현하는 것이다. 그래서 클라이언트에서 shoot 메소드를 사용하면 구현클래스에 따라 다르게 실행 되는것을 확인할 수 있을것이다.

    public class K2 extends Gun{
    	
        @Override
        public void bullet(){
        	System.out.println("5.56mm 10발 준비!");
        }
        
        @public void load(){
        	System.out.println("노리쇠 전진!");
        }
        
        @public void trigger(){
        	System.out.println("빵야 !~");
        }
        
    }
    public class TemplateMethodPattern {
        public static void main(String[] args) {
            Gun k2 = new K2();
            k2.shoot();
        }
    }

     

     

    얼핏 보면 템플릿 메소드 패턴은 전략 패턴과 매우 유사하다는 것을 느낄수 있다. 차이점으로는 전략 패턴은 인터페이스를 활용하여 알고리즘의 동작을 다르게 하고, 동일 이름의 메소드 중에서 상황에 맞게 필요한 전략를 선택하여 사용하는 패턴이다. 템플릿 메소드 패턴은 상속을 이용하여 알고리즘 동작을 직접 구현하고, 공통된 메소드를 구현하는데 중점을 둔다. 

     

    템플릿 메소드 패턴의 장점으로는 비슷한 기능을 하는 코드의 중복을 피할 수 있다. 또 추상 클래스라는 틀이 있기때문에 하위 클래스에서 쉽게 생성 및 추가를 할 수 있는, 즉 간편한 확장성을 보장한다.

    단점으로는 만약 관리하는 하위 클래스가 많아지면, 상위 클래스를 수정해야 할 일이 생기면 하위 클래스를 일일이 다 수정해야하는 상황이 발생할 수 있다. 또한 하위클래스가 구현해야 하는 추상 메소드가 너무 많으면 관리가 힘들어 질 수 있다.  

     

    댓글

Designed by Tistory.