주난v 개발 성장기

[디자인 패턴] 템플릿 메소드 패턴 본문

개발 성장기/디자인 패턴

[디자인 패턴] 템플릿 메소드 패턴

주난v 2020. 7. 8. 08:43

DB 데이터와 LDAP을 이용해서 인증을 처리하는 클래스를 만들었을 때...

 

두 클래스는 거의 유사한 코드를 갖게 된다.

실행의 과정 / 단계는 동일한데 일부의 구현이 다른 경우에 사용하는 패턴을 "템플릿 메서드 패턴"이라고 한다.

 

public abstract authenticator {
	public Auth authenticate(String id, String pw) {
    	if (!doAuthenticate(id, pw) {
        	throw createException();
        }
        return createAuth(id);
    }
    
    protected abstract boolean doAuthenticate(String id, String pw);
    
    protected abstract Auth createAuth(String id);
}

public class LdapAuthenticator extends Authenticator {
	
    @Override
    protectd boolean doAuthenticate(String id, String pw) {
    	return ldapClient.authenticate(id, pw);
    }
}

authenticate() 메소드는 모든 하위 타입에 동일하게 적용되는 실행 과정을 제공하기 때문에, 템플릿 메서드라고 부른다.

 

상위클래스가 흐름 제어 주체

- 보통은 하위 클래스에서 상위 타입의 기능을 재사용할지 여부를 판단.

- 템플릿 메서드는 상위 클래스에서 흐름을 제어.."헐리우드 원칙"

 

훅 메서드

상위 클래스에서 실행 시점이 제어되고, 기본 구현을 제공하면서, 하위 클래스에서 알맞게 확장할 수 있는 메서드를 훅 메서드라고 한다.