Date - 2019. 03. 03
템플릿 메소드 패턴(Template method pattern)
- 상속을 통해 부모클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법이다.
- 변하지 않는 기능은 부모클래스에 만들어주고 자주 변경되며 확장할 기능은 자식클래스에서 만들도록 한다.
- 부모 클래스에는 기본적인 로직과 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 메소드 등으로 만든다.
- 자식 클래스에는 부모 클래스에서 만든 그 메소드를 필요에 맞게 구현한다.
- 훅 메소드 : 선택적 오버라이드할 수 있도록 만들어둔 메소드
팩토리 메소드 패턴(Factory method pattern)
- 객체 생성을 직접하지 않고, 하위 클래스가 어떤 객체를 생성할지 결정하도록 위임하는 디자인 패턴이다.
- 즉, 오버라이드된 메서드가 객체를 반환하는 패턴.
- 템플릿 메소드 패턴을 활용한다.
템플릿 메소드 패턴과 팩토리 메소드 패턴 예시
Animal.java
abstract class Animal {
public abstract String getName();
public String hello(){
return "안녕하세요";
}
}
class Dog extends Animal{
@Override
public String getName(){
return "강아지";
}
}
class Cat extends Animal{
@Override
public String getName(){
return "고양이";
}
@Override
public String hello(){
return "냐옹";
}
}
위 예시에서 부모클래스(Animal)의 getName(), hello()를 자식클래스에서 오버라이드하였다.
=> 템플릿 메소드 패턴
특히 getName()는 추상메소드, hello()는 훅메소드이다.
AnimalFactory.java
abstract class AnimalFactory {
abstract Animal factoryReturn(String str);
}
class FactoryReturn extends AnimalFactory{
@Override
Animal factoryReturn(String str){
switch (str){
case "dog" : return new Dog();
case "cat" : return new Cat();
}
return null;
}
}
위 코드를 보면 오버라이드된 메소드(factoryReturn)가 객체를 반환한다.
=> 팩토리 메소드 패턴
Main.java
public static void main(String[] args){
AnimalFactory af = new FactoryReturn();
Animal dog = af.factoryReturn("dog");
// 강아지 안녕하세요
System.out.println(dog.getName() + " " + dog.hello());
Animal cat = af.factoryReturn("cat");
// 고양이 냐옹
System.out.println(cat.getName() + " " + cat.hello());
}
'Spring' 카테고리의 다른 글
IOC (0) | 2020.01.14 |
---|---|
@Setter (0) | 2019.04.18 |
Spring Security + Spring MVC (0) | 2019.02.04 |
Spring Security (0) | 2019.02.03 |
spring core(핵심) 기능 (0) | 2019.01.31 |