디자인패턴(7)
-
데코레이터 패턴(Decorator Pattern)
데코레이터 패턴이란 주어진 상황 및 용도에 따라 어던 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브클래싱 대시 쓸 수 있는 유연한 대안이 될 수 있다. -위키백과(https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0_%ED%8C%A8%ED%84%B4) Component: 기본 기능을 뜻하는 ConcreteComponent와 추가 기능을 뜻하는 Decorator의 공통 기능을 정의한다. 즉, 클라이언트는 Component를 통해 실제 객체를 사용한다. ConcreteCompnent: 기본 기능을 구현하는 클래스 Decorator: 많은 수가 존재하는 구체적인 Decorator의 공통 기능을 제공한다. Conc..
2022.04.11 -
옵저버 패턴(Observer Pattern)
옵저버 패턴은 통보 대상 객체의 관리를 Subject 클래스와 Observer 인터페이스로 일반화한다. 그러면 데이터 변경을 통보하는 클래스(ConcreteSubject)는 통보 대상 클래스나 객체(ConcreteObserver)에 대한 의존성을 없앨 수 있다. 결과적으로 옵저버 패턴은 통보 대상 클래스나 대상 객체의 변경에도 ConcreteSubject 클래스를 수정 없이 그대로 사용할 수 있도록 한다. Observer: 데이터의 변경을 통보 받는 인터페이스. 즉, Subject에서는 Observer 인터페이스의 update메서드를 호출함으로써 ConcreteSubject의 데이터 변경을 ConcreteObserver에게 통보한다. Subject: ConcreteObserver 객체를 관리하는 요소. ..
2022.04.05 -
커맨드 패턴(Command Pattern)
커맨드 패턴은 실행될 기능을 캡슐화함으로써 기능의 실행을 요구하는 호출자(Invoker) 클래스와 실제 기능을 실행하는 수신자(Receiver) 클래스 사이의 의존성을 제거한다. 따라서 실행될 기능의 변경에도 호출자 클래스를 수정 없이 그대로 사용할 수 있도록 해준다. Command: 실행될 기능에 대한 인터페이스. 실행될 기능을 execute 메서드로 선언함 ConcreteCommand: 실제로 실행되는 기능을 구현. 즉, Command라는 인터페이스를 구현함 Invoker: 기능의 실행을 요청하는 호출자 클래스 Receiver: ConcreteCommand에서 execute 메서드를 구현할 때 필요한 클래스. 즉, ConcreteCommand의 기능을 실행하기 위해 사용하는 수신자 클래스 // 커맨드..
2022.04.04 -
스테이트 패턴(State Pattern)
스테이트 패턴은 상태에 따라 동일한 작업이 다른 방식으로 실행될 때 해당 상태가 작업을 수행하도록 위임하는 디자인 패턴이다. State: 시스템의 모든 상태에 공통의 인터페이스를 제공한다. 따라서 이 인터페이스를 실체화한 얻너 상태 클래스도 기존 상태 클래스를 대신해 교체해서 사용할 수 있다. ConcreteSatteA, ConcreteStateB: Context 객체가 요청한 작업을 자신의 방식으로 실제 실행한다. 대부분의 경우 다음 상태를 결정해 상태 변경을 Context 객체에 요청하는 역할도 수행한다. Context: State를 이용하는 역할을 수행한다. 현재 시스템의 상태를 나타내는 상태 변수(state)와 실제 시스템의 상태를 구성하는 여러 가지 변수가 있다. 또한 각 상태 클래스에서 상태 ..
2022.04.04 -
싱글턴 패턴(Singleton Pattern)
싱글턴 패턴은 객체가 오직 하나만 생성되는 것을 보장하고 어디에서든 이 객체에 접근할 수 있도록 하는 디자인 패턴이다. Singleton -instance -Singleton() +getInstance() 다이어그램으로 표현하면 이렇다. 객체가 하나만 생성되고 어디에서든 호출 가능하므로 여러곳에서 호출한 횟수가 누적되어야 하는 경우 등에서 유용하다. using System.Threading; int user_num = 5; Thread[] users = new Thread[user_num]; for(int i = 0; i < users.Length; i++) { users[i] = new Thread(run); users[i].Start(); } void run() { Printer printer = P..
2022.04.01 -
스트래티지 패턴(Strategy Pattern)
스트래티지 패턴은 행위(알고리즘, 메소드)를 캡슐화하여 이를 동적으로 바꿀 수 있게 해주는 패턴이다. Strategy: 인터페이스나 추상 클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시한다. ConcreteStrategy1, ConcreteStrategy2,...: 스트래티지 패턴에서 명시한 알고리즘을 실제로 구현한 클래스다. Context: 스트래티지 패턴을 이용하는 역할을 수행한다. 필요에 따라 동적으로 구체적인 전략을 바꿀 수 있도록 setterMethod()를 제공한다. Animal cat = new Cat("kitty"); Animal dog = new Dog("badook"); dog.SetSoundStrategy(new BarkStrategy()); dog.SetEatStr..
2022.03.29