본문 바로가기
CS/SW공학

[SW공학] 디자인 패턴: 생성, 구조, 행위 패턴의 종류

by jangThang 2023. 4. 28.
반응형

 디자인 패턴은 개발자들이 객체지향 프로그래밍에서 자주 쓰는 코드 모음입니다. 이러한 종류에는 크게 생성 패턴, 구조 패턴, 행위패턴이 있습니다. 종류별로 어떤 디자인 패턴이 있는지 알아보겠습니다.

 

[ Contents ]

     

     

    1. 디자인 패턴 (Design Pattern)

    객체 지향 프로그래밍에서 각 유형별로 가장 적합한 설계를 일반화하여 체계화한 패턴 

     

     객체 지향 프로그래밍에서 자주 발생한 문제들을 회피하고, 성능 및 개발 편의성을 높이기 위한 족보입니다. 베이스 코드라고 볼 수 있죠.

     이미 수많은 개발자들이 수많은 프로그램을 개발했고, 그들의 프로그래밍에는 일련의 공통점이 있습니다. 자주 사용하는 솔루션이 생기기 시작했고, 그러한 것들이 모여 '디자인 패턴'이 되었습니다.

     

     

     

    2. 생성 패턴 (객체 생성)

    - Factory Method: 생성자 대신 대행 함수를 통해 객체 생성
    - Abstract Factory: 관련있는 객체들을 묶어서 생성
    - Singleton: 전역 접근이 가능한 클래스 인스턴스 1개만 생성
    - Prototype: 원본(Prototype) 복사하여 생성
    - Builder: 내부 클래스를 통한 간접적인 객체 생성

     

     생성 패턴은 '객체(인스턴스)를 생성'하는 기능과 관련이 있는 디자인 패턴입니다. '팩토리 메서드'와 '싱글톤'은 꽤나 사용되는 패턴으로, 알아두시면 좋습니다.

     팩토리 메서드는 생성자 대신에 따로 객체를 생성하는 함수를 만드는 방식입니다. 생성자 제약에서 벗어나서 객체를 생성할 수 있게 됩니다. 특히 추상 팩토리와 같은 경우에는, 연관된 객체들을 한꺼번에 묶어서 생성하는 방식입니다.

     반면 싱글톤은 전역 클래스 인스턴스 1개만 생성하는 방식으로, 불필요한 메모리 낭비를 최소화합니다. 사실 특정 연산에만 쓰는 객체의 경우, 1개만 있어도 충분하므로 싱글톤으로 구성하는 경우가 꽤 있습니다.

     


     

     

    3. 구조 패턴 (구조 개선)

    - Adapter: 사용자가 기대하는 인터페이스로 전환
    - Facade: 간략한 통합 인터페이스 제공
    - Bridge: 인터페이스(추상)와 구현의 명확한 분리 [독립 개발]
    - Composite: 객체 간 관계를 트리구조로 부분-전체 계층을 표현 [단일/복합객체 동일취급]
    - Decorator: 상황, 용도에 따라 객체의 기능을 추가/삭제 [wrapper 활용]
    - Flyweight: 동일/유사한 객체 공유 [메모리 최적화]
    - Proxy: 대체(대리자) 객체를 통한 작업 처리

     

     클래스, 객체들간의 관계나 인터페이스를 개선하거나, 결합하여 더 큰 구조를 만드는 패턴입니다.

     생성과 달리, 전체 구조를 담당하는 패턴이다보니 딱 들어맞는 경우가 잘 없긴 합니다. 하지만 데코레이터 패턴에 쓰인 Wrapper는 잘 쓰이는 편이죠..

     


     

     

    4. 행위 패턴 (행위 개선)

    - Interpreter: 간단한 문법적 규칙을 클래스화하여 검증
    - Template Method: 상위 클래스(템플릿), 하위 클래스(상세내용 정의) [overriding]
    - Command: 요청을 객체로 캡슐화, 추후 요청을 이용 가능하도록 처리
    - Iterator: 컬렉션 내 여러 자료형의 객체들을 순차 접근
    - Mediator: 모든 클래스간 상호작용을 캡슐화하여 하나의 클래스에 위임 [M:1 관계로 단순화]
    - Memento: 객체의 이전 상태 보관 [복원 가능]
    - Observer: 여러 객체에 영향을 끼치는 한 객체를 관찰 [One source Multiple use]
    - State: 각 상태별 클래스 만든 후, 상태전이 로직을 구현 [객체 상태 변경 용이]
    - Strategy: 실행 중에 여러 알고리즘 중 선택해서 적용
    - Visitor: 데이터 구조와 연산을 분리하여, 구조를 변경하지 않고 새로운 연산 추가 가능
    - Chain of Responsibility: 수행할 수 있을만한 객체까지 요청 전파

     

     클래스나 객체들이 서로 상호작용하는 방법으로, 주로 여러 객체로 분리해서 결합도를 낮추는 방식을 채택합니다.

     행위 패턴은 꽤 쓰이며, 옵저버와 템플릿 메서드는 여러 분야에 잘 맞습니다. 템플릿 메서드는 애초에 오버라이딩에 가깝고, 옵저버 패턴은 MVC 아키텍처와 같이 여러 뷰(UI)를 가진 소프트웨어에 알맞습니다.

     

     

    star가 되고나서 Tistory

    반응형

    댓글