[Design Pattern] 디자인 패턴의 정의와 종류

Wonjun Seo·2023년 9월 7일
1

디자인 패턴

디자인 패턴(Design Pattern)은 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 특정 규약을 만들어서 정리한 패턴입니다.

사용 이유

개발의 효율성유지보수성, 운용성이 높아지며 프로그램의 최적화에 도움이 된다.


디자인 패턴 유형

디자인 패턴의 유형은 목적과 범위에 따라 나눠질 수 있습니다.

목적

  • 생성(Creational): 객체의 생성 방식을 결정하는 패턴
  • 구조(Structural): 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴
  • 행위(Behavioral): 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴

범위

  • 클래스: 클래스 간 관련성(상속 관계를 다루는 패턴)
  • 객체: 객체 간 관련성을 다루는 패턴

디자인 패턴 종류

생성 패턴

생성 패턴은 객체의 생성과 관련된 디자인 패턴으로 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다.

  • 빌더 패턴(Builder): 복잡한 인스턴스를 조립하여 만드는 구조로 복합 객체를 생성할 때 객체를 생성하는 방법(과정)과 객체를 구현(표현)하는 방법을 분리함으로써 동일한 생성 절차에서 다양한 표현 결과를 만들 수 있는 디자인 패턴

  • 원형 패턴(Prototype): 생성할 객체의 종류를 명시하는 데 원형이 되는 예시물을 사용하고 새로운 객체를 이 원형들을 복사함으로써 필요한 부분만 수정하여 사용하는 디자인 패턴

  • 싱글톤 패턴(Singleton): 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴

  • 추상팩토리 패턴(Abstract Factory): 구체적인 클래스를 지정하지 않고 관련성이 있거나 독립적인 객체들을 생성하기 위한 인터페이스를 제공하는 디자인 패턴

  • 팩토리 메서드 패턴(Factory Method): 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 디자인 패턴


구조 패턴

구조 패턴은 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴이다. 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 서로 다른 객체들을 묶어 새로운 기능을 제공하는 패턴이다.

  • 적응자 패턴(Adapter): 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해주는 디자인 패턴

  • 브리지 패턴(Bridge): 기능의 클래스 계층과 구현의 클래스 계층을 연결하고, 구현부에서 추상 계층을 분리하여 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있는 디자인 패턴

  • 데코레이터 패턴(Decorator): 기존에 구현되어 있는 클래스에 필요한 기능을 추가해 나가는 설계 패턴으로 기능 확장이 필요할 때 객체 간의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 해주어 상속의 대안으로 사용되는 디자인 패턴

  • 프록시 패턴(Proxy): 어떤 다른 객체로 접근하는 것을 통제하기 위해 그 객체의 매니저 또는 자리 채움자를 제공하는 디자인 패턴

  • 퍼사드 패턴(Facade): 복잡한 시스템에 대하여 단순한 통합된 인터페이스를 제공함으로써 사용자의 시스템 간 또는 여타 시스템과의 결합도를 낮추어 시스템 구조에 대한 파악을 쉽게 하는 디자인 패턴


행위 패턴

행위 패턴은 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴이다. 한 객체가 혼자 수행할 수 없는 작업을 여러개의 객체로 어떻게 분배하는지, 또 그러면서 객체 사이의 결합도를 최소화 하는 것에 중점을 두는 방식이다.

  • 상태 패턴(State): 객체의 내부 상태가 변경될 때 행위 내용이 변경되는 패턴으로, 객체는 자신의 클래스가 변경되는 것처럼 보이게 된다.

  • 옵저버 패턴(Observer): 객체들 사이에 1 : N 의존관계를 정의하여 어떤 객체의 상태가 변할 때, 의존관계에 있는 모든 객체들에 연락이 가고 내용이 자동적으로 갱신될 수 있게 만드는 디자인 패턴

  • 템플릿 메서드 패턴(Template Method): 상위 클래스에는 추상메서드를 통해 기능의 골격을 제공하고, 하위 클래스의 메서드에서 세부 처리를 구체화하는 방식으로 코드 양을 줄이고 유지보수를 용이하게 만드는 디자인 패턴

  • 비지터 패턴(Visitor): 각 클래스 데이터 구조로부터 처리 기능을 분리하여 별도의 클래스를 만들어 놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴으로, 객체의 구조는 변경하지 않으면서 기능만 따로 추가하거나 확장할 때 사용하는 디자인 패턴

  • 미디에이터 패턴(Mediator): 한 집합에 속해있는 객체들의 상호 작용을 캡슐화하는 객체를 정의하는 패턴입니다. 중재자는 객체들이 직접 서로 참조하지 않도록 함으로써 객체들간의 느슨한 연결을 촉진시키며 객체들의 상호작용을 독립적으로 다양화 시킬 수 있도록 합니다.

  • 이터레이터 패턴(Iterator): 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 방법을 제공하는 디자인 패턴

  • 스트레이트지 패턴(Strategy): 동일 계열의 알고리즘을 정의하고, 각각 캡슐화하여 이들을 상호작용 가능하도록 만드는 것이다. 알고리즘을 사용하는 사용자로부터 독립적으로 알고리즘이 변경될 수 있도록 하는 디자인 패턴

0개의 댓글