JS와 React에서의 디자인 패턴을 다루기 앞서, 자바스크립트 + 리액트 디자인 패턴을 읽고,
디자인 패턴에 대한 개념. 그 중 5장을 정리해보려 한다.
디자인 패턴의 유형에는 뭐가 있을까?
배경
디자인 패턴은 소프트웨어 개발에서 자주 발생하는 문제들을 해결하기 위한 검증된 해결책이다.
GoF(Gang of Four)의 디자인 패턴은 객체지향 설계에서 공통적으로 발생하는 문제들을 효과적으로 해결하는 방법을 제시한다.
디자인 패턴은 코드의 재사용성을 높이고, 유지보수를 용이하게 하며, 확장성 있는 설계를 가능하게 한다.
특히 객체 지향 프로그래밍에서 중요한 역할을 하며, 개발자들 간의 의사소통을 원활하게 하는 공통된 어휘를 제공한다.
생성 패턴
생성 패턴(Creational Pattern)은 객체의 생성과 관련된 패턴이다.
이 패턴들은 시스템이 어떤 구체적인 클래스를 사용하는지에 대한 정보를 캡슐화하고, 객체의 생성과 구성을 유연하게 만든다.
주요 목적
- 객체 생성 과정의 유연성 확보
- 코드의 재사용성 증가
- 객체 생성 로직의 캡슐화
구조 패턴
구조 패턴(Structural Pattern)은 클래스와 객체를 더 큰 구조로 조합하는 방법을 제공한다.
이 패턴들은 서로 다른 인터페이스를 가진 클래스들을 함께 동작하게 만들거나, 기능을 조합하여 새로운 기능을 만들 수 있게 한다.
주요 목적
- 클래스와 객체의 조합을 통한 더 큰 구조 형성
- 서로 다른 인터페이스의 통합
- 시스템 구조의 유연성 향상
행위 패턴
행위 패턴(Behavioral Pattern)은 객체 간의 상호작용과 책임 분배에 관한 패턴이다.
이 패턴들은 객체 간의 통신 방법을 정의하고, 복잡한 제어 흐름을 관리하는 방법을 제공한다.
주요 목적
- 객체 간 통신 방법 정의
- 알고리즘과 책임의 분배
- 객체 간의 결합도 감소
분류
패턴 유형 | 패턴 이름 | 객체 생성 기반 개념 | 특징 |
---|---|---|---|
생성 패턴 | 팩토리 메서드 | 인터페이스를 기반으로 여러 파생 클래스를 생성 | 객체 생성을 위한 인터페이스 정의, 실제 생성은 하위 클래스에서 담당 |
생성 패턴 | 추상 팩토리 | 구체적인 내부 구현 없이 여러 클래스가 상속받아 사용하는 인스턴스 생성 | 관련된 객체들의 가족을 생성하기 위한 인터페이스 제공 |
생성 패턴 | 빌더 | 객체를 생성하는 부분과 내부 구현을 분리 | 복잡한 객체의 생성 과정을 단계별로 구분하여 구축 |
생성 패턴 | 프로토타입 | 복사 또는 복제에 사용되는 초기화된 인스턴스 | 기존 객체를 복제하여 새로운 객체 생성 |
생성 패턴 | 싱글톤 | 전역에서 접근 가능한 하나의 인스턴스를 가진 클래스 | 클래스의 인스턴스가 하나만 생성됨을 보장 |
구조 패턴 | 어댑터 | 호환되지 않는 인터페이스가 상호작용하도록 클래스를 매치 | 서로 다른 인터페이스 간의 호환성 제공 |
구조 패턴 | 브리지 | 객체의 인터페이스와 구현을 분리하여 독립적으로 구성 | 추상화와 구현의 분리를 통한 독립적 확장 가능 |
구조 패턴 | 데코레이터 | 객체에 새로운 프로세스를 동적으로 추가 | 기존 객체에 동적으로 새로운 책임 추가 |
구조 패턴 | 퍼사드 | 전체 시스템의 복잡한 부분을 숨기는 단일 클래스 | 복잡한 시스템에 대한 단순화된 인터페이스 제공 |
구조 패턴 | 플라이웨이트 | 여러 객체에 공통 상태를 공유하는 세분화된 인스턴스 | 많은 수의 유사한 객체를 효율적으로 관리 |
구조 패턴 | 프록시 | 실제 객체를 대신하는 대체 객체 | 다른 객체에 대한 접근을 제어하는 대리자 역할 |
행위 패턴 | 책임 연쇄 | 요청을 처리할 수 있는 객체를 찾기 위해 체인 간에 요청을 전달 | 요청의 발신자와 수신자를 분리하여 유연성 제공 |
행위 패턴 | 커맨드 | 호출 부분과 실행 부분을 나누는 방법 | 요청을 객체로 캡슐화하여 매개변수화 |
행위 패턴 | 이터레이터 | 내부 구조를 모든 채 순서에 순차적으로 접근 | 컬렉션의 내부 구조를 노출하지 않고 순회 가능 |
행위 패턴 | 중재자 | 클래스가 서로를 직접적으로 참조하지 않도록 중간에 간소화된 커뮤니케이션을 정의 | 객체 간의 복잡한 상호작용을 캡슐화 |
행위 패턴 | 옵저버 | 클래스 간의 일관성을 보장하기 위해 여러 클래스에 변경사항을 알리는 방법 | 객체 간의 일대다 의존관계를 정의 |
행위 패턴 | 상태 | 상태가 변경되면 객체의 행위도 변경 | 객체의 내부 상태에 따라 행위를 변경 |
행위 패턴 | 전략 | 클래스 내부의 알고리즘 구현을 캡슐화하여 상황에 따라 전략과 구현을 분리 | 알고리즘 군을 정의하고 캡슐화하여 교체 가능 |
행위 패턴 | 방문자 | 클래스를 변경하지 않고도 새로운 작업을 추가 | 기존 클래스 구조를 변경하지 않고 새로운 동작 추가 |
각 패턴들은 특정 문제 상황에 대한 검증된 해결책을 제공하며, 상황에 따라 여러 패턴을 조합하여 사용할 수 있다.
이러한 패턴들을 적절히 활용하면 더 유지보수하기 쉽고, 확장 가능한 소프트웨어를 설계할 수 있다.
자세한 각 패턴에 대한 소개 및 예시는 다음 글에서 작성할 예정이다.