Earn this, Earn it.
디자인 패턴에 대해서 - 1) 디자인 패턴의 개요 본문
디자인 패턴(Design Pattern)이란?
반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션을 말합니다.
'GoF의 디자인패턴'에서는 크게 "생성 패턴", "구조 패턴", "행동 패턴"3가지로 구분하고 있습니다.
여기서 생성 패턴이란 객체의 생성과 참조 과정을 캡슐화하여 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 하여 프로그램에 유연성을 더해주는 패턴을 말하며,
예) DataBase 연결을 관리하는 하나의 Instance만 만드는 경우
구조 패턴이란 클래스/객체들을 조합하여 더 큰 구조로 만들 수 있게 도와주며 객체간의 관계를 조직하는 패턴을 말하고
예) 서로 다른 2개의 인터페이스 사이의 호환을 위해 새로운 Class를 정의하는 경우
행동 패턴이란 객체의 상호작용이나 관심사를 분리하여 어떤 일이나 알고리즘을 어떤 객체에게 할당할지를 정하는 패턴으로 그들 간의 결합도를 최소화할 수 있도록 도와주는 패턴을 말합니다.
예) 하위 클래스에서 구현해야 하는 함수 및 메서드들을 미리 선언하여, 상속하여 이를 필수적으로 구현하는 경우
생성(Creational) 패턴 | 구조(Structural) 패턴 | 행동(Behavioral) 패턴 |
싱글톤(singleton) | 어댑터(Adapter) | 전략(Strategy) |
팩토리 메서드(Factory Methods) | 브리지(Bridge) | 옵저버(Observer) |
추상 팩토리(Abstract Factory) | 컴포지트(Composite) | 상태(State) |
빌더(Builder) | 데코레이터(Decorator) | 템플릿(Template) |
프로토타입(Prototype) | 퍼사드(Facade) | 방문자(Visitor) |
플라이웨이트(Flyweight) | 역할 사슬(Chain of Responsibility) | |
프록시(Proxy) | 커맨드(Command) | |
인터프리터(Interpreter) | ||
이터레이터(Iterator) | ||
미디에이터(Mediator) |
디자인 패턴을 사용하는 목적
소프트웨어에서 말하는 디자인 패턴 또한 건축학에서 말하는 디자인 패턴과 맥락과 목적이 같습니다.
즉, 소프트웨어 개발에서의 디자인 패턴은 기존에 잘 설계된 코드나 큰 틀들을 잘 접목하여 효율적이고 좋은 코드 설계 방식들을 재사용하는 방법론입니다.
디자인 패턴을 공부하는 팁
디자인 패턴은 수십 개가 넘습니다. 이에 대해 단순 암기를 하기보다는 각각이 어떤 문제들을 해결하기 위해 탄생했는지, 각 패턴간의 관련성 등을 파악하며 이해하기 위해 노력해보면 좋을 것 같습니다.
- 어떤 문제들을 해결하기 위함인지
- 어떤 상황에 적용할 수 있을지
- 비슷한 목적을 가진 패턴끼리 연관짓기
- 예제 코드를 꼭 참고하자
- 장단점을 비교하자
SOLID원칙 (객체지향 설계의 원칙)
위키에 따르면 컴퓨터 프로그래밍에서 SOLID란 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것입니다.
두문자 | 약어 | 개념 |
S | SRP (Single Responsibility Principle) |
단일 책임 원칙 "한 클래스는 하나의 책임만" |
O | OCP (Open/Closed Priciple) |
개방-폐쇄 원칙 "확장에는 Open, 변경에는 Close" |
L | LSP (Liskov Substitution Priciple) |
리스코프 치환 원칙 "정확성을 유지하면서 하위 타입의 인스턴스로 교체 가능해야 한다" |
I | ISP (Interface Segregation Priciple) |
인터페이스 분리 원칙 "특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다" |
D | DIP (Dependency Inversion Priciple) |
의존관계 역전 원칙 "추상화에 의존해야지, 구체화에 의존하면 안된다" |
참고
https://readystory.tistory.com/114?category=822867
https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84)
'[개발 공부]' 카테고리의 다른 글
TIL - 내멋대로 정리하는 this, bind, apply, call (0) | 2021.09.24 |
---|---|
디자인 패턴에 대해서 - 2) 옵저버(Observer) 패턴 (0) | 2021.09.23 |
파워토이(PowerToys)로 개발 능률 올리자! (0) | 2021.09.23 |
JavaScript로 직접 SPA 구현하면서 느낀 React (0) | 2021.09.22 |
TIL - Webpack / Babel / MVC패턴 /SCSS (0) | 2021.09.22 |