본문 바로가기
728x90
반응형

Computer Science/디자인패턴12

State Pattern 상태 패턴은 내부 상태가 바뀜에 따라 객체의 행동이 바뀔 수 있도록 해둔다. 마치 객체의 클래스가 바뀌는 것 같은 결과를 얻을 수 있다. 코드는 git! 2022. 11. 23.
Composite Pattern 컴포지트 패턴은 객체를 트리구조로 구성해서 부분-전체 계층구조를 구현한다. 컴포지트 패턴을 사용하면 클라이언트에서 개별 객체와 복합 객체를 똑같은 방법으로 다룰 수 있다. 코드는 git! 2022. 11. 15.
Iterator Pattern 반복자 패턴은 컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법을 제공한다. 코드의 컬렉션은 여러 방법으로 나타낼 수 있는데, 동일한 기능에 대해 각 방법마다 모두 구현이 필요한 경우 반복자 패턴을 사용하는 것이 좋다. 코드는 git! 2022. 11. 1.
Template Method Pattern Template Method Pattern은 알고리즘의 일부 단계를 서브 클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하며서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있다. 아래에서 coffee와 tea가 각각 coffee - prepare - boil - brew coffee grind - pour in cup - add sugar and milk tea - prepare - boil - steep tea bag - pour in cup - add lemon 의 과정으로 만들어진다면, boil과 pour in cup의 과정은 base에 공통적으로 구현할 수 있다. 추가적으로, brew coffee grind 와 steep tea bag 이 비슷하고 add sugar and mi.. 2022. 10. 25.
Facade Pattern 퍼사드 패턴은 서브시스템에 있는 일련의 인터페이스를 통합 인터페이스로 묶어주는 패턴이다. 코드는 git! 2022. 10. 18.
Adapter Pattern 어댑터 패턴은 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환하는 패턴이다. Client가 여러개일 때 우리가 만든 모든 프로그램을 client의 interface에 맞출 수 없기 때문에, client의 inerface와 우리 프로그램의 interface를 convert할 수 있는 adapter를 사용한다. 객체 어댑터와 클래스 어댑터가 있는데 클래스 어댑터의 경우 다중상속이 가능할 때만 사용할 수 있다. 1) 객체 어댑터 2) 클래스 어댑터 git 코드는 클래스 어댑터를 구현하였다. 2022. 10. 18.
Command Pattern 커맨드 패턴은 요청 내역을 객체로 캡슐화해서 객체를 서로 다른 요청 내역에 따라 처리한다. 요청을 큐에 저장하거나 로그로 기록하여 작업취소 기능을 사용할 수도 있다. 다음과 같은 리모컨과 리모컨 버튼을 눌렀을 때 작동시키고 싶은 가전제품이 있다. 가전제품은 각각 다른 커맨드를 갖고 있어서 한 제품당 on/off만 있는 버튼들을 눌러 어떻게 처리할지에 대한 고민이 필요하다. 이를 식당에서의 손님, 종업원, 요리사로 볼 수 있다. 종업원(Invoker)은 주문서(Command)를 모으고 전달하는 것 만으로도 요리사(Receiver)에게 손님(Client)의 주문서(Command)를 전달할 수 있다. 그러면 요리사는 주문서의 메뉴를 보고 어떤 작업을 수행할지 결정한다. 리모컨과 리모컨 버튼을 눌렀을 때의 다이.. 2022. 9. 28.
Singleton Pattern 싱글턴 패턴은 class 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제어하는 패턴이다. 전역변수처럼 사용 가능하지만 전역볏누와 다르게 객체를 필요할 때만 만들기 때문에 자원의 낭비가 덜하다. 연결 pool , Thread pool 같은 자원 pool관리에 이점이 있다. - 고전 싱글턴 패턴 구현 public class Singleton { private static Singleton uniqueInstance; ------> a private Singleton(){}------> b public static Signleton getInstance() { if(uniqueInstance == null){ uniqueInstance = new Singleton();------> c } retur.. 2022. 9. 26.
Factory / Factory Abstract Method Pattern Factory Method 팩토리 메소드 패턴은 객체를 생성할 때 필요한 인터페이스를 만든다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정한다. - 예시로 살펴보자. type에 따라 다른 pizza를 주문한다고 할 때 아래와 같이 작성할 수 있다. 하지만 type이 추가 될때마다 orderPizza에 대하여 수정이 필요할 것이다. 따라서, Pizza의 type에 따라 pizza를 만드는 부분을 객체 생성부분으로 캡슐화 한다. createPizza를 PizzaFactory에서 만들도록 한다. 이 때, 지점마다 pizza style이 다르다면? 지점마다 factory를 생성하여 해당 객체를 PizzaStore로 넘겨준다. 이 때, PizzaFactory와 PizzaStore을 하나로 묶을 수 있는데.. 2022. 9. 13.
Decorator Pattern 데코레이터 패턴은 객체에 추가 요소를 동적으로 더할 수 있으며 서브클래스를 만들 때보다 훨씬 유연하게 기능을 확장할 수 있다. 커피 종류, 추가 메뉴에 따른 총 가격을 출력해보자. 구조는 아래와 같다. 계속 감싸는 방식이라고 볼 수 있다. 파일 구조 더보기 Beverage.cs - Beverage : component 역할을 함 - CondimentalDecorator : decorator의 객체 Coffee.cs - Espresso - DarkRoast - HouseBlend - Decaf Additional.cs - Milk - Mocha - Soy - Whip Decorator.cs - Run : 커피주문!! 코드에는 추가로 size에 따라 추가메뉴의 가격이 달라지는 것을 반영하였다. 코드는 git.. 2022. 9. 6.
728x90
반응형