(이미지 출처 https://bgasparotto.com/design-patterns)
디자인 패턴이란 프로그램을 설계할 때, 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약'형태로 만들어 놓은 것을 의미합니다.
다시말해, "효율적으로 좋은코드를 짜기위한 방법론"이라고 말할 수 있습니다.
디자인 패턴은 일반적인 문제에 대한 일반적인 해결책을 제공합니다.
이러한 패턴들은 다른 개발자나 개발팀에서도 쉽게 이해할 수 있고, 재사용이 용이하며, 검증된 해결책이므로 안정적이고 효율적인 소프트웨어를 만드는 데 도움을 줍니다.
디자인 패턴은 표준화되고 재사용 가능한 방식으로 이러한 문제를 해결하는 방법으로, 시간과 노력을 절약하고 더 나은 소프트웨어 디자인으로 이어질 수 있습니다.
전반적으로 디자인 패턴은 개발자들에게 강력한 도구가 될 수 있지만, 당면한 문제에 적합할 때에만 신중하게 사용할 필요성이 있습니다. 과도하게 사용하거나, 지나치게 복잡한 코드를 생성하지 않도록 주의해야 합니다.
뿐만 아니라 경우에 따라 디자인 패턴이 너무 경직되어 소프트웨어의 요구 사항에 적응하지 못할 수 있습니다. 이로 인해 소프트웨어의 유연성이 제한되고 나중에 변경하기가 더 어려워질 수 있습니다.
일반적으로 디자인 패턴에는 4가지 요소가 있습니다.
많은 디자인 패턴이 있지만 대표적 알려진 GoF의 23개 디자인 패턴을 위주로 소개하려고 합니다.
GoF의 디자인 패턴은 크게 생성 패턴, 구조 패턴, 행동 패턴으로 구분됩니다.
생성 패턴(Creational Patterns)
구조 패턴(Structural Patterns)
행동 패턴(Behavioral Patterns)
아래는 GoF의 디자인 패턴을 중심으로 정리한 목록입니다.
Creational | Structural | Behavioral |
---|---|---|
추상 팩토리(Abstract Factory) | 어댑터(Adapter) | 책임연쇄(Chain of Responsability) |
빌더(Builder) | 브릿지(Bridge) | 커맨드(Command) |
팩토리 메서드(Factory Method) | 컴포지트(Composite) | 인터프리터(Interpreter) |
프로토타입(Prototype) | 데커레이터(Decorator) | 반복자(iterator) |
싱글톤(Singleton) | 파사드(Facade) | 중재자 패턴(Mediator) |
플라이웨이트(Flyweight) | 메멘토(Memento) | |
프록시(Proxy) | 옵저버(Observer) | |
스테이트(State) | ||
전략(Strategy) | ||
템플릿(Template) | ||
방문자(Visitor) |