오브젝트 - 15 디자인 패턴과 프레임워크

yshjft·2023년 7월 1일
0

오브젝트

목록 보기
15/18
  • 디자인 패턴
    • 소프트웨어 설계에서 반복적으로 발생하는 무제에 대해 반복적으로 적용할 수 있는 해결방법
    • 협력을 일관성 있게 만들기 위해 재사용할 수 있는 설계의 묶음
  • 프레임워크
    • 설계와 코드를 함께 재사용하기 위한 것
    • 일관성 있는 협력을 제공하는 확장 가능한 코드

01 디자인 패턴과 설계 재사용

소프트웨어 패턴

  • 패턴의 핵심적인 특징
    • 패턴은 반복적으로 발생하는 문제와 해법의 쌍으로 정의된다.
    • 패턴을 이용하여 이미 알려진 문제와 이에 대한 해법을 문서로 정리할 수 있으며, 이 지식을 다른 사람과 의사소통하는데 사용할 수 있다.
    • 패턴은 추상적인 원칙과 실제 코드 작성 상이의 간극을 메워주며 실질적인 코드 작성을 돕는다.
    • 패턴의 요점은 실무에서 탄생했다는 점이다.
  • 경험을 통해 축적된 실무 지식을 효괒거으로 요약하고 전달할 수 있다는 것이 패턴이 지닌 가장 큰 가치이다.
  • 패턴은 커뮤니케이션 수단으로 활용될 수 있다.
  • 패턴은 홀로 존재하지 않는다.
    • 패턴 언어
      • 연관된 패턴들의 집합들이 모여 구성한 것
      • 패턴의 생성 규칙, 패턴 언어에 속한 다른 패턴과의 관계 및 협력 규칙을 포함

패턴 분류

  • 디자인 패턴
    • 중간 규모의 패턴
    • 특정한 설계 문제를 해결하는 것을 목적
  • 아키텍처 패턴
    • 디자인 패턴 상위 개념
    • 소프트웨어 전체적인 구조를 결저ㅇ
  • 이디엄
    • 디자인 패턴 하위 개념
    • 특정 프로그래밍 언어에만 국한된 하위 레밸 패턴
  • 분석 패턴
    • 업무 모델링 시에 발견되는 공통적인 구조를 표현하는 개념들의 집합

패턴과 책임-주도 설계

  • 객체지향 설계에서 가장 중요한 일
    • 책임을 올바른 객체에게 할당하고 객체 간의 유연한 협력 관계를 구축하는 일
  • STRATEGY, BRIDGE, OBSERVER, COMPOSITE
  • 디자인 패턴의 구성요소는 역할과 책임이다.
  • "디자인 패턴을 따른다"의 의미
    • 역할, 책임, 협력의 관점에서 유사성을 공유한다는 의미
    • 특정한 구현 방식을 강제한다는 것이 아니다.

캡슐화와 디자인 패턴

  • STRATEGY, TEMPLATE METHOD, DECORATOR
  • 어떤 디자인 패턴이 어떤 변경을 캡슐화하는지 이해하는 것이 중요

패턴은 출발점이다.

  • 패턴이 설계의 목적이 돼서는 안된다.
    • 컨텍스트의 적절성은 무시한 채 패턴의 구조에만 초점을 맞춰서는 안된다.
    • 이는 불필요하게 복잡하고, 난해하며, 유지보수하기 어려운 시스템을 낳는다.

02 프레임워크와 코드 재사용

코드 재사용 대 설계 재사용

  • 디자인 패턴
    • 프로그래밍 언어 독립적으로 재사용 가능한 설계 아이디어를 제공하는 것을 목적
    • 설계 아이디어를 프로그래밍 언어의 특성에 맞춰 가공해야 하고 매버 구현 코드를 재작성해야 한다.
  • 프레임워크
    • 설계를 재사용하면서 유사한 코드를 반복적으로 구현하는 문제를 피할 수 있는 방법
    • 추상 클래스나 인터페이스를 정의하고 인스턴스 사이의 상호작용을 통해 시스템 전체 혹은 일부를 구현해 놓은 재사용 가능한 설계

상위 정책과 하위 정책으로 패키지 분리하기

  • 추상화를 이용해 변경을 캡슐화
  • 협력을 구현하는 코드 안의 의존성은 가급적이면 추상 클래스나 인터페이스와 같은 추상화를 향하도록 작성해야 한다.
  • 상위 정책이 세부 사항보다 더 다양한 상황에서 재사용될 수 있어야 한다.
    • 상위 정책과 세부 사항 모두 추상화에 의존하게 만드는 것이다.
  • 프레임워크는 여러 애플리케이션에 걸쳐 재사용 가능해야 하기 때문에 변하는 것과 변하지 않는 것들을 서로 다른 주기로 배포할 수 있도록 별도의 '배포 단위'로 분리해야 한다.
    • 변하는 부분과 변하지 않는 부분을 별도의 패키지로 분리하는 것
  • 여러 애플리케이션에 걸쳐 일관성 있는 협력을 구현할 수 있게 해준다.

제어 역전 원리

  • 의존성 역전 원리는 전통적인 설계 방법과 객체지향을 구분하는 가장 핵심적인 원리
  • 프레임워크를 사용하는 경우 개별 애플리케이션에서 프레임워크로 제어 흠름의 주체가 이동한다.
profile
꾸준히 나아가자 🐢

0개의 댓글