오퍼레이션 패턴 - 템플릿 메소드 패턴, 상태 패턴, strategy 패턴
템플릿 메소드 패턴
- 구현은 다르나 기본적인 골격은 비슷한 경우
- 기본 골격에 해당하는 알고리즘은 일괄적으로 관리하면서 각 프로그램마다 달라지는 부분에 대해 쉽게 수정
- 기본 골격을 부모클래스에서 선언. 개별적인 함수 구현은 자식클래스에서

- 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 패턴
