본문 바로가기

Spring

토비의 스프링3.1 - 템플릿 메소드 패턴, 팩토리 메소드 패턴

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