SW architecture 와 SW design pattern의 개념 차이 , 왜 필요할까?
SW architecture란?
- 수많은 기능 하나하나의 부품들을 어떻게 연결시켜 관계를 맺었는지를 결정하는 것
- 이러한 모듈들을 어떻게 분할하고 배치할 것인가? 및 구성관계 설정
- 작은 기능 → 모듈
- 모듈을 기능별로 묶어놓은 집합 → 컴포넌트
- 전체 → 라이브러리
SW architecture의 기본원리
- 모듈화 ⇒ 소프트웨어 성능 향상 및 유지관리 등이 용이하도록 시스템의 기능을 모듈단위로 나누는 것
- 추상화 ⇒ 전체적이고 포괄적인 개념을 설계한 후에 구체화시켜 나가는 것
- 단계적 분해 ⇒ 상위 개념부터 하위 개념으로 구체화 시키는 분할 기법 하향식 설계 전략
- 정보은닉 ⇒ 모듈 내부에 정보와 자료들을 숨겨서 다른 모듈이 접근하거나 수정 못하도록 하는 기법
SW Design Pattern
- 특정 문제(자주 접는 문제)에대해 쉽게 해결하기 위한 설계 패턴(Architecture보다 작은 개념)
- 아키텍처의 더 작은 의미로써 특정 유형의 문제를 해결하는 노하우 및 방법
왜 사용할까?
"두 개가 중요한 이유는 기능을 추가하기도 수월하고 빨라진다!"
- OOP의 다양한 문제상황에 대한 예방
- 프로그래머 사이의 협업효율 향상(공통된 디자인 패턴을 사용함으로써)
- 프로그래머 사이의 의사소통 증진
- 코드의 안정화 및 최적화
- 코드의 재사용성 증가
조심해야될 점!
MVC란?
Model
- What your application is / 무엇을 할 것인가? ( 보이는 것이 아니라)
- 데이터와 관련된 내용(데이터로 사용될 구조체) / 데이터 관리 로직
Controller
- How에 해당하는 내용이다. 어떻게 화면에 표시할 것인가?
- View와 Model을 이어주는 징검다리 역할을 한다.
View
- 일반적인 요소들(UI)
- Controller의 하인들
‼️
. Controller는 model과 view에게 직접 접근 가능(그 반대는 불가능)
. model과 view 사이에는 교류가 없다.
. view와 model 사이의 의존성이 없어지기에 각각의 재사용성이 높아진다.
‼️
View, Model이 Controller와 교류하기 위해서 하는 행동들
View → Controller
- Controller에 target을 만든다.
- delegate
- datasource
Model → Controller ( 데이터가 변경되었음을 알려줌)
- Notification
- KVO(Key Value Observing)
MVC는 무엇을 구분짓는 용도이며 왜 그것을 구분 지을 필요가 있을까요?
- Model/View/Controller로 구분하는 것!
구분 짓는 이유
- 역할이 분리가되어서 유지보수가 쉽다.
- 확장성도 더 높다
애플에서 이야기하는 MVC의 사례도 찾아주세요.
- UIkit
- View와 Model에게 독립성을 주었다.
- View와 Controller를 분리하기 어렵고(Massive View Controller), Controller의 재사용도 어렵고, 테스트도 불가하다
- 개발 진행 속도에 있어서는 가장 빠르다.
UIkit - MVC
- UI 컴포넌트 (
UIView
)는 어떻게 화면에 그릴지만 담당한다.
- 셀이 눌리면 어떤 작업을 해야할지, 셀 안에 어떤 텍스트를 넣어야 할지 같은 것들은
Delegate
, DataSource
프로토콜을 사용해서 컨트롤러(UIViewController
)에게 모두 위임한다.
- UIKit 프레임워크에서
UIView
- UIViewController
는 기본적으로 한 쌍을 이루게 되며,UIView
에 필요한 로직은 대부분 UIViewController
에 배치한다.
따라서, 컨트롤러'의 재사용성은? 당연하게도 '컨트롤러'의 재사용성은 낮아진다. 그러나, UITableView
, UICollectionView
같은 UI 컴포넌트들은 수백만 개의 iOS 앱에서 재사용된다