Search

행동 패턴

행동 패턴

행동 패턴은 객체지향 디자인 패턴 중 하나로, 객체들 간의 상호작용을 구조화하고 이를 객체간 상호작용의 템플릿으로 만드는 패턴입니다.
행동 패턴은 소프트웨어 시스템에서 객체간 상호작용을 향상시키며, 객체들이 느슨하게 결합되도록 하는 것을 목표로 합니다. 이는 보다 유연하고 확장 가능한 시스템을 구현하기 위해 필요합니다.
행동 패턴은 크게 다음과 같이 종류를 나눌 수 있습니다.

전략(Strategy) 패턴

전략 패턴은 실행 중에 알고리즘을 선택하기 위한 패턴입니다. 이 패턴을 사용하면 알고리즘을 쉽게 교체할 수 있도록 합니다. 전략 패턴은 단일 상속 계층을 피할 수 있도록 합니다.
전략 패턴은 일련의 알고리즘을 정의하고 각각에 대한 작업을 캡슐화합니다. 알고리즘은 서로 교체 가능합니다. 이 패턴을 사용하면 알고리즘의 구현을 별도의 클래스로 분리할 수 있습니다. 이렇게 하면 코드 재사용성과 유지보수성이 향상됩니다.

템플릿 메소드(Template Method) 패턴

템플릿 메소드 패턴은 알고리즘의 골격을 정의합니다. 이 패턴은 서브 클래스에서 알고리즘의 특정 부분을 재정의할 수 있도록 합니다. 이 패턴은 상속을 사용합니다.
템플릿 메소드 패턴을 사용하면 공통된 알고리즘의 구현을 별도의 클래스로 분리할 수 있습니다. 이렇게 하면 코드의 재사용성과 유지보수성이 향상됩니다. 또한, 알고리즘의 골격이 정의되어 있기 때문에 알고리즘을 수정하거나 확장할 때에도 안정적인 구조를 유지할 수 있습니다.

상태(State) 패턴

상태 패턴은 객체가 여러 가지 상태를 가질 수 있도록 합니다. 이 패턴은 객체의 행동을 상태에 따라 바꿉니다. 상태 패턴은 객체의 상태를 클래스로 캡슐화하고, 객체가 상태를 바꾸면 클래스를 변경합니다.
상태 패턴을 사용하면 복잡한 조건문을 피할 수 있습니다. 상태 패턴을 사용하면 객체의 상태 변화에 따라 객체의 행동이 자연스럽게 변화합니다. 또한, 상태 패턴을 사용하면 객체의 상태를 쉽게 추가하거나 삭제할 수 있습니다. 이렇게 하면 객체의 유연성이 향상됩니다.

책임 연쇄(Chain of Responsibility) 패턴

책임 연쇄 패턴은 요청을 처리하는 객체들의 연결을 만드는 패턴입니다. 이 패턴은 요청을 처리할 수 있는 객체를 연결하여 요청을 처리할 객체를 찾아가도록 합니다.
객체들은 자신이 처리할 수 없는 요청을 다음 객체에게 전달합니다. 이렇게 함으로써 객체들은 요청 처리를 위해 서로 의존하지 않고, 유연하게 객체들을 추가하거나 제거할 수 있습니다.

명령(Command) 패턴

명령 패턴은 요청을 객체로 캡슐화하여, 요청을 다른 객체에 전달하거나 로깅하거나 취소할 수 있도록 합니다. 이 패턴을 사용하면 요청을 내리는 객체와 요청을 처리하는 객체를 분리할 수 있습니다.
명령 패턴은 보통 요청을 처리하는 객체를 인터페이스로 정의합니다. 이렇게 함으로써 요청을 처리하는 객체를 변경하거나 대체할 수 있습니다. 또한, 명령 객체를 로깅하거나 취소하려면 명령 객체를 캡슐화하여 저장할 수 있습니다.

반복자(Iterator) 패턴

반복자 패턴은 컬렉션 객체의 내부 구조를 노출하지 않고, 컬렉션 객체의 요소를 순회할 수 있도록 합니다. 이 패턴을 사용하면 컬렉션 객체와 요소를 순회하는 방법을 분리할 수 있습니다.
반복자 패턴은 보통 컬렉션 객체와 반복자 객체를 인터페이스로 정의합니다. 이렇게 함으로써 컬렉션 객체의 내부 구조를 변경해도 클라이언트 코드는 변경하지 않아도 됩니다. 또한, 다양한 순회 방법을 제공할 수 있습니다.

중재자(Mediator) 패턴

중재자 패턴은 객체들 간의 상호작용을 캡슐화하여 객체들 간의 결합도를 낮추는 패턴입니다. 이 패턴을 사용하면 객체들이 직접적으로 상호작용하지 않고, 중재자 객체를 통해 상호작용하게 됩니다.
중재자 패턴은 객체들 간의 결합도를 낮추기 때문에 유지보수성과 확장성이 향상됩니다. 또한, 중재자 객체를 통해 객체들이 상호작용하게 되면 객체들 간의 관계가 복잡해지는 것을 방지할 수 있습니다.

방문자(Visitor) 패턴

방문자 패턴은 객체의 구조와 처리를 분리하여, 새로운 기능을 추가할 수 있도록 하는 패턴입니다. 이 패턴을 사용하면 객체의 구조와 처리를 분리할 수 있습니다.
방문자 패턴은 보통 객체 구조를 표현하는 클래스와 처리를 수행하는 클래스를 분리합니다. 이렇게 함으로써 새로운 기능을 추가하거나 기존 기능을 변경할 때, 객체 구조를 변경하지 않아도 됩니다. 또한, 방문자 객체를 추가하면서 유연성과 확장성을 향상시킬 수 있습니다.

행동 패턴의 예

전략 패턴을 사용하여 다양한 무기 시스템을 생성할 수 있습니다. 예를 들어, 캐릭터가 사용하는 무기를 선택하는 시스템을 구현할 때는 전략 패턴을 사용할 수 있습니다. 이렇게 하면 무기의 종류가 추가되거나 삭제될 때에도 코드 변경을 최소화할 수 있습니다.
템플릿 메소드 패턴을 사용하여 게임 엔진을 만들 수 있습니다. 예를 들어, 게임 엔진에서는 게임의 룰을 정의하는 알고리즘이 필요합니다. 이때, 템플릿 메소드 패턴을 사용하여 알고리즘의 골격을 정의하고, 서브 클래스에서 알고리즘의 특정 부분을 재정의할 수 있도록 합니다. 이렇게 하면 게임의 룰을 쉽게 변경하거나 확장할 수 있습니다.
상태 패턴을 사용하여 게임 캐릭터의 상태를 변경할 수 있습니다. 예를 들어, 게임 캐릭터의 상태는 "걷기", "달리기", "공격하기" 등 여러 가지가 있을 수 있습니다. 이때, 상태 패턴을 사용하여 각 상태를 클래스로 캡슐화하고, 캐릭터의 상태에 따라 클래스를 변경합니다. 이렇게 하면 캐릭터의 상태에 따라 적절한 행동을 취할 수 있으며, 코드의 가독성과 유지보수성이 향상됩니다.
책임 연쇄 패턴을 사용하여 로그인 처리를 구현할 수 있습니다. 예를 들어, 로그인 처리를 다음과 같이 구현할 수 있습니다. 첫 번째 객체는 사용자 이름과 비밀번호를 검증하고, 두 번째 객체는 사용자 정보를 가져오고, 세 번째 객체는 로그인 처리를 수행합니다. 이렇게 함으로써 객체들 간의 결합도를 낮출 수 있습니다.
명령 패턴을 사용하여 버튼을 구현할 수 있습니다. 예를 들어, 버튼을 누르면 어떤 작업을 수행하는 경우, 버튼 객체는 명령 객체를 생성하여 작업을 수행합니다. 명령 객체는 작업을 수행하고, 필요에 따라 작업을 취소할 수 있습니다.
반복자 패턴을 사용하여 리스트를 구현할 수 있습니다. 예를 들어, 리스트 객체는 요소를 추가하거나 삭제하는 기능을 제공합니다. 이때, 반복자 객체를 사용하여 리스트의 요소를 순회할 수 있습니다.
중재자 패턴을 사용하여 채팅 프로그램을 구현할 수 있습니다. 예를 들어, 채팅 프로그램에서는 사용자들이 메시지를 주고받습니다. 이때, 중재자 객체를 사용하여 사용자들 간의 메시지를 전달하고, 메시지를 처리합니다.
방문자 패턴을 사용하여 XML 문서를 처리할 수 있습니다. 예를 들어, XML 문서에서는 태그와 속성으로 구성된 요소가 있습니다. 이때, 방문자 패턴을 사용하여 요소를 순회하면서 각 요소의 내용을 처리할 수 있습니다.