ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [디자인 패턴] 템플릿 메서드 패턴 (Template Method)
    백엔드/객체지향 | 디자인패턴 2023. 1. 29. 09:56
    반응형

     

     

    템플릿 메서드 패턴의 경우에는 일부 구현이 다르지만, 실행 과정은 동일한 코드를 여러개 작성할 상황에서 적용하면 코드 중복을 줄여주는 디자인 패턴이다.

     

    만약 네이버페이와 카카오페이의 결제 방식이 다음과 같다고 해보자

     

    [네이버페이]

    1. 네이버 아이디와 비밀번호를 입력하여 인증한다.

    2. 포인트 충전을 한다. (+ 네이버 포인트 추가 적립)

    3. 결제한다.

     

    [카카오페이]

    1. 카카오 아이디와 비밀번호를 입력한다.

    2. 포인트 충전을 한다.

    3. 결제한다.

     

    템플릿 메서드 패턴은 두 가지 종류가 있다.

    - 실행 과정을 구현한 상위 클래스

    - 실행 과정의 일부 단계를 구현한 하위 클래스

     

    본인 인증은 아이디와 비밀번호를 입력하는 것은 같지만, 내부 인증은 카카오와 네이버가 서로 다르다.

    아이디와 비밀번호를 입력하는 것은 상위 클래스에서 구현하고, 내부 인증은 추상 메서드로 분리하면 된다.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public abstract Authenticator {
     
        public Auth authenticate(String id, String pw) {
            if (!doAuthenticate(id, pw)) throw authException();
            
            return createAuth(id);
        }
     
        protected abstract boolean doAuthenticate(String id, String pw);
     
        protected abstract Auth createAuth(String id);
    }
     
    cs

     

    authenticate() 메서드는 모든 하위 클래스에 동일하게 적용되므로 이 메서드를 템플릿 메서드라고 부른다.

    Authenticator를 상속 받는 하위 클래스는 authenticate()가 이미 구현되어 있으므로 나머지 doAuthenticate()와 createAuth()만 오버라이드를 해주면 된다.

     

    템플릿 메서드 패턴의 특징은 상위 클래스에서 모든 실행을 제어한다는 것이다. 그래서 만약 템플릿 메서드 패턴 안에 추가 구현을 해주자면 빈 구현을 가지는 메서드를 안에 넣어주면 된다. 이때 비어있는 코드가 들어있는 메서드를 하위 클래스에서 확장할 수 있는 메서드이기 때문에 훅 메서드라고 부른다.

     

     

     

     

     

    반응형

    댓글

Designed by Tistory.