Olive Study Room
[Design Pattern] 디자인패턴의 정의, GoF, MVC 본문
더보기
카카오톡 pc버전 업데이트를 하고 디자인 패턴을 공부하려고 켰는데 발표자가 카카오톡 오픈채팅 개발자셨다.. 신기해라.. 예전 발표긴 하지만 워밍업으로..!
디자인 패턴이란?
- 소프트웨어 개발 시 공통적으로 발생하는 문제에 대한 해결방법 -> 문제가 발생하기 전 해결할 수 있는 것!
- 커뮤니케이션 도구
- 객체를 막 만들면 사용이 모호해짐.
GoF 디자인 패턴
- 1995년 GoF(Gang of Four)라고 불리는 Erich Gamma, Richard Helm, Ralph Johnson, John Vissides가 처음으로 디자인 패턴을 고안한 것으로, 소프트웨어 공학에서 가장 많이 사용되는 디자인 패턴이다.
- 참고로 GoF의 서적의 제목이 'Design Patterns: Elements of Reusable Object-Oriented Software('재이용이 가능한 객체지향 소프트웨어의 요소')'
- 목적에 따라 생성 패턴 5개, 구조패턴 7개, 행위패턴 11개, 총 23개의 패턴으로 이루어져있다.
- 또는 범위에 따라서도 분류할 수 있다. 패턴을 클래스에 적용하는지, 객체에 적용하는지 구분한다. 클래스의 패턴은 클래스와 서브 클래스간의 관련성을 다루고 주로 상속과 관련된다.
분류
- 생성 패턴
- 구조 패턴
- 행위 패턴
개념도
패턴 이름 | 문제 | 결과 |
해법 |
종류
- 팩토리 메서드 패턴
- 생성 패턴 중 하나
- 인스턴스를 생성하는 공장을 템플릿 메서드 패턴으로 구성
- 템플릿 메서드 패턴 : 상위 클래스에서 공통되는 부분을 구현하고, 각각 상세 부분은 하위 클래스에서 구현. 코드의 중복을 줄이고 리팩토링에 유리한 패턴.
- 서브 클래스가 어떤 클래스를 만들지 결정하게 함으로써 객체 생성을 캡슐화(즉 슈퍼클래스의 메소드에서는 어떤 객체가 만들어지는지 모르고, 서브 클래스의 메소드가 결정하게 되는 것! )
- 추상 팩토리 패턴
- 생성 패턴 중 하나
- 많은 수의 연관된 서브 클래스를 특정 그룹으로 묶어 한 번에 교체할 수 있도록 만든 디자인 패턴
- 빌더 패턴
- 생성 패턴 중 하나
- 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴
- 어댑터 패턴
- 구조 패턴 중 하나
- 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴
- 호환성 문제로 같이 사용할 수 없는 클래스 들을 연결해서 사용
- 컴포지트 패턴
- 구조 패턴 중 하나
- 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴
- 디렉토리(복합 객체), 파일(단일 객체)을 하나의 모델로 사용. 단일 객체와 복합 객체를 모두 동일하게 다룰 수 있게 하는 패턴
MVC
Model + View + Controller
객체들이 해야할 일, 역할, 책임을 나눠놓은 것
- Model : 데이터 관리
- 프로그램 저장, 불러오는 데이터, 입출력 데이터를 관리
- View : 사용자에게 보여지는 역할을 하는 객체들
- xcode에서 view Controller하위에 있는 View. UIView를 상속받는 것들
- View Controller에서 self.view를 하면 이를 뜻함
- Controller : Model과 View 사이의 중간다리
- xcode에서 view Controller. 코드를 작성하는 공간
- 눈에 보이지 않음
사용하는 이유
view와 model의 간섭을 없애서 각각의 업데이트를 편하게 함
MVVM
Model + View + ViewModel
controller의 코드를 줄이기 위해 View와 ViewModel로 나눈 것.
- Model : 데이터 관리
- View : 사용자에게 보여지는 부분과 생명주기 관리
- ViewModel이 받아온 데이터를 뿌려준다
- ViewModel : Model로부터 가져온 데이터를 View에 맞게 가공/처리
- 서버에서 가져올 경우 ViewModel에서 받아온다
사용하는 이유
- view와 비즈니스 로직을 분리
- 데이터처리와 분리
- MVC보다 controller의 코드가 가볍다
- 생명주기를 관리하기 용이하다.
MVC는 controller에서 데이터를 받아와 뿌려주는 부분이 합쳐져 있지만 MVVM은 데이터를 받아오는 부분과 뿌려주는 부분이 분리되어있다.
더보기
출처
디자인 패턴 적용기(let us: Go! 2017 가을 세션 엔비냥님 발표) https://www.youtube.com/watch?v=MXSKM6aQ7Wo
블로그 https://4z7l.github.io/2020/12/25/design_pattern_GoF.html
'Coding' 카테고리의 다른 글
[GitHub] 내 branch와 master branch의 버전이 일치하지 않는 경우 (0) | 2021.08.24 |
---|---|
[GitHub 1] 깃허브에 올리기 + Git이란? (0) | 2021.07.05 |
ASCII 아스키코드, UTF-8, Unicode (0) | 2021.06.26 |
[CS] Sync & Async (0) | 2021.06.05 |
Comments