달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

'Design Pattern&UML'에 해당되는 글 13

  1. 2016.08.24 템플릿 메소드 패턴
2016. 8. 24. 03:27

템플릿 메소드 패턴 Design Pattern&UML2016. 8. 24. 03:27

템플릿 메소드 패턴이 뭐냐면...


쉽게 이해하기 위해 예를 들어보자.


청소를 한다고 치자.

쓸기, 걸레빨기, 닦기 세가지 작업을 마무리하면 청소가 끝난다.

그럼 청소라는 메소드를 정의해 보자.

void cleaning(){

    쓸기();

    걸레빨기();

    닦기();

}

cleaning메소드는 세가지 메소드를 호출하는 일을 한다.

쓸기, 걸레빨기, 닦기는 사람마다 수행하는 방법이 다 다를 것이다.

예를 들면 걸레를 빠는데 손으로 빠는 사람도 있을테고,

세탁기에 넣고 돌리는 사람도 있을거다.


템플릿 메소드 패턴은 이런 상황을 쉽게 정의할 수 있도록 해준다.

슈퍼클래스에서는 cleaning 메소드에서 쓸기, 걸레빨기, 닦기를 호출한다고 정의해두고

쓸기, 걸레빨기, 닦기는 추상함수로 두거나 일반메소드를 오버라이딩 할 수 있도록 해준다.

서브클래스에서는 이제 쓸기, 걸레빨기, 닦기를 구체적으로 어떻게 할지를 써넣으면 되는 것이다.


코드를 대충 보자.

abstract class CleanRoom{

    void cleaning(){

        쓸기();

        걸레빨기();

        닦기();

    }


    void 쓸기(){};

    void 걸레빨기(){};

    void 닦기(){};

}


class CleanMyRoom extends CleanRoom{

    void 쓸기(){

        대빗자루와 쓰레받기를 지하 창고에서 꺼내와서 20분동안 쓴다;

    }

    void 걸레빨기(){

        세탁기에 걸레 10개와 세제 3스푼을 넣고 돌린다;

    }

    void 닦기(){

        초당 3회 왕복의 속도로 책상, 책꽂이, 바닥의 순으로 닦는다;

    }

}


즉, 해야할 일들의 일련의 과정은 슈퍼클래스에서 정해두고, 각 행위를 구체적으로 어떻게 할지는 서브클래스에서 정하는 방식이다.

:
Posted by 클레잇