STUDY/디자인패턴
-
Decorator Pattern(데코레이터 패턴)STUDY/디자인패턴 2024. 12. 25. 15:57
데코레이터 패턴이란?객체들을 새로운 행동들을 포함한 특수 래퍼 객체들 내에 넣어서 위 행동들을 해당 객체들에 연결시키는 구조 패턴으로, 상속을 통해 클래스를 확장하는 대신, 객체를 감싸는 방식을 사용하여 기능을 추가하거나 변경한다. 구조Component래퍼들과 래핑된 객체들 모두에 대한 공통 인터페이스를 선언Concrete Component래핑되는 객체들의 클래스이며, 기본 행동들을 정의하고 해당 기본 행동들은 데코레이터들이 변경할 수 있다.Base Decorator래핑된 객체를 참조하기 위한 필드가 있고, 필드의 유형은 구상 컴포넌트들과 구상 데코레이터들을 모두 포함할 수 있도록 컴포넌트 인터페이스로 선언되어야 한다. 그 후 기초 데코레이터는 모든 작업들을 래핑된 객체에 위임한다.Concrete Dec..
-
Composite Pattern(복합체 패턴)STUDY/디자인패턴 2024. 12. 25. 14:18
복합체 패턴이란?객체들을 트리 구조들로 구성한 후, 이러한 구조들과 개별 객체들처럼 작업할 수 있도록 하는 구조 패턴으로, 전체 트리 구조에 대해 재귀적으로 메서드들을 실행하고 결과를 요약하는 기능을 제공 구조 Component트리의 단순 요소들과 복잡한 요소들 모두에 공통적인 작업을 설명하는 인터페이스Leaf 트리의 기본 요소이며 하위요소가 없음. 일반적으로 Leaf 컴포넌트들은 작업을 위임할 하위요소가 없어서 대부분의 실제 작업들을 수행Composite컨테이너(일명 복합체)는 하위 요소들(Leaf 또는 기타 컨테이너)이 있는 요소로, 컨테이너는 자녀들의 구상 클래스들을 알지 못하며, 컴포넌트 인터페이스를 통해서만 모든 하위 요소들과 함께 작동함.요청을 전달받으면 컨테이너는 작업을 하위 요소들에 위임하..
-
Bridge Pattern(브리지 패턴)STUDY/디자인패턴 2024. 12. 8. 19:38
브리지 패턴이란?큰 클래스 또는 밀접하게 관련된 클래스들의 집합을 두 개의 개별 계층구조(추상화 및 구현)로 나눈 후 각각 독립적으로 개발할 수 있도록 하는 구조 디자인 패턴** 여기서 추상화 및 구현은 프로그래밍 언어에서의 추상화 클래스와 인터페이스를 의미하는 것이 아님. 문제Circle 및 Square라는 한쌍의 자식 클래스들이 있는 Shape 클래스가 있다고 가정하자. 이 클래스 계층 구조를 확장하여 색상을 도입하기 위해 Red 및 Blue 모양들의 자식 클래스들을 만들 계획이다. 하지만 이미 두 개의 자식 클래스가 있으므로 BlueCircle, RedSquare와 같은 네 가지의 클래스 조합을 만들어야 한다. 여기서 문제는 새로운 모양 유형들과 색상 유형들을 추가할 때마다 계층 구조가 기하급수적으..
-
Adapter Pattern(어댑터 패턴)STUDY/디자인패턴 2024. 12. 8. 15:58
어댑터 패턴이란?호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 하는 구조적 디자인 패턴 문제XML 형식의 데이터를 사용하는 앱에서 JSON 형식의 데이터로만 작동하는 라이브러리를 사용한다고 했을 때, 문제를 해결하기 위해 라이브러리를 XML과 작동하도록 변경할 수 있으나, 그러면 라이브러리에 의존하는 일부 기존 코드가 손상될 수 있고, 타사의 라이브러리 소스 코드에 접근하는 것 자체가 불가능할 수 있다. 해결책어댑터는 한 객체의 인터페이스를 다른 객체가 이해할 수 있도록 변환하는 역할을 한다. 객체 중 하나를 래핑하여 클라이언트가 쉽게 사용할 수 있도록 변환하고, 래핑된 객체는 어댑터의 존재를 인식하지 못한다. 데이터를 다양한 형식으로 변환할 수 있을 뿐만 아니라 다른 인터페이스를 가진 객..
-
Singleton Pattern(싱글턴 패턴)STUDY/디자인패턴 2024. 11. 26. 22:58
싱글턴 패턴이란?클래스에 인스턴스가 하나만 있도록 하면서 이 인스턴스에 대한 전역 접근 지점을 제공하는 생성 디자인 패턴 구조 싱글턴 클래스는 정적 메서드 getInstance를 선언하다. 이 메서드는 자체 클래스의 같은 인스턴스를 반환한다.싱글턴의 생성자는 항상 클라이언트 코드에서부터 숨겨져야 하고, getInstance 메서드를 호출하는 것이 싱글턴 객체를 가져올 수 있는 유일한 방법이여야 한다. public class Database { private static Database instance; private Database() { } public static Database getInstance() { if (instance == null) { ..
-
Prototype Pattern(프로토타입 패턴)STUDY/디자인패턴 2024. 11. 26. 22:45
프로토타입 패턴이란?코드를 그들의 클래스들에 의존시키지 않고 기존 객체들을 복사할 수 있도록 하는 생성 디자인 패턴 문제어떤 객체가 있고 그 객체의 정확한 복사본을 만들고 싶은 경우, 먼저 같은 클래스의 새 객체를 생성하고 원본 객체의 모든 필드들을 새 객체에 복사해야 한다. 하지만 여기에 문제가 두 가지 존재한다. 1. 객체의 필드들 중 일부가 비공개여서 객체 자체를 외부에서 볼 수 없을 수 있으므로 모든 객체를 복사하지 못한다.2. 객체의 복제본을 생성하려면 객체의 클래스를 알아야 하므로, 코드가 해당 클래스에 의존하게 된다. 해결책프로토타입 패턴은 실제로 복제되는 객체들에 복제 프로세스를 위임한다. 패턴은 복제를 지원하는 모든 객체에 대한 공통 인터페이스를 선언하다. 이 인터페이스를 사용하면 코드..
-
Builder Pattern(빌더 패턴)STUDY/디자인패턴 2024. 11. 12. 22:36
빌더 패턴이란?복잡한 객체들을 단계별로 생성할 수 있도록 하는 생성 디자인 패턴이다. 이 패턴을 사용하면 같은 제작 코드를 사용하여 객체의 다양한 유형들과 표현을 제작할 수 있다. 문제House(집) 객체를 만드는 경우, 간단한 집을 지으려면 네 개의 벽과 바닥을 만든 후 문도 설치하고 한 쌍의 창문도 맞춘 후 지붕도 만들어야 한다. 하지만 뒤뜰과 기타 물품(난방 시스템, 배관 및 전기 배성 등)이 있는 더 크고 현대적인 집을 원하는 경우 어떻게 해야할까? 가장 간단한 해결책은 House 클래스를 확장하고 매개변수의 모든 조합을 포함하는 자식 클래스들의 집합을 만드는 것이다. 하지만 이 방법은 상당한 수의 자식 클래스를 만들게 되는 문제가 있다. 자식 클래스를 늘리지 않는 방식은, 기초 House 클래스..
-
Abstract Factory Pattern(추상 팩토리 패턴)STUDY/디자인패턴 2024. 11. 12. 21:49
추상 팩토리 패턴이란?관련 객체들의 구상 클래스들을 지정하지 않고도 관련 객체들의 모음을 생성할 수 있도록 하는 생성패턴 문제1. 관련 제품들로 형성된 패밀리(제품군), 예 : Chair(의자) + Sofa(소파) + CoffeeTable(커피테이블).2. 해당 제품군의 여러 가지 변형. 예를 들어 Chair(의자) + Sofa(소파) + CoffeeTable(커피테이블) 같은 제품들은 Modern(현대식), Victorian(빅토리안), ArtDeco(아르데코 양식) 와 같은 변형으로 제공 위와 같은 클래스들로 구성되는 가구 판매 프로그램을 만드는 경우 문제1. 새로운 개별 가구 객체를 생성했을 때, 이 객체들이 기존의 같은 패밀리 내에 있는 다른 가구 객체들과 일치하는 변경(스타일)을 가지도록 해야..