본문 바로가기

728x90

행위패턴

[디자인패턴][행위패턴] 상태 State - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. State Pattern 상태에 의해 행동이 결정된다. 상태는 바뀔 수 있고, 상태를 전환시켜 주는 것을 트리거라 한다. 상태 디자인 패턴은 "상태가 동작을 제어하고, 상태는 바뀔 수 있다"는 단순한 아이디어다. 상태 변경 주체가 누구인지 규정하지 않는다. 상태 디자인 패턴은 보통 두 가지 방법이 있다. 실제로는 두 번째 방법이 더 흔히 사용된다. 첫 번째 방법은 일반적인 사고방식과 색다른 면이 있다. 동작을 가지는 실제 클래스로 상태를 정의한다. 상태가 이전될 때 클래스의 변화에 따라 변경된다. 상태와 상태 전이를 단순히 enum 타입처럼 식별자의 나열로 정의한다. 실제 상태 변화는 상태 머신이라는 특별한 컴포넌트를 두어 수행.. 더보기
[디자인패턴][행위패턴] 매개자 Meditator - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Meditator Pattern 우리가 작성하는 코드의 상당 부분은 서로 다른 컴포넌트(클래스) 간 포인터나 직접적 참조를 통해 커뮤니케이션한다. 어떤 경우 컴포넌트 간 명시적으로 상대방 객체의 존재를 알아야 하는 상황이 불편할 수 있다. 또는 상대방 객체를 알더라도 객체 생성/소멸 시점에 대한 관리 때문에 포인터나 참조로 접근되는 것이 싫을 수 있다. 매개자는 컴포넌트 간 커뮤니케이션을 돕기 위한 메커니즘이다. 매개자 자체는 커뮤니케이션에 동반되는 모든 컴포넌트로부터 접근 가능해야 한다. 즉, 전역 정적 변수이거나 모든 컴포넌트에 참조가 노출되어야 한다. 채팅 룸 채팅 룸은 매개자 디자인 패턴이 적용될 수 있는 가장 전형적인 .. 더보기
[디자인패턴][행위패턴] 인터프리터 Interpreter - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Interpreter Pattern Interpreter 디자인 패턴의 목적은 입력 데이터를 해석하는 것이다. 꼭 텍스트에 한정되지는 않는다. 인터프리터의 작업을 수행하는 몇 가지 단순한 예를 보여줄 것이다. 일반적인 예는 다음과 같다. 42나 1.234e12와 같은 숫자 리터럴은 바이너리로 저장하면 효율적이다. C++에서는 Boost.LexicalCast와 같은 고급 라이브러리를 사용할 수 있다. C의 API인 atof()를 이용할 수도 있다. 텍스트에서 어떤 패턴을 찾을 때 정규 표현식을 사용하면 편하다. 정규 표현식은 특정 목적을 위한 완전 별개의 언어다. 정규 표현식도 적절히 해석되어야만 한다. CSV, XML, JSON.. 더보기
[디자인패턴][행위패턴] 책임 사슬 Chain of Responsibility - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Chain of Responsibility 어떤 시스템을 구성하고 있는 여러 개의 서로 다른 컴포넌트들이 어떤 메시지를 역할에 따라 주고받으며 처리할 수 있다. 개념적으로는 구현하기 쉬워 보인다. 어떤 처리를 수행할 담당 컴포넌트의 목록만 있으면 된다. 시나리오 컴퓨터 게임에서 크리처들이 있다고 하자. 공격력과 방어력 두 가지 값을 속성으로 갖는다고 하자. struct Creature { // 생성자와 add(cm); } else { next = cm; } } virtual void handle() { if ( nullptr != next ) { next->handle(); //< 핵심 부분 } } protected: Creat.. 더보기

728x90