전체 글(603)
-
9. 옵서버 패턴(Observer Pattern)
9.1 옵서버 패턴 옵서버 패턴(Observer Pattern)은 데이터의 변경이 발생 시 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 유용하다. 예를 들어 차량의 연료가 소진될 때까지의 주행 가능 거리를 출력하는 클래스, 연료량이 부족하면 경고 메시지를 보내는 클래스, 연료량이 부족하면 자동으로 근처 주유소를 표시하는 클래스 등에 연료량의 변화를 통보하는 경우가 있다. 이런 경우에 연료량 클래스는 연료량에 관심을 가지는 구체적인 클래스(주행 가능 거리 출력, 연료량 부족 경고, 근처 주유소 검색)에 직접 의존하지 않는 방식으로 설계하는 것이 바람직하다. 옵서버 패턴은 통보 대상 객체의 관리를 Subject 클래스와 Observer 인터페이스로 일반화한다. 그러면 데이터 변경을..
2021.06.04 -
8. 커맨드 패턴(Command Pattern)
8.1 커맨드 패턴이란? 커맨드 패턴은 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할 때 유용하다. 예를 들어 'FileOpen'이라는 메뉴 항목이 선택되었을 때 실행될 기능과 'FileClose'라는 메뉴 항목이 선택되었을 때 실행되는 기능은 다를 것이다. 이런 경우 MenuItem 클래스에서 직접 구체적인 기능을 구현한다면 'FileOpen' 메뉴 항목을 위한 MenuItem 클래스와 'FileClose' 메뉴 항목을 위한 MenuItem 클래스를 각각 구현해야 한다. MenuItem 클래스는 하나이므로 'FileOpen'과 'FileClose' 메뉴 항목을 재사용하기 어려울 수 있기 때문이다. 커맨드 패턴은 실행될 기..
2021.05.31 -
7. 스테이트 패턴(State Pattern)
7.1 스테이트 패턴이란? 실세계의 많은 개체는 잣니이 처한 상태에 따라 일을 다르게 수행한다. 비가 오거나 눈이 오거나 사람이 많이 붐비는 장소에 있거나에 따라 걷는 방식과 말하는 방식이 달라지는 것과 마찬가지 이치다. 이를 표현하는 가장 직접적이고 직관적인 방법은 일을 수행할 때의 상태에 따라 상태 하나하나가 어떤 상태인지 검사해 일을 다르게 수행하게끔 하는 것이다. 이는 분명 복잡한 조건식이 있는 코드를 산출할 것이고, 결과적으로 코드를 이해하거나 수정하기 어렵게 만든다. 이러한 방식과 달리 스테이트 패턴(State Pattern)은 어떤 행위를 수행할 때 상태에 행위를 수행하도록 위임한다. 이를 위해 스테이트 패턴에서는 시스템의 각 상태를 클래스로 분리해 표현하고, 각 클래스에서 수행하는 행위들을..
2021.05.31 -
6. 싱글턴 패턴(Singleton Pattern)
6.1 싱글턴 패턴(Singleton Pattern) 싱글턴 패턴은 인스턴스가 오직 하나만 생성되는 것을 보장하고 어디에서든 이 인스턴스에 접근할 수 있도록 하는 디자인 패턴이다. 싱글턴 패턴 컬레보레이션 Singleton : 하나의 인스턴스만을 생성하는 책임이 존재하며 getInstance 메서드를 통해 모든 클라이언트에게 동일한 인스턴스를 반환하는 작업을 수행한다. 싱글턴 패턴의 순차 다이어그램 클라이언트가 싱글턴 클래스에 getInstance 메서드를 통해 객체 생성을 요청하면 이미 객체가 생성된 경우에는 객체를 반환하고, 처음으로 생성하는 경우에는 생성자를 호출해 객체를 생성한다. 6.2 프린터 관리자 만들기 10명의 직원들이 프린터 하나만 공유해서 사용해야 하는 실정이다. 프린터를 관리하는 프로..
2021.05.27 -
5. 전략 패턴(Strategy Pattern)
5.1 전략 패턴 전략 패턴(Strategy Pattern)이란 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴이다. 전략이란 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘 등으로 이해할 수 있다. 프로그램에서 전략을 실행할 때는 쉽게 전략을 바꿔야 할 필요가 있는 경우가 많이 발생한다. 특히 게임 프로그래밍에서 게임 캐릭터가 자신이 처한 상황에 따라 공격이나 행동하는 방식을 바꾸고 싶을 때 스트래티지 패턴은 매우 유용하다. 스트래티지 패턴은 같은 문제를 해결하는 여러 알고리즘(방식)이 클래스별로 캡슐화되어 있고 이들이 필요할 때 교체할 수 있도록 함으로써 동일한 문제를 다른 알고리즘으로 해결할 수 있게 하는 디자인 패턴이다. 스트래티지 패턴 컬레보레이션 스트래..
2021.05.26 -
4. 디자인패턴
4.1 디자인 패턴의 이해 4.1.1 디자인 패턴의 정의 디자인 패턴이란 소프트웨어를 설계시 특정 맥락에서 자주 발생하는 고질적인 문제들이 재발생할 시 재사용할 수 있는 해결책이다. 4.1.2 패턴의 정의 패턴은 비슷하거나 동일한 양식 또는 유형들이 반복되어 나타난다는 의미이다. 문제와 해결책도 동일한 유형이나 양식을 통해 쉽게 탐색 가능. 4.1.3 디자인 패턴 구조 컨텍스트(Context) : 문제가 발생하는 여러 상황을 기술한다. 즉, 패턴이 적용될 수 있는 상황을 나타낸다. 경우에 따라서는 패턴이 유용하지 못한 상황을 나타내기도 한다. 문제(Problem) : 패턴이 적용되어 해결할 필요가 있는 여러 디자인 이슈들을 기술한다. 이때 여러 제약 사항과 영향력도 문제 해결을 위해 고려한다. 해결(So..
2021.05.24