본문 바로가기
카테고리 없음

디자인 패턴 정의와 종류에 대하여

by kangs' tong 2023. 10. 30.

디자인 패턴이란?

디자인 패턴은 반복적으로 발생하는 문제에 대한 재사용 가능한 해결책입니다. 소프트웨어 디자인에서 디자인 패턴은 소프트웨어 아키텍처를 구성하는 요소들과 그들 간의 상호작용을 효율적으로 설계하는 방법론입니다. 디자인 패턴은 코드의 재사용성, 유지보수성, 가독성을 높이고 개발자들의 협업을 용이하게 합니다.

생성 패턴

생성 패턴은 객체의 생성과 초기화에 관련된 패턴입니다. 객체를 생성하고 구성하는 방법을 추상화하여, 코드의 유연성과 재사용성을 높이는 기법들을 제공합니다. 주요한 생성 패턴에는 싱글톤 패턴, 팩토리 메서드 패턴, 추상 팩토리 패턴 등이 있습니다.

싱글톤 패턴

싱글톤 패턴은 어플리케이션 전체에서 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 패턴입니다. 이를 통해 오직 하나의 인스턴스만을 통해 전역적으로 접근이 가능하며, 자원의 낭비를 줄일 수 있습니다.

팩토리 메서드 패턴

팩토리 메서드 패턴은 객체 생성을 캡슐화하고, 서브클래스에서 어떤 클래스의 인스턴스를 생성할지를 결정하는 패턴입니다. 이를 통해 객체 생성 코드가 클라이언트 코드로부터 분리되어 유연성을 높일 수 있습니다.

추상 팩토리 패턴

추상 팩토리 패턴은 다양한 관련 객체들의 집합을 생성하기 위한 인터페이스를 제공하는 패턴입니다. 클라이언트 코드는 구현 세부사항을 알지 못해도, 추상 팩토리를 통해 공통된 인터페이스를 통해 객체들을 생성하고 사용할 수 있습니다.

구조 패턴

구조 패턴은 객체들을 더 큰 구조로 합성하는 방법을 다루는 패턴입니다. 여러 개체들의 상호작용을 통해 더 큰 기능을 수행할 수 있게 합니다. 이러한 패턴은 객체들의 조립을 통해 새로운 기능을 구현하는 데 도움을 줍니다. 주요한 구조 패턴에는 어댑터 패턴, 데커레이터 패턴, 컴포지트 패턴 등이 있습니다.

어댑터 패턴

어댑터 패턴은 기존의 인터페이스를 새로운 인터페이스로 변환하는 패턴입니다. 호환되지 않는 인터페이스들을 함께 작동할 수 있도록 중간 계층을 추가하여 상호 연결성을 제공합니다.

데커레이터 패턴

데커레이터 패턴은 객체의 기능을 동적으로 추가하는 패턴입니다. 객체를 감싸는 래퍼 클래스를 통해 기능을 추가하고, 원래 객체에 영향을 주지 않고 확장성을 제공합니다.

컴포지트 패턴

컴포지트 패턴은 객체들을 트리 구조로 구성하여 단일 객체와 복합 객체를 동일하게 다룰 수 있는 패턴입니다. 객체들을 재귀적으로 구성함으로써 계층적인 구조를 표현할 수 있고, 일관된 방식으로 처리할 수 있습니다.

행동 패턴

행동 패턴은 객체들 간의 통신 패턴에 집중하는 패턴입니다. 객체들 사이에 책임을 분산시키거나, 상호작용 방법을 결정하는 방법을 제공합니다. 추가로 추적, 로깅, 비동기 처리 등을 다루기 위한 패턴도 포함될 수 있습니다. 주요한 행동 패턴에는 옵저버 패턴, 스트래티지 패턴, 커맨드 패턴 등이 있습니다.

옵저버 패턴

옵저버 패턴은 객체 사이의 일대다의 의존성을 정의하는 패턴입니다. 한 객체의 상태가 변경되었을 때, 의존하는 다른 객체들은 자동으로 업데이트 될 수 있습니다. 이를 통해 각 객체들 간의 결합도를 낮추고 유연성을 높일 수 있습니다.

스트래티지 패턴

스트래티지 패턴은 서로 다른 알고리즘을 캡슐화하여 동적으로 교환할 수 있게 하는 패턴입니다. 알고리즘을 사용하는 클라이언트 코드와 독립적으로 기능을 제공하므로 코드의 재사용성을 높일 수 있습니다.

커맨드 패턴

커맨드 패턴은 명령을 객체의 형태로 캡슐화하는 패턴입니다. 명령을 캠슐화함으로써 실행할 수 있는 단위를 정의하고, 요청을 직접 수행하지 않고 다른 객체에 위임함으로써 요청과 수행의 결합도를 낮출 수 있습니다.

전체적으로 디자인 패턴은 소프트웨어 아키텍처를 구성하는 요소들과 그들 간의 상호작용을 효율적으로 설계하기 위한 방법론으로, 생성, 구조, 행동 패턴을 통해 문제를 해결합니다. 이를 통해 코드의 재사용성, 유지보수성, 가독성을 높이고 개발자들의 협업을 용이하게 할 수 있습니다.

댓글