디자인 패턴

코딩덕·2023년 5월 5일

면접왕

목록 보기
6/13

💡 디자인 패턴

프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 ‘규약’ 형태로 만들어 놓은 것

  • 라이브러리나 프레임워크를 만드는데 기초적인 원리가 된다.
  • 팀원들과 협업할 때 어떤 문제가 나타났을 때 해결방식에 있어 빠른 의사소통가능

<디자인 패턴의종류>

  • 생성패턴
    객체 생성 방법이 들어간 디자인패턴
    싱글톤, 팩토리, 추상팩토리, 빌더, 프로토타입

  • 구조패턴
    객체, 클래스 등으로 큰 구조를 만들 때 유연하고 효율적으로 만드는 방법이 들어간 디자인패턴
    프록시, 어댑터, 브리지, 복합체, 데코레이터, 퍼사드, 플라이웨이트

  • 행동 패턴
    객체나 클래스 간의 알고리즘, 책임 할당에 관한 디자인패턴
    옵저버, 전략, 이터레이터, 책임연쇄, 커맨드, 중재자, 메멘토, 상태, 템플릿메서드, 비지터


🌱 싱글톤 패턴

하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
인스턴스 생성에 많은 코스트가 드는 데이터베이스 연결모듈에 많이 쓰인다
의존성이 높아지고 TDD를 할 때 불편한 단점이 있다.

🤔 TDD란?   테스트 코드를 작성한 뒤에 실제 코드를 작성하는 것
                  (이후 테스트가 통과된 코드만을 코드 개발 단계에서 실제 코드로 작성함)

🌱 팩토리 패턴

상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고,
하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴

상위 클래스에서는 객체 생성방식에 대해 알 필요가 없어져 유연성을 갖게 되며
객체 생성로직은 하위클래스에서만 관리 되기 때문에 유지보수성 증가


🌱 프록시 패턴

객체가 어떤 대상 객체에 접근하기 전, 그 접근에 대한 흐름을 가로채서 해당접근을
필터링하거나 수정하는 등의 역할을 하는 계층이 있는 패턴

프록시패턴 개념에서 나온 프록시 서버


🌱 옵저버 패턴

주체가 어떤 객체(subject)의 상태 변화를 관찰하다가 상태 변화가 있을때마다 메서드를 통해
옵저버 목록에 있는 옵저버들에게 변화를 알려 주는 패턴


🌱 전략 패턴

전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호교체가 가능한 패턴
로그인이라는 컨텍스트안에서 카카오로그인, 구글로그인, 로컬로그인 등 다양하게 로그인 방법을 선택할수 있는 것


🤔 컨텍스트란?  어떤 종류의 상태,환경을 캡슐화한 것

컨덱스트라는 개념에서 나온 리액트 상태관리 툴 contextAPI


💡 MVC패턴

모델, 뷰, 컨트롤러로 이루어진 디자인 패턴

  • 모델: 애플리케이션의 데이터인 데이터베이스(글자내용, 글자의 위치등의 내용물)

  • 뷰: 모델을 기반으로 사용자가 볼 수 있는 화면

  • 컨트롤러: 하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할

MVC패턴의 장점
애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있다.

MVC패턴의 단점
애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해진다.


💡 MVP패턴

MVC패턴의 C(컨트롤러)가 P(프레젠터, presenter) 로 교체된 패턴


💡 MVVM패턴

MVC패턴의 C(컨트롤러)가 VM(뷰모델)로 바뀐 패턴

🤔 각 패턴들의 차이점?

  • MVC패턴 : 컨트롤러와 뷰는 1:n관계, 뷰는 컨트롤러 참조 X

  • MVP패턴 : 프레젠터와 뷰는 1:1관계, 뷰는 프레젠터 참조 O

  • MVVM패턴 : 뷰모델과 뷰는 1:n관계, 뷰는 뷰모델 참조 O


💡 Flux패턴

Flux는 MVC모델의 단점을 보안하기 위해 페이스북에서 발표한 패턴

MVC의 가장 큰 단점은 바로 양방향 데이터 흐름이라는 것이다. 하지만 구조가 복잡할 경우 이런 양방향 데이터 흐름은 기능이 추가 될 때마다 더욱더 구조가 어렵게 되어서 개발자도 관리하기가 무척 힘들어 진다. 따라서 이를 해결하기위해 단방향 데이터 흐름의 Flux패턴이 나왔다.

데이터 흐름은 항상 Dispatcher에서 Store로 Store에서 View로 View에서 다시 Action을 통해 Dispatcher 이렇게 흘러간다.

  • Dispatcher : Flux의 모든 데이터 흐름을 관리하는 허브 역할을 담당

  • Store: 어플리케이션의 모든 상태변경은 Store에서 결정됌

  • View : 화면에 나타내는 것 뿐만 아니라, View 컨트롤러의 역할도 수행

  • Action: 데이터를 변경하는 행위로서 Dispatcher에게 전달되는 객체

Redux는 Flux 패턴의 중요한 특징들로부터 영감을 받아 제작된 라이브러리이다.

0개의 댓글