13장 패턴과 함께하는 행복한 삶

bluesky·2021년 12월 10일
0

학습 목표

  • 디자인 패턴을 정의할 수 있다.
  • 패턴 카탈로그에 대해서 알수 있다.
    • 어떠한 상황에서 이런 패턴을 써야하는 지 알 수 있다.
  • 패턴을 대하는 자세에 대해 알아본다.
  • 다른 영역의 패턴을 알아볼 수 있다.
  • 안티 패턴에 대해 알 수 있다.

디자인 패턴의 정의

패턴 이란 특정 컨텍스트 내에서 주어진 문제 에 대한 해결책 이다.

  • 컨텍스트(context)란 패턴이 적용되는 상황을 뜻합니다. 반복적으로 일어 날 수 있는 상황이어야만 합니다.

  • 문제(problem)란 컨텍스트 내에서 이루고자 하는 목적을 뜻합니다. 또한 컨텍스트 내에서 생길 수 있는 제약조건도 문제에 포함됩니다.

  • 해결책(solution)이 바로 우리가 찾아내야 하는 것입니다.

누구든지 적용해서 일련의 제약조건 내에서 목적을 달성할 수 있는 일반적인 디자인을 뜻합니다.
사실 디자인 패턴이라는 것은 일상적으로, 반복적으로 등장하는 디자인 문제에 대한 해결책 이라는 것을 이미 알고 있다.
근데 왜 이렇게 정형적인 정의를 따져야 하는 걸까?

패턴을 정형적으로 기술해 놓아야 패턴 카탈로그를 만들 수 있기 때문이다.

패턴 카탈로그

  • 패턴을 일목요연하게 나열한 목록
  • 참고하기 용이함.

누가 무엇을 할까요?

카탈로그의 구성요소.

패턴 카탈로그의 기술형식(Page 623)

패턴 종류 또는 범주

  • 패턴 이름
    패턴 설명에서 가장 먼저 등장, 패턴의 이름 없이는 패턴에 대한 정보를 다른 개발자들과 공유하기가 아주 힘들어 진다.
  • 용도(Intent)
    패턴의 역할이 간단히 기술된다.
  • 동기(Motivation)
    문제를 기술하고 주어진 해결책이 어떤 식으로 그 문제를 해결 할 수 있는지를 보여줄 수 있는 구체적인 시나리오가 주어진다.
  • 적용대상(Applicability)
    패턴을 적용할 수 있는 상황이 기술된다.
  • 구조(Structure)
    패턴에서 사용되는 클래스 다이어그램이 수록된다.
  • 구성요소(Participant)
    디자인패턴에 포함되어 있는 클래스와 객체들에 대한 설명
  • 협동(Collaboration)
    각 구성요소들이 패턴 내에서 어떤 식으로 도움을 주는지 설명.
  • 결과(Consequence)
    패턴을 사용했을 때의 효과(장점 및 단점)가 수록됨
  • 구현(Implementation)
    패턴을 구현할 때 필요한 기술 및 주의사항에 대해 설명
  • 샘플코드(Sample Code)
    구현시 도움 될 만한 코드 제공
  • 사용예(Known Uses)
    실제 시스템에서 이 패턴을 사용하는 예에 대한 설명
  • 관련패턴 (Related Patterns)
    본 패턴과 유사하거나 밀접하게 관련된 다른 패턴에 대해서 기술

예시

https://refactoring.guru/design-patterns/catalog

패턴 분류하기.

  • 생성 관련 패턴 (Creational Pattern)
    • 객체 인스턴스 생성을 위한 패턴
    • 싱글턴, 빌더, 프로토타입, 추상 팩토리, 팩토리 메소드
  • 행동 관련 패턴 (Behavioral Pattern)
    • 클래스와 객체들이 상호 작용하는 방법 및 역할을 분담하는 방법과 관련된 패턴
    • 템플릿메소드, 이터레이터, 커맨드, 스테이트, 스트레티지, 인터프리터, 비지터, 메멘토
  • 구조 관련 패턴 (Structural Pattern)
    • 클래스및 객체들을 구성을 통해서 더 큰 구조로 만들 수 있게 해 주는 것과 관련된 패턴
    • 데코레이터, 컴포지트, 프록시, 퍼사드, 어댑터, 브리지, 플라이웨이트

  • 클래스 패턴(Class Pattern)
    • 클래스 사이의 관계가 상속을 통해서 어떤 식으로 정의되는지를 다룹니다.
    • 클래스 패턴에서는 컴파일시에 관계가 결정 됩니다.
    • 템플릿 메소드, 어댑터, 팩토리 메소드, 인터프리터
  • 객체 패턴(Object Pattern)
    • 객체 사이의 관계를 다루며, 객체 사이의 관계는 보통 구성을 통해서 정의 됩니다.
    • 객체 패턴에서는 일반적으로 실행 중에 관계가 생성되기 때문에 더 동적이고 유연합니다.
    • 검포지트, 데코레이터, 프록시, 스트레티지, 추상 팩토리, 퍼사드, 커맨드, 옵져버, 스테이트, 싱글턴

패턴을 대하는 마음가짐

  • 간단한 문제는 일단 그냥 해결
    (패턴보단 원칙에 초점을 맞추자는 의미같다.)
    SOLID 패턴

https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84)

  • 확률이 높은 실질적 변경이 있으면 패턴을 적용해도 좋음.
  • 리팩토링을 할때도 패턴 도입을 고려해보면 좋음
  • 필요하지 않은 패턴은 제거할수도 있다...!

패턴 동물원

애플리케이션 패턴

  • 시스템 수준의 아키텍처를 만들기 위한 패턴
    ex)
  1. 계층화 패턴 (Layered pattern)
  2. 클라이언트-서버 패턴 (Client-server pattern)
  3. 마스터-슬레이브 패턴 (Master-slave pattern)
  4. 파이프-필터 패턴 (Pipe-filter pattern)
  5. 브로커 패턴 (Broker pattern)
  6. 피어 투 피어 패턴 (Peer-to-peer pattern)
  7. 이벤트-버스 패턴 (Event-bus pattern)
  8. MVC 패턴 (Model-view-controller pattern)
  9. 블랙보드 패턴 (Blackboard- pattern)
  10. 인터프리터 패턴 (Interpreter pattern)

더 자세한 자료는? 여기로.

한글자료
https://mingrammer.com/translation-10-common-software-architectural-patterns-in-a-nutshell/#%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90-%ED%8C%A8%ED%84%B4-%EB%B9%84%EA%B5%90

영문자료
https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013

특정 영역용 패턴

J2EE
자바 기술로 기업환경의 어플리케이션을 만드는데 필요한 스펙들을 모아둔 스펙 집합

다음으로 이루어짐.

  • Servlet
    클라이언트가 보내는 HTTP 요청을 처리하는 서버측 자바 프로그램.

  • JSP(Java Server Pages)
    HTML이나 Java 코드를 써서 사용자에게 정보를 출력. JSP가 처음 실행될 때 Servlet 엔진이 이것을 Servlet 으로 컴파일시켜서 내부적으로는 Servlet으로 동작한다.

  • EJB(Enterprise Java Beans)
    Java에서 제공하는 분산 컴포넌트 기술로 비즈니스 로직이나 데이터, 메시지를 처리할 수 있다.

  • Java Database Connector(JDBC)
    여러 종류의 데이터베이스 시스템에 접근하는 단일한 인터페이스를 제공.
    각각의 데이터베이스에 맞는 JDBC 드라이버가 있어야 한다.

  • Remote Method Invocation(RMI)
    프록시를 써서 원격에 있는 Java 객체의 메소드를 실행시키기 위한기술.

  • Java Naming DirectoryInterface (JNDI)
    자바 기술로 만들어진 객체에 이름을 붙여 찾을 수 있도록 단일한인터페이스를 제공.

  • Java Connector Architecture(JCA)
    이기종 플랫폼을 통합할 수 있도록 플랫폼 독립적인 인터페이스를 제공.

  • Java Message Service (JMS)
    여러 가지 메시징 시스템에 대한 플랫폼 독립적인 인터페이스를 제공.

출처: https://cheershennah.tistory.com/74 [Today I Learned. @cheers_hena 치얼스헤나]

안티 패턴

  • 나쁜 해결책을 의미.
    ex) 금망치(한가지 기술)
  • 나쁜 해결책이 문서로 정리해두면 다른 개발자들이 그 문제점을 미리 파악하는데 도움을 줌.

예시.
https://ui.toast.com/fe-guide/ko_ANTI-PATTERN

https://it-jin-developer.tistory.com/20

https://en.wikipedia.org/wiki/Anti-pattern#Programming_anti-patterns

https://alkhwa-113.tistory.com/entry/%EC%95%88%ED%8B%B0-%ED%8C%A8%ED%84%B4-%EB%82%B4-%EC%83%9D%EA%B0%81-%ED%8F%AC%ED%95%A8

기타 참고자료

profile
SMART https://github.com/dongseoki?tab=repositories

0개의 댓글