디자인 패턴
디자인 패턴이란 소프트웨어 개발에서 자주 발생하는 문제들에 대한 재사용 가능한 해결책이다.
디자인 패턴은 구체적인 구현 방법이 아니라 일종의 설계 원칙이므로, 다양한 프로그래밍 언어와 도구에 적용할 수 있다.
디자인 패턴이 필요한 이유
- 소프트웨어 디자인의 일반적인 문제들에 대해 시도되고 검증된 해결책을 모은 것이다.
이런 문제를 다루지 않더라고 객체 지향 디자인 원칙들을 사용해 많은 종류의 문제를 해결하는 방법을 배울 수 있다.
- 팀원과 더 효율적으로 의사소통 할 수 있는 공통 언어를 정의한다.
예를 들어 팀의 모두가 디자인 패턴을 이해하면 ‘그 문제를 위해서는 싱글턴을 사용하세요’ 라고 말하면 무엇을 뜻하는지 이해할 수 있고 설명할 필요도 없다.
GoF 디자인 패턴의 종류
- 생성 패턴
- 기존 코드의 재활용과 유연성을 증가시키는 객체 생성 매커니즘들을 제공한다.
- 구조 패턴
- 구조를 유연하고 효율적으로 유지하면서 객체와 클래스를 더 큰 구조로 조합하는 방법을 설명한다.
- 행동 패턴
- 객체 간의 효과적인 의사소통과 책임 할당을 처리한다.
생성 패턴 |
구조 패턴 |
행동 패턴 |
- 추상 팩토리 (Abstract Factory) |
|
|
- 빌더 (Builder)
- 팩토리 메서드 (Factory Method)
- 프로토타입 (Prototype)
- 싱글톤 (Singleton) | - 어댑터 (Adapter)
- 브리지 (Bridge)
- 복합체 (Composite)
- 데코레이터 (Decorator)
- 퍼사드 (Facade)
- 플라이웨이트 (Flyweight)
- 프록시 (Proxy) | - 책임 연쇄 (Chain of Responsibility)
- 커맨드 (Command)
- 인터프리터 (Interpreter)
- 이터레이터 (Iterator)
- 미디에이터 (Mediator)
- 메멘토 (Memento)
- 옵저버 (Observer)
- 상태 (State)
- 전략 (Strategy)
- 템플릿 메서드 (Template Method)
- 방문자 (Visitor) |
예시) 싱글톤 패턴
하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다.
주로 DB연결 모듈에 많이 사용된다.
class Singleton {
constructor() {
if (!Singleton.instance) {
Singleton.instance = this;
}
return Singleton.instance;
}
getInstance() {
return this.instance;
}
}
const a = new Singleton();
const b = new Singleton();
console.log(a === b);
장점: