본문 바로가기
교육후 개인공부/Computer Science

[CS] 디자인패턴

by 뭉지야 2024. 1. 27.
728x90

디자인패턴

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

-라이브러리나 프레임워크를 만드는데 기초적인 원리가 된다.

-협업시 문제가 발생하면 빠른 의사소통이 가능해진다.

-생성패턴, 구조패턴, 행동패턴 3가지로 나눠진다.

 

*생성패턴

-객체 생성 방법이 들어간 디자인패턴이다.

-싱글톤, 팩토리, 추상팩토리, 빌더, 프로토타입패턴

 

*구조패턴

-객체, 클래스 등으로 큰 구조를 만들때 유연하고 효율적으로 만드는 방법이 들어간 디자인패턴이다.

-프록시, 어댑터, 브리지, 복합체, 데코레이터, 퍼사드, 플라이웨이트패턴

 

*행동패턴

-객체나 클래스 간의 알고리즘, 책임 할당에 관한 디자인패턴이다.

-이터레이터, 옵저버, 전략, 책임연쇄, 커맨드, 중재자, 메멘토, 상태, 템플릿메서드, 비지터패턴


싱글톤 패턴

-생성패턴 중 하나

-하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다.

-인스턴스생성에 많은 코스트가 드는 데이터베이스 연결모듈에 많이 쓰이며 인스턴스생성을 효율적으로 한다는 장점이 있다. 그러나 의존성이 높아지고 TDD를 할때 불편한 단점이 있다.


팩토리패턴

-생성패턴 중 하나

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

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

 


이터레이터 패턴

-이터레이터(iterator)를 사용하여 컨테이너의 요소들에 접근하는 디자인 패턴

-각기 다른 자료구조들을 똑같은 인터페이스로 순회를 쉽게 할수 있다는 장점이 있다.

컨테이너란 동일한 요소들을 담아놓는 집합을 말한다. 배열 맵 등이 있다.


전략패턴

-전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 디자인 패턴


옵저버 패턴

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

  

 

 

 


프록시패턴

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

-프록시서버가 대표적인 예

-보통은 서비스 앞단에 프록시 서버로 cloudflare를 둬서 불필요한 또는 공격적인 트래픽을 막는다.

 


MVC패턴

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

-반영한 대표적인 프레임워크로 Spring WEB MVC가 있다. (디스패처 서블릿의 사용자 요청처리과정)

 

*모델(Model)

- 애플리케이션의 데이터인 데이터베이스, 상수, 변수 등을 뜻한다.

-뷰에서 데이터를 생성하거나 수정할때 컨트롤러를 통해 모델이 생성 또는 업데이트 된다.

- ex) 사용자가 네모박스에 글자를 적는다고 했을때. 모델은 네모박스의 크기정보, 글자내용, 글자의 위치, 글자의 포맷정보 등이 된다.

 

*뷰(View)

-inputbox, checkbox, textarea 등 사용자 인터페이스 요소(UI)를 나타내며 모델을 기반으로 사용자가 볼수있는 화면을 뜻한다.

-모델이 가지고 있는 정보를 따로 저장하지 않아야 하며 변경이 일어나면 컨트롤러에 이를 전달해야 한다.

 

*컨트롤러(Controller)

-하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할을 하며 이벤트 등 메인 로직을 담당한다.

-모델과 뷰의 생명주기를 관리

-모델이나 뷰의 변경 통지를 받으면 이를 해석하여 각각의 구성 요소에 해당 내용에 대해 알려준다.

 

MVC패턴의 장점

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

-재사용성과 확장성이 용이하다

 

MVC패턴의 단점

-애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해진다.     

 


MVP패턴

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

-V와P는 1:1 단계이므로 MVC보다 더 강한 결합을 지닌 디자인 패턴이다.

 

 


MVVM 패턴

-MVC의 C가 VM(뷰모델, view model)로 바뀐패턴 

-VM은 view를 추상화한 계층

-VM:V = 1: N

-VM은 커맨드와 데이터바인딩을 가진다

커맨드: 여러 요소에 대한 처리를 하나의 액션으로 처리할수 있는기법

데이터바인딩: 화면에 보이는 데이터와 브라우저 상의 메모리 데이터를 일치시키는 방법

-대표적인 프레임워크로 Vue.js가 있다.

 

 

 

 

 

 


flux패턴

-단방향으로 데이터 흐름을 관리하는 디자인패턴

-action, dispatcher, store, view 라는 계층으로 구성된다. (Redux가 딱 떠오른다!!!!!)

 

*Action

-사용자의 이벤트를 담당한다. 마우스 클릭이나, 글을 쓴다던가 등을 의미하며 해당 이벤트에 관한 객체를 만들어내 dispatcher에게 전달한다.

 

*Dispatcher

-들어오는 action 객체 정보를 기반 어떠한 행위를 할 것인가를 결정한다. 보통 action객체의 type를 기반으로 미리 만들어놓은 로직을 수행하고 이를 store에 전달한다.

 

*store

-애플리케이션 상태를 관리하고 저장하는 계층이다. 도메인의 상태, 사용자의 인터페이스 등의 상태를 모두 저장한다.

 

*view

-데이터를 기반으로 표출이 되는 사용자인터페이스이다.

 

장점

-데이터 일관성의 증대

-버그를 찾기가 쉬워짐

-단위테스팅이 쉬워짐

 

728x90

'교육후 개인공부 > Computer Science' 카테고리의 다른 글

[CS] DI, DIP  (0) 2024.01.28
[CS] 추상화  (0) 2024.01.26
[CS] 오버로딩, 오버라이딩  (0) 2024.01.26
[CS] static 키워드  (0) 2024.01.26
[CS] 클래스, 객체, 인스턴스  (0) 2024.01.23