오퍼레이션 패턴 - 템플릿 메소드 패턴, 상태 패턴, strategy 패턴

OneTwoThree·2023년 5월 28일

템플릿 메소드 패턴

  • 구현은 다르나 기본적인 골격은 비슷한 경우
  • 기본 골격에 해당하는 알고리즘은 일괄적으로 관리하면서 각 프로그램마다 달라지는 부분에 대해 쉽게 수정
  • 기본 골격을 부모클래스에서 선언. 개별적인 함수 구현은 자식클래스에서

  • Template method : 기본 골격 ( 변하지 않는 )
  • Primitive method : 개별적으로 차이가 발생하는 함수들
  • Primitive method는 concrete class에서 구현함. TemplateMethod에서 PrimitveOperation을 호출할 수 있음
  • 상위클래스가 하위클래스가 구현한 함수를 호출 : Inverted control structure
  • primitve operation은 protected로 선언
  • primitive operation을 최소화할 것 (수가 많으면 패턴의 유용성이 떨어짐)
  • primitive operation은 일반적으로 DO~ 형태로 명명 ex) DoRead()

상태 패턴

  • 절차지향 방식 : 상태에 따라 switch나 if문으로 코드를 작성 : 코드가 지저분하고 확장성이 떨어짐
  • 상태를 객체로 나타낸다
  • 상태가 변경되었을때 행위도 알아서 변경되게 한다

  • 상태를 객체로 만든 State 객체
  • Context 객체는 (원래객체) State 객체를 멤버로 갖는다 (aggregation)
  • Handle 메소드는 상태에서 해줘야 할 일들의 인터페이스고 구체적인 ConcreteState 객체에서는 각각 상태에 알맞게 handle을 구현한다
  • Context에서는 state->handle()을 호출하면 다형성에 의해 현재 상태에 따라 다르게 동작한다.
  • Context가 State의 메소드를 호출할 때 자기 자신의 레퍼런스를 인자로 전달할 수 있다. (자신의 상태에 따라 다르게 작동하게 하기 위함)
  • 일반적으로 Client는 Context 객체 초기화 이외에 상태변환에 직접적인 개입을 하지 않는다

Strategy 패턴

  • 개념적으로 같은 알고리즘의 다른 구현을 관리

  • aggregation과 다형성 활용

0개의 댓글