Search

디자인 패턴

학과
웰디자인 프로그래밍
phase
개월수
계획 월
2021/11/29 → 2021/12/31
우선순위
4
유형

SOLID 원칙(객체지향 5대 원칙)

1) SRP(단일 책임 원칙)

클래스나 함수는 단 하나의 책임만을 가져야한다.
클래스,함수가 비대해지면 이를 분리시킬 필요가 있다,
하나의 책임이 여러 개의 클래스로 분산되어있는 경우, 요구 사항이 변경될 시, 분산된 책임을 가지고 있는 모든 부분을 살펴야 한다.

2) OCP(Open-Closed Principle, 개방-폐쇄 원칙)

기존 코드는 변경에는 닫혀있고, 추가나 확장에는 열려있어야한다.
자주 변경될 수 있는 내용은 수정하기 쉽게 설계해야하고, 자주 변경되지 않을 내용은 수정에 영향받지 않게 설계해야한다.

3) LSP(Liskov Substitution Principle, 리스코프 치환 원칙)

자식 클래스는 부모 클래스에서 가능한 행위를 수행할 수 있어야한다.
파생 클래스를 만들 때, 이게 정말 올바른 상속의 관계를 갖는지 생각해봐야한다.

4) DIP(Dependency Inversion Principle, 의존 역전 원칙)

의존 관계를 맺을 때, 변화하기 쉬운 것보단 변화하기 어려운 것에 의존해야한다.
변화하기 쉬운 것 = 구체적인 것(클래스, 서브 클래스 인스턴스)
변화하기 어려운 것 = 추상적인 것(추상 클래스, 인터페이스)
의존성 주입 기술 등

5) ISP(Interface Segregation Principle, 인터페이스 분리 원칙)

디자인 패턴의 종류

생성 패턴
구조 패턴
행동 패턴
합성 관계 ⇒ A객체 안에 B객체가 있는데 A가 사라지면 B도 함께 사라지는 구조
집합 관계 ⇒ A객체와 B객체가 따로따로 있는데, A에서 단지 B의 참조만을 들고 있는 경우

싱글톤(Singleton)

단 하나의 인스턴스를 생성해 사용하는 디자인 패턴
장점
단점
활용 상황

팩토리 메쏘드

인터페이스로 객체들을 정의하고, 팩토리가 인스턴스를 생성하는 패턴
장점
단점

빌더(Effective Java 기준)

빌더 패턴은 생성인자가 많을 시, 빌더 객체를 통해 구체적인 객체를 생성한다.
장점
단점

추상 팩토리 메쏘드

추상 팩토리 메소드 기존 팩토리 메쏘드 방식에서 팩토리의 상위 팩토리를 통해 구체적인 팩토리를 생성한다,
장점
단점
활용 상황
팩토리 메쏘드를 쓰던 상황에서, 팩토리의 종류를 늘려야할 때

어댑터

서로 다른 인터페이스를 가진 두 클래스를 어댑터 클래스로 인터페이스를 통일시켜 사용하는 방법
장점
단점

컴퍼지트

단일 객체와 그 객체들을 가지는 집합 객체를 같은 타입으로 취급하며, 트리 구조로 객체들을 엮는 패턴
장점
단점
활용 상황
Component
Leaf와 Composite가 구현해야하는 Interface로 Leaf와 Composite는 모두 Component라는 타입으로 다뤄진다.
Leaf
단일 객체로 Composite의 부분 객체로 들어가게 된다. 이 때 Component의 형태로 들어간다.
Composite
집합 객체로 Leaf 객체나 Composite를 부분으로 둔다. 이 때, Component의 형태로 들어간다.
클라이언트는 이 Composite를 통해 부분 객체들(Leaf나 Composite)를 다룰 수 있다.

데코레이터

기본 객체에 추가적인 기능을 동적으로 유연하게 첨가하는 패턴
장점
단점
활용 상황
Component
ConcreteComponent와 Decorator가 구현할 인터페이스. 두 객체를 동등하게 다루기 위해 존재
ConcreteComponent
Decorate를 받을 객체
기능 추가를 받을 기본 객체
Decorator
Decorate를 할 객체의 추상 클래스
즉, 기능 추가를 할 객체는 이 객체를 상속받는다.
ConcreteDecorator
Decorator를 상속받아 구현할 다양한 기능 객체이다.
이 기능들은 ConcreteComponent에 추가되기 위해 만들어진다.

구조 패턴, 프록시

프록시 객체를 통해 기본 객체에 접근하는 패턴이다.
장점
단점
활용 상황
Subject
Proxy와 ReqlSubject가 구현해야하는 인터페이스
두 객체를 동일하게 다루기 위해 존재
Proxy
RealSubject와 Client 요청 사이에 존재하는 객체
Subject를 구현함으로써 클라이언트는 RealSubject 사용하는 것과 별 차이가 없어야한다.
RealSubjec
실질적으로 요청에 대해 주된 기능을 수행하는 객체
Proxy객체는 내부적으로 이 객체를 로직에 맞게 사용한다.

스트레티지

행동,전략 등 동일계열의 알고리즘들을 인터페이스-캡슐화하고, 알고리즘들을 컴포지션(위임 형태로) 가지는 패턴이다.
장점
단점
활용 상황

탬플릿메쏘드

상위 클래스가 뼈대가 되는 로직을 구성하고, 하위 클래스들이 이 로직 요소들을 각각 구현하는 패턴
장점
단점
활용 상황