전체 글(593)
-
11. 템플릿 메서드 패턴(Template Method Pattern)
11.1 템플릿 메서드 패턴 템플릿 메서드 패턴은 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화할때 유용하다. 다른 관점에서 보면 동일한 기능을 상위 클래스에서 정의하면서 확장/변화가 필요한 부분만 서브 클래스에서 구현할 수 있도록 한다. 템플릿 메서드 패턴의 전체적인 알고리즘은 상위 클래스에서 구현하면서 다른 부분은 하위 클래스에서 구현할 수 있도록 하는 디자인 패턴이다. 전체적인 알고리즘 코드를 재사용하는데 유용하다. 템플릿 메서드 패턴의 컬레보레이션 AbstractClass : 템플릿 메서드를 정의하는 클래스. 하위 클래스에 공통 알고리즘을 정의하고 하위 클래스에서 구현될 기능을 primitive 메서드 또는 hook 메서드로 정의하는 클래스다. Concret..
2021.06.08 -
10. 데커레이터 패턴(Decorator Pattern)
10.1 데커레이터 패턴 데커레이터 패턴은 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우에 각 추가 기능을 Decorator 클래스로 정의한 후 필요한 Decorator 객체를 조합함으로써 추가 기능의 조합을 설게하는 방식이다. 예를 들어 기본 도로 표시 기능에 차선 표시, 교통량 표시, 교차로 표시, 단속 카메라 표시의 4가지 추가 기능이 있을 때 추가 기능의 모든 조합은 15가지가 된다. 데커레이터 패턴을 사용하면 개별 추가 기능에 해당하는 Decorator 클래스 4개만 구현하고 개별 추가 기능을 객체의 형태로 조합함으로써 추가 기능의 조합을 구현할 수 있다. 데커레이터 패턴의 컬레보레이션 Component : 기본 기능을 뜻하는 ConcreteComponent와 추가 기능을 뜻하는 Deco..
2021.06.07 -
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