디자인 패턴이란?
디자인 패턴은 소프트웨어 기술 면접에 자주 나오는 질문 중 하나입니다. 보통 기술면접에서 특정 상황을 물어본다음에 어떤 디자인 패턴을 사용하면 좋을까요? 이런 식으로 질문을 하거나 싱글턴 패턴이 뭔가요?처럼 특정 디자인 패턴을 물어보는 경우가 많습니다. 디자인 모든 디자인 패턴을 완벽하게 숙지하지 못하더라도 특정 상황에서 자주 쓰이는 디자인 패턴의 종류와 역할을 알면 면접에서 좋은 답변을 할 수 있습니다. 그럼 디자인 패턴에 대한 포스팅을 시작하겠습니다.
누군가는 이미 제가 가진 어려움을 경험했을 것입니다. 그리고 그 누군가는 제가 가진 어려운 경험을 이미 해결했을 것입니다. 우리는 그 문제를 해결했던 다른 개발자들의 지혜와 교훈을 배우고 익혀야 합니다.
즉, 소프트웨어 공학에서 디자인 패턴이란 프로그램을 개발하는 과정에서 빈번하게 발생하는 애로사항이나 디자인 상의 문제를 정리해서 상황에 따라 간편하게 적용해서 쓸 수 있는 패턴 형태로 만든 것입니다. 디자인 패턴을 잘 활용하면 단지 코드의 재사용뿐만 아니라, 더 큰 그림을 그리기 위한 디자인으로 재사용할 수 있습니다.
패턴이란 특정 컨텍스트 내에서 주어진 문제에 대한 해결책이다.
컨텍스트(context) : 패턴이 적용되는 상황. 반복적으로 일어날 수 있는 상황.
문제(problem) : 컨텍스트 내에서 이루고자 하는 목적
해결책(solution) : 누구든지 적용해서 일련의 제약조건 내에서 목적을 달성할 수 있는 일반적인 디자인을 의미
디자인 패턴 종류
1. 생성 관련 패턴(Creational Patterns) : 객체 인스턴트 생성을 위한 패턴으로 클라이언트와 그 클라이언트에서 생성해야 할 객체 인스턴스 사이의 연결을 끊어주는 패턴.
- 빌더(Builder)
- 싱글턴(Singleton)
- 팩토리 메소드(Factory Methods)
- 프로토타입(Prototype)
- 추상 팩토리 메소드(Abstract Factory Methods)
2. 구조 관련 패턴 (Structural Patterns) : 클래스 및 객체들의 구성을 통해 더 큰 구조로 만들 수 있게 해주는 패턴.
- 데코레이터(Decorator)
- 플라이웨이트(Flyweight)
- 컴포지트(Composite)
- 어댑터(Adapter)
- 브리지(Bridge)
- 퍼사드(Facade)
- 프록시(Proxy)
3. 행동 관련 패턴 (Structural Patterns) : 클래스와 객체들의 상호작용하는 방법 및 역할을 분담하는 방법에 관련된 패턴.
- 템플릿 메소드(Template Method)
- 인터프리터(Interpreter)
- 역할 사슬(Chain of Responsibility)
- 커맨드(Command)
- 비지터(Visitor)
- 미디에이터(Mediator)
- 이터레이터(Iterator)
- 메멘토(Memento)
- 옵저버(Observer)
- 스테이트(State)
- 스트래티지(Strategy)
클래스와 객체에 따른 패턴 분류 방법
1. 클래스 패턴 (Class Patterns) : 클래스 사이의 관계를 상속을 통해 정의. 클래스 패턴은 컴파일 시에 관계가 결정됨.
- 템플릿 메소드(Template Method)
- 팩토리 메소드 (Factory Methods)
- 어댑터(Adapter)
- 인터프리터(Interpreter)
2. 객체 패턴 (Object Patterns) : 객체 사이의 관계를 다루며, 객체 사이의 관계는 보통 구성을 통해 정의됨. 객체 패턴에서 일반적으로 실행 중에 관계가 생성되기 때문에 더 동적이고 유연함.
- 컴포지트(Composite)
- 데코레이터(Decorator)
- 프록시(Proxy)
- 스트래티지(Strategy)
- 브리지(Bridge)
- 플라이웨이트(Flyweight)
- 추상 팩토리 메소드 (Abstract Factory Methods)
- 퍼사드(Facade)
- 역할 사슬(Chain of Responsibility)
- 미디에이터(Mediator)
- 비지터(Visitor)
- 커맨드(Command)
- 프로토타입(Prototype)
- 싱글턴(Singleton)
- 이터레이터(Iterator)
- 메멘토(Memento)
- 옵저버(Observer)
- 스테이트(State)
- 빌더(Builder)
마무리
마지막으로 오늘은 디자인 패턴이 무엇인지와 디자인 패턴의 종류에 대해 알아봤습니다. 디자인 패턴을 정리하다 보니 설명도 없이 종류에 대해 길게 적어 놨는데... 다음 시간부터는 자주 쓰이는 디자인 패턴에 대해 자세히 탐구하는 시간을 가져 보겠습니다.