2.1 상태
상태 는 동작 디자인 패턴입니다. 프로그램 실행 중에 개체가 상태에 따라 동작을 변경해야 하는 경우에 사용됩니다.
패턴은 3개의 블록으로 구성됩니다.
컨텍스트는 개체가 상태에 따라 동작을 변경해야 하는 클래스입니다.
상태는 각 구체적인 상태가 구현해야 하는 인터페이스입니다. 이 인터페이스를 통해 Context 개체는 메서드 호출을 위임하여 상태와 상호 작용합니다. 인터페이스에는 동작이 변경되는 개체에 대한 피드백 수단이 포함되어야 합니다.
이를 위해 이벤트 가 사용됩니다 (패턴 게시자 - 구독자). 이는 이벤트 발생 시 프로그램 실행 중 상태 객체를 교체하기 위해 필요합니다. 컨텍스트 자체가 전환을 위해 상태 개체를 주기적으로 폴링하는 경우가 있을 수 있습니다.
ConcreteState1, ConcreteState2 - 구체적인 상태의 클래스. 객체가 현재 상태에서 통과할 수 있는 조건과 상태에 대한 정보를 포함해야 합니다. 예를 들어, 객체는 ConcreteState1에서 ConcreteState2와 ConcreteState3으로 이동할 수 있고 ConcreteState2에서 다시 ConcreteState1로 이동할 수 있습니다. 그들 중 하나의 개체는 생성될 때 컨텍스트를 포함해야 합니다.
예를 들어 캐릭터가 달리고, 수영하고, 날 수 있는 게임을 작성하고 있습니다. 캐릭터가 물에 빠진 경우 물에서의 행동을 제한하는 것이 합리적입니다. 이제 그는 쏠 수 없지만 앞으로, 오른쪽, 왼쪽으로 수영하는 등 몇 가지 행동이 있습니다.
캐릭터의 상태는 호출할 수 있고 작업을 수행하는 메서드가 있는 State 개체로 설명할 수 있습니다. 그리고 캐릭터가 물에 들어간 후 캐릭터 안에 있는 다른 State 개체에 대한 참조를 변경하기만 하면 상태가 변경됩니다.
2.2 전략
전략은 알고리즘 계열을 정의하고, 각 알고리즘을 캡슐화하고, 이를 상호 교환 가능하게 만드는 행동 설계 패턴입니다. 이렇게 하면 적절한 클래스를 정의하여 알고리즘을 선택할 수 있습니다.
전략 패턴을 사용하면 선택한 알고리즘을 사용하는 클라이언트 객체에 관계없이 선택한 알고리즘을 변경할 수 있습니다.
전략 패턴을 사용하면 컨텍스트에 따라 다른 비즈니스 규칙이나 알고리즘을 사용할 수 있습니다. 시스템(혹은 환경)의 현재 상태에 따라 같은 장소에서 서로 다른 알고리즘을 사용해야 하는 경우에 사용한다.
강점:
- 다양한 알고리즘 구현의 캡슐화, 시스템은 비즈니스 규칙의 가능한 변경으로부터 독립적이 됩니다.
- 하나의 표준 방식으로 모든 알고리즘을 호출합니다.
- 스위치 및/또는 조건문을 사용하지 않습니다.
이 패턴은 상태 패턴과 다소 유사하지만 여기서 강조점은 상태가 아니라 동작입니다. 게임의 캐릭터가 무기를 변경할 수 있다고 가정해 보겠습니다. 그런 다음 무기를 변경할 때 이 무기의 작동 방식을 설명하는 개체에 대한 참조를 간단히 변경할 수 있습니다.
2.3 템플릿 방법
추상 클래스 (abstract class) - 알고리즘의 단계를 구현하기 위해 상속인에서 대체되는 추상 작업을 정의합니다. 알고리즘의 골격을 정의하는 템플릿 메서드를 구현합니다. 템플릿 메서드는 Abstract 클래스에 정의된 교체 및 기타 작업을 호출합니다.
구체적인 클래스 (concrete class) - 구현에 필요한 방식으로 대체된 작업을 구현합니다. Concrete 클래스는 알고리즘의 불변 단계가 AbstractClass에서 수행될 것이라고 가정합니다.
이 패턴은 필요할 때 자주 사용됩니다.
- 알고리즘의 불변 부분을 한 번만 사용하고 변경 부분은 상속인의 재량에 맡깁니다.
- 중복을 피하기 위해 여러 클래스에 공통된 코드의 지역화 및 격리.
- 상속자가 특정 위치에서만 코드를 확장하도록 허용합니다.
예, 이 패턴은 추상 클래스와 그 구현이라는 쌍의 사용을 설명합니다.
2.4 책임의 사슬
책임 사슬은 시스템에서 책임 수준을 구성하도록 설계된 행동 설계 패턴입니다.
템플릿은 다음과 같은 조건에서 사용하는 것이 좋습니다.
- 개발된 시스템에는 특정 유형의 메시지를 처리할 수 있는 개체 그룹이 있습니다.
- 모든 메시지는 적어도 하나의 시스템 객체에 의해 처리되어야 합니다.
- 시스템의 메시지는 "직접 처리하거나 다른 사람에게 전달"하는 방식에 따라 처리됩니다. 즉, 일부 메시지는 수신된 수준에서 처리되고 다른 메시지는 다른 수준의 개체로 전달됩니다.
2.5 기념품
Keeper(Memento) 는 캡슐화를 위반하지 않고 개체의 내부 상태를 수정하고 저장하여 나중에 이 상태로 복원할 수 있도록 하는 동작 설계 패턴입니다.
Guardian 패턴은 다음과 같은 경우에 사용됩니다.
- 후속 복원을 위해 객체(또는 그 일부) 상태의 스냅샷을 저장해야 합니다.
- 개체의 상태를 가져오기 위한 직접 인터페이스는 구현 세부 정보를 노출하고 개체 캡슐화를 중단합니다.
GO TO FULL VERSION