본문 바로가기
소년의 IT 쉽게 이해하기/개발 쉽게 이해하기

디자인 패턴 쉽게 이야기하기

by Circlezoo 2022. 2. 11.

출처: GDJ on Pixabay

 

 앞서 모듈에 대해서 간단하게 알아봤었는 데 모듈의 세분화된 역할이나 모듈간의 인터페이스와 같은 코드를 작성하는 수준의 세부적인 구현 방안을 설계할 때 참조할 수 있는 전형적인 해결방식인 디자인 패턴에 대해서도 한 번 알아보고자 합니다.

 

Q. 디자인 패턴이란 무엇인가요?

 

 디자인 패턴은 1995년 GoF(Gang of Four)라고 불리는 에릭 감마, 리차드 헬름, 랄프 존슨, 존 블라시디스가 처음으로 구체화하고 체계화한 패턴입니다.

굉장히 유연한 특징을 가지고 있으며 패턴 유형별 분류를 하는 데 생성패턴, 구조 패턴, 행위 패턴 이 3가지로 분류를 합니다.

 

Q. 각 패턴별 정리해줄 수 있을까요?

 

[생성 패턴(Creational Pattern)]

 

 오르지 객체가 만들어지는 것을 이야기하며 객체가 만들어지는 과정 중 참조 과정을 캡슐화하여 객체가 생성되거나 변형되어도 프로그램의 구조에 영향을 받지 않도록하여 프로그램에 유연성을 더 하는 패턴입니다.

 

[생성 패턴 - 종류]

 

1. Abstract Factory (추상 팩토리)

  • 비슷한 속성의 객체들을 인터페이스로 규격화된 팩토리에서 일관된 방식으로 생성하고, 생성된 객체끼리는 쉽게 교체될 수 있도록 고안한 패턴입니다.
  • 추상 팩토리 패턴은 상세화된 서브클래스를 정의하지 않고도 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 제공합니다.

2. Builder (빌더)

  • 작게 분리된 인스턴스를 건축하듯이 조립하여 객체 생성을 하는 방식입니다.
  • 객체의 생성 과정과 표현 방법을 분리하고 있어 동일한 객체 생성에서도 서로 다른 결과를 만들어낼 수 있습니다.

3. Factory Method (팩토리 메소드)

  • 팩토리 인터페이스를 정의하여 이를 서브 클래스가 상속받아 구현하는 형태입니다.
  • 서브 클래스에서 함수를 정의해 실제 생성은 서브클래스가 담당합니다.

4. Prototype (프로토 타입)

  • 생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 하며 인스턴스는 새 객체를 만들기 위해 자신을 복제하게 됩니다.
  • 객체를 복사하여 생성하는 방식이므로 다수의 객체를 생성해야 할 경우 객체 생성 비용을 효과적으로 감소시킬 수 있습니다.

5. Singleton (싱글톤)

  • 오직 한 개의 인스턴스를 생성하고 그 인스턴스를 사용하도록 합니다.
  • 불필요한 낭비를 최소화 할 수 있습니다.

[구조 패턴(Structural Pattern)]

 

 클래스나 객체들을 조합하여 더 큰 구조로 만들 수 있게 해주는 패턴으로 구조가 복잡한 시스템을 개발하기 쉽게 만들어줍니다.

 

[구조 패턴 - 종류]

 

1. Adapter (어뎁터)

  • 서로 간에 호환성이 없어 함께 동작할 수 없는 클래스들이 함께 작동하도록 해줍니다.
  • 기존에 있는 시스템에 새로운 인터페이스가 필요할 경우 사용되기도 합니다.

2. Bridge (브릿지)

  • 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴입니다.
  • 추상적 개념과 구체적 구현을 서로 다른 두개의 인터페이스로 구현합니다. (필요할 경우 서로 연결)

3. Composite (합성)

  • 객체들의 관계를 트리 구조로 구성하여 여러 개의 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별없이 다루게 합니다.
  • Directory 관계를 갖는 객체들 사이에 관계를 정의할 때 유용합니다.

4. Decorator (데코레이터)

  • 객체간에 결합을 통해 능동적으로 기능을 확장할 수 있는 패턴입니다.
  • 객체에 부가적인 기능을 추가하기 위해 다른 객체를 덧붙이는 방식으로 구현됩니다.

5. Facade (퍼싸드)

  • 복잡한 서브 클래스들을 피해 더 상위에 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있도록 하는 패턴입니다.
  • 서브 클래스들 사이에 통합 인터페이스를 제공할 수 있는 객체가 필요합니다.

6. Flyweight (플라이웨이트)

  • 어떤 클래스의 인스턴스 한 개만 가지고 여러 개의 "가상 인스턴스"를 제공하고 싶을 때 사용하는 패턴입니다.
  • 생성된 객체 수를 줄이고 메모리 사용 공간을 줄이며 성능을 향상시키는 데 사용됩니다.

7. Proxy (프록시)

  • 접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터페이스 역할을 수행하는 패턴입니다.
  • 네트워크 연결, 메모리 대용량 객체의 접근에 주로 이용됩니다.

[행위 패턴(Behavioral Pattern)]

 

 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴입니다.

 

[행위 패턴 - 종류]

 

1. Chain of responsibility (책임 연쇄)

: 책임들이 연결되어 있어 내가 책임을 못 질것 같으면 다음 책임자에게 자동으로 넘어가는 패턴입니다.

 

2. Command (커맨드)

: 명령어를 각각 구현하는 것보다는 하나의 추상 클래스에 메서드를 하나 만들고 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행합니다.

 

3. Interpreter (인터프리터)

: 언어의 문법 표현에 정의하는 패턴입니다.

 

4. Iterator (반복자)

: 자료 구조와 같이 접근이 잦은 객체에 대해서 동일한 인터페이스를 사용하도록 해줍니다.

 

5. Observer (옵저버)

: 어떤 클래스에 변화가 일어났을 때, 이를 감지하여 다른 클래스에 통보해줍니다.

 

6. Strategy (전략)

: 동일한 알고리즘들을 개별적으로 캡슐화시켜서 서로 상호교환할 수 있도록 해줍니다.

 

7. Template Method (템플릿 메서드)

: 상위 클래스에서는 추상적으로 표현하고 구체적인 내용은 하위 클래스에서 결정됩니다.

 

8. Visitor (방문자)

: 처리 내용을 따로 클래스로 만들어 놓고 각각의 작업 내용에 대해서는 만들어진 클래스에 방문합니다.

 

9. Mediator (중재자)

: 수 많은 객체들 간에 복잡한 상호작용을 캡슐화해서 객체로 정의합니다.

 

10. State (상태)

: 동일한 동작을 객체의 상태에 따라 다르게 처리해야합니다.

 

11. Memento (기념품)

: 특정 시점에서 객체 내부의 상태를 객체화 함으로 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공합니다.

 

 

 

 

 

참고: https://velog.io/@ha0kim/Design-Pattern-%EC%83%9D%EC%84%B1-%ED%8C%A8%ED%84%B4Creational-Patterns

 

Design Pattern : 생성 패턴(Creational Patterns)

생성패턴은 객체의 생성방식을 결정하는 패턴으로 객체의 생성절차를 추상화하는 패턴이다.객체를 생성-합성하는 방법 / 객체의 표현방법과 시스템을 분리한다.생성패턴은 시스템이 어떤 구체

velog.io

 

반응형

댓글