37일차 TIL: 디자인 패턴

2024. 5. 10. 17:5599클럽/TIL

728x90
반응형

#1. 오늘의 학습 키워드

디자인 패턴에 대해

  • 전에 아키텍처 패턴에 대해서 공부를 했었다.
    • 이번에는 좀 더 개발과 가까이 있는 패턴인 디자인 패턴에 대해서 알아보자.
      • 디자인 패턴은 아키텍처 패턴보다 하위 수준의 설계로 봐도 된다.
      • 아키텍처 패턴
        • 전체 시스템의 구조를 설계하기 위함
      • 디자인 패턴
        • 서브 시스템에 속하는 컴포넌트들과, 그 사이의 관계를 설계하기 위함

#2. 공부한 내용

1. 디자인 패턴

- 개발하면서 발생하는 반복적인 문제에 대한 해결 방안
  • 디자인 패턴은 객체 지향의 4대 특성과 설계 원칙 (SOLID) 를 기반으로 구현 되어있다.
    • 객체 지향 4대 특성
      • 캡슐화 (encapsulation)
        • 속성과 메서드를 하나로 묶어서 인터페이스로 해당 데이터들로 접근할 수 있게끔 처리
        • 정보 은닉이 가능하고, 재사용 용이, 인터페이스 단순해지는 장점
      • 상속 (inheritance)
        • 상위 클래스의 속성과 메서드를 하위 클래스가 물려받음
        • 재사용 용이
      • 추상화 (abstraction)
        • 인터페이스화
        • 가독성과 재사용성, 모듈간 독립성을 높임
      • 다형성 (polymorphism)
        • 하나의 메시지에 대해 각각의 클래스가 가지고 있는 특성으로 응답할 수 있는 능력
    • SOLID
      • https://second-brain.tistory.com/38
      • SRP
        • 단일 책임 원칙
      • OCP
        • 개방 폐쇄 원칙
      • LSP
        • 리스코프 치환 원칙
      • ISP
        • 인터페이스 분리 원칙
      • DIP
        • 의존 역전 원칙
  • 디자인 패턴은 흔한 개발 과정 속에서의 문제에 대한 해결책 중 모범 사례를 모아둔 것이라고 생각 할 수 있다.
    • 디자인 패턴은 OOP 4대 원칙을 SOLID 를 기반하여 사용해서, 제작된 올바른 가이드라인 정도로 볼 수 있다.

1) GoF

  • 디자인 패턴 중에 유명한 GoF 디자인 패턴들이 있다.
  • 이를 생성, 구조, 행위 패턴으로 분리할 수 있다.
  • 생성
    • 추상 팩토리
      • 한 번에 연관 된 객체 집합을 인터페이스를 통해 생성하는 패턴
    • 빌더
      • 객체를 단순화된 방식으로, 단계적으로 생성
    • 팩토리 메서드
      • 객체 생성 인터페이스를 정의하고, 그 중 어떤 클래스가 인스턴스화 될 지는 서브 클래스가 결정하는 방식
    • 프로토타입
      • 기존 객체를 템플릿으로 사용하여, 기존 객체를 복제하여 새로운 객체 생성하는 패턴
    • 싱글톤 패턴
      • 하나의 클래스 인스턴스를 딱 하나만 생성하여, 전역에서 접근 가능하게끔 보장하는 패턴
  • 구조
    • 어댑터
      • 호환성 없는 클래스를 사용하기 위해 Wrapper를 제공하는 패턴
    • 브릿지
      • 추상화와 구현을 분리하여, 각각 확장할 수 있게끔 하는 패턴
    • 컴포지트
      • 여러 객체를 가진 단일, 복합 객체를 동일하게 다루어, 트리 구조의 객체를 구성하는 패턴
    • 데코레이터
      • 객체의 기능을 동적으로 추가하여, 확장하는 패턴
    • 퍼사드
      • 단순한 인터페이스를 통해 서브 시스템을 쉽게 사용할 수 있도록 하는 패턴
    • 플라이웨이트
      • 객체를 공유함으로써 메모리 사용을 최적화하는 패턴
    • 프록시
      • 다른 객체에 대한 인터페이스(프록시) 를 제공하여, 접근 제어, 지연로딩 등을 구현하는 패턴
  • 행위
    • 책임 연쇄
      • 한 객체가 처리 못 할 시 책임을 다른 객체로 넘기는 패턴
    • 커맨드
      • 요청을 객체로 캡슐화하여, 단순화하는 패턴
    • 인터프리터
      • 언어에 문법 표현을 정의하는 패턴
    • 반복자
      • 동일한 인터페이스를 사용하도록하는 패턴
    • 중재자
      • 객체 간 상호 작용을 캡슐화하여, 객체 간 직접적인 통신을 방지
    • 메멘토
      • 객체의 상태를 저장하여, 해당 시점으로 추후 복원할 수 있는 기능을 제공
    • 옵저버
      • 객체 간 관계를 정의하여, 한 객체의 상태 변경을 다른 객체에게 알릴 수 있게 하는 패턴
    • 상태
      • 객체의 상태를 캡슐화하여, 상태 전환을 관리하고, 상태에 따라 동일한 동작을 다르게 수행할 수 있게 도와주는 패턴
    • 전략
      • 독립적인 알고리즘을 정의하고, 런타임에서 클라이언트의 영향을 받지 않는 방향으로 수행 할 수 있게 해준다.
    • 템플릿 메서드
      • 유사한 하위 클래스들을 묶어서, 상위 클래스에서 정의하는 패턴
    • 방문자
      • 필요할 때마다 객체 구조를 순회하면서, 다양한 연산을 수행할 수 있게 해준다.

728x90
반응형