간단이론정리

[OOP] 디자인 패턴(Design Pattern) 정리

눕고싶은사람 2024. 6. 20. 18:07

디자인 패턴은 프로그램을 개발하는 과정에서 빈번하게 발생하는 문제를 정리해서 상황에 따라 간편하게 적용할 수 있게 정리한 것이다. 디자인 패턴은 객체 지향 4대 특성(캡슐화, 상속, 추상화, 다형성)과 5대 원칙(SOLID) 을 기반으로 구현되어 있다.

 

2024.06.20 - [간단이론정리] - [OOP] 객체 지향 4대 특징 및 객체 지향 5대 원칙(SOLID)


디자인 패턴의 요소

  • 패턴 이름 (Name): 각 패턴은 특정한 문제 해결 방법을 설명하는 고유한 이름을 가진다. 이 이름은 커뮤니케이션을 쉽게 하고, 개념을 명확히 한다.
  • 문제 (Problem): 패턴이 해결하려는 특정 상황 또는 문제를 설명한다.
  • 해결책 (Solution): 문제를 해결하기 위한 설계나 전략을 제시한다. 이는 구체적인 코드가 아닌 추상적인 설명으로, 다양한 상황에 적용될 수 있다.
  • 결과 (Result): 패턴 사용의 결과로, 이점 및 잠재적인 단점을 포함한다.

디자인 패턴의 장점

  • 재사용성 : 반복적인 문제에 대한 일반적인 해결책을 제공하므로, 이를 재사용하여 유사한 상황에서 코드를 더 쉽게 작성할 수 있다.
  • 가독성 : 일정한 구조로 정리하고 명확하게 작성하여 개발자가 코드를 이해하고 유지보수하기 쉽게 만든다.
  • 유지보수성 : 코드를 쉽게 모듈화 할 수 있으며, 변경이 필요한 경우 해당 모듈만 수정하여 유지보수가 쉬워진다.
  • 확장성 : 새로운 기능을 추가하거나 변경할 때 디자인 패턴을 활용하여 기존 코드를 변경하지 않고도 새로운 기능을 통합할 수 있다.
  • 안정성과 신뢰성 : 수많은 사람들이 인정한 모범 사례로 검증된 솔루션을 제공한다.

 

디자인 패턴 적용 시 주의 점

  • 유연성과 확장성 : 선택한 패턴이 시스템의 유연성과 확장성을 향상시키는지 평가한다.
  • 성능 고려 : 일부 패턴은 추가적인 추상화 레벨을 도입함으로써 시스템의 성능에 영향을 줄 수 있다. 성능 요구사항을 고려하여 패턴을 적용해야 한다.
  • 복잡성 관리 : 패턴은 문제 해결의 명확성을 제공하지만, 때로는 시스템의 복잡성을 증가시킬 수도 있다. 필요 이상의 패턴 사용을 피하고, 가독성과 유지보수를 고려해야 한다.

디자인 패턴의 종류

  • 생성 패턴(Creational Pattern) :우리가 객체를 생성할 때와 관련된 문제에 대한 해결책을 다룬다.
  • 구조적 패턴(Structural Pattern) : 클래스와 객체를 조합하여 더 큰 구조를 형성하는 방법에 관한 패턴 정리.
  • 행동 패턴(Behavioral Pattern) : 객체들 사이의 통신과 책임의 분배에 초점을 맞춰 복잡한 흐름 제어를 간소화하고, 객체 간의 상호작용을 더 효과적으로 만듬.

 

1. 생성 패턴 (Creational Pattern)

  • 싱글톤(Singleton) : 하나의 클래스 인스턴스를 전역에서 접근 가능하게 하면서 해당 인스턴스가 한 번만 생성되도록 보장하는 패턴이다.
  • 팩토리 메서드(Factory Method) : 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴.
  • 추상 팩토리(Abstract Factory) : 관련된 객체들의 집합을 생성하는 인터페이스를 제공하며, 구체적인 팩토리 클래스를 통해 객체 생성을 추상화하는 패턴이다.
  • 빌더(Builder) : 복잡한 객체의 생성 과정을 단순화하고, 객체를 단계적으로 생성하며 구성하는 패턴이다.
  • 프로토타입(Prototype) : 객체를 복제하여 새로운 객체를 생성하는 패턴으로, 기존 객체를 템플릿으로 사용하는 패턴이다.

 

2. 구조적 패턴 (Structural Pattern)

  • 어댑터(Adapter)호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 하는 구조적 디자인 패턴.
  • 브릿지(Bridge) : 큰 클래스 또는 밀접하게 관련된 클래스들의 집합을 두 개의 개별 계층구조​(추상화 및 구현)​로 나눈 후 각각 독립적으로 개발할 수 있도록 하는 패턴.
  • 컴포지트(Comfosite) : 개별 객체와 복합 객체를 동일하게 다루어, 트리 구조의 객체를 구성하는 패턴이다.
  • 데코레이터(Decorator) : 객체들을 새로운 행동들을 포함한 특수 래퍼 객체들 내에 넣어서 위 행동들을 해당 객체들에 연결시키는 구조적 디자인 패턴.
  • 퍼사드(Facade) : 서브시스템을 더 쉽게 사용할 수 있도록 단순한 인터페이스를 제공하는 패턴이다.
  • 플라이웨이트(Flyweight) : 공유 가능한 객체를 통해 메모리 사용을 최적화하는 패턴이다.
  • 프록시(Froxy) : 다른 객체에 대한 대리자(Proxy)를 제공하여 접근 제어, 지연 로딩 등을 구현하는 패턴이다.

 

3. 행동 패턴 (Behavioral Pattern)

  • 책임 연쇄(Chain of Responsibility) : 핸들러들의 체인을 따라 요청을 전달할 수 있게 해주는 패턴.
  • 커맨드(Command) : 요청을 객체로 캡슐화하여, 사용자 정의 요청에 따라 매개변수화할 수 있다.
  • 인터프리터(Interpreter) : 주어진 언어의 문법에 대한 표현을 정의하고, 해당 언어로 표현된 문제를 해결.
  • 이터레이터(Iterator) : 컬렉션 내의 요소를 순차적으로 접근하는 방법을 제공한다.
  • 중재자(Mediator) : 객체 간의 혼란스러운 의존 관계들을 줄일 수 있는 행동 디자인 패턴.
  • 메멘토(Memento) : 객체의 구현 세부 사항을 공개하지 않으면서 해당 객체의 이전 상태를 저장하고 복원할 수 있게 한다.
  • 옵저버(Observer) : 객체의 상태 변화를 관찰하고, 이에 따라 다른 객체들이 반응할 수 있도록 한다.
  • 상태(State) : 객체의 내부 상태에 따라 객체의 행동을 변경한다.
  • 전략(Strategy) : 알고리즘들의 패밀리를 정의하고, 각 패밀리를 별도의 클래스에 넣은 후 그들의 객체들을 상호교환할 수 있도록 한다.
  • 템플릿 메소드(Template Method) : 부모 클래스에서 알고리즘의 골격을 정의하지만, 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계들을 오버라이드​(재정의)​할 수 있도록 한다.
  • 방문자(Visitor) : 알고리즘들을 그들이 작동하는 객체들로부터 분리할 수 있도록 한다.

당연한 말이지만 디자인 패턴은 효율적인 시스템 설계와 구현을 돕지만, 적절하게 상황에 맞게 사용하는 것이 이롭다.

 

 


참고 및 출처

https://oobwrite.com/entry/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4Design-Pattern-%EC%B4%9D%EC%A0%95%EB%A6%AC-23%EA%B0%80%EC%A7%80-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EC%A0%95%EC%9D%98-%EC%A2%85%EB%A5%98-%EC%9E%A5%EB%8B%A8%EC%A0%90#toc2

 

디자인 패턴(Design Pattern) 총정리: 23가지 디자인 패턴 정의, 종류, 장단점

디자인 패턴은 프로그램을 개발하는 과정에서 빈번하게 발생하는 문제를 정리해서 상황에 따라 간편하게 적용할 수 있게 정리한 것입니다. 패턴을 익히고 적용함으로써, 초보 개발자도 광범위

oobwrite.com

https://ittrue.tistory.com/550

 

[OOP] 디자인 패턴(Design Pattern)이란? - 장점 및 종류

디자인 패턴(Design Pattern)이란? 디자인 패턴은 개발하면서 발생하는 반복적인 문제들을 어떻게 해결할 것인지에 대한 해결 방안으로 실제 현업에서 비즈니스 요구 사항을 프로그래밍으로 처리하

ittrue.tistory.com

https://refactoring.guru/ko/design-patterns

 

디자인 패턴들

 

refactoring.guru