| 분야 | 상세지식 |
|---|---|
| 자료구조 | 스택, 힙 |
| 알고리즘 | 회귀호출, 인덱스, 정렬, 이진 검색 |
| 운영체제 | 프로세스, 스레드, 뮤텍스, 세마포어 |
| 디자인패턴 | MVC 아키텍처 |
| 프로그래밍 언어 | 네이티브 코드, 콜 바이 밸류, 콜 바이 레퍼런스 |
| 경험 | 간단한 텍스트 기반의 게임 만들어보기 |
MVC 아키텍처는 소프트웨어를 개발할 때 구조를 분리해 효율적으로 관리하기 위한 디자인 패턴 중 하나다. "Model-View-Controller"의 약자로, 애플리케이션을 세 부분으로 나누어 코드의 가독성을 높이고 유지보수를 쉽게 만들어 준다. 각 부분이 담당하는 역할과 동작 방식에 대해 쉽게 설명해 보겠다.
MVC는 크게 Model, View, Controller로 구성된다. 각각의 역할을 하나씩 알아보자.
모델은 데이터와 비즈니스 로직을 담당하는 부분이다.
역할은 데이터를 저장하고, 데이터와 관련된 모든 작업을 수행하게 되는데 예를 들어, 사용자가 입력한 정보를 저장하고 처리하는 역할을 한다고 보면 된다. 데이터베이스나 네트워크와 통신하여 필요한 데이터를 가져오거나 저장을 해주는데 예를 들어 쇼핑 앱을 한번 생각해 보자. 상품의 이름, 가격, 설명 등의 정보가 이제 모델에 해당한다. 또한, 상품을 장바구니에 추가하거나 삭제하는 기능도 모델이 담당한다.
뷰는 사용자에게 보여지는 화면을 담당한다.
역할은 화면에 데이터를 표시하고, 사용자의 입력을 받는데 버튼 클릭이나 텍스트 입력 등을 받는 것이다. 모델에서 데이터를 받아 화면에 보여주지만, 데이터의 처리 방법은 알지 못한다. 예를 들어 쇼핑 앱의 상품 목록 화면, 장바구니 화면 등이 뷰에 해당하는데, 사용자가 상품을 선택하거나 버튼을 누르면 화면이 바뀌거나 입력 내용이 계속 업데이트 된다.
컨트롤러는 모델과 뷰 사이에서 중간 다리 역할을 한다.
역할은 뷰에서 사용자의 입력을 받으면, 이 입력을 처리하고 필요한 데이터를 모델에서 가져오거나 수정한 후, 그 결과를 다시 뷰에 전달한다. 뷰와 모델을 연결하여 서로 직접적으로 의존하지 않도록 돕는다. 예를 들어 쇼핑 앱에서 사용자가 상품을 장바구니에 추가하려고 버튼을 누르면, 컨트롤러가 이 동작을 받아 모델에 상품 추가를 요청하고 그 다음 모델에서 변경된 데이터를 뷰에 전달하여 화면을 업데이트 하는 것이다.
사용자가 뷰와 상호작용 > 사용자가 버튼을 누르거나 화면에서 정보를 입력하면, 이 요청은 컨트롤러로 전달된다.
컨트롤러가 모델과 통신 > 컨트롤러는 사용자의 요청을 처리하고, 필요한 데이터의 추가, 삭제, 변경을 모델에게 요청한다.
모델이 데이터 처리 > 모델은 컨트롤러의 요청에 따라 데이터를 변경하거나 처리하고, 그 결과를 컨트롤러에 반환한다.
컨트롤러가 뷰를 업데이트 > 컨트롤러는 모델로부터 받은 데이터나 결과를 뷰에 전달하여 화면을 업데이트한다.
쇼핑 앱에서 상품을 장바구니에 넣는 예시를 통해 MVC 구조를 쉽게 이해해 보자.
사용자: "장바구니에 상품을 추가하는 버튼"을 누른다.
뷰: " 컨트롤러야 사용자가 버튼 눌렀다? "
컨트롤러: " 아 ~ 오키오키 모델이한테 장바구니에 추가하라고 할게~ "
모델: " 어어 지금 상품 장바구니에 넣었고 업데이트도 했어~ 확인해봐 "
컨트롤러: " 어어 모델아 땡큐, 뷰야 내가 데이터 보내줄테니까 그대로 화면 좀 그려줄래? 장바구니에 상품 들어간 거 사용자가 알아야 하거든 "
뷰: " 오키오키 데이터 받고 화면 업데이트 완료~ "
코드의 분리 : 모델, 뷰, 컨트롤러를 분리하여 관리하기 때문에 코드를 이해하기 쉽고 유지보수가 편하다.
유연성 : 뷰와 모델이 직접적으로 연결되어 있지 않기 때문에, 데이터를 처리하는 로직이나 화면 구성을 쉽게 변경할 수 있다.
재사용성 : 뷰와 모델의 독립성을 유지하기 때문에, 모델을 다른 뷰에서 재사용할 수 있다.
모델(Model) : 데이터와 그 데이터를 처리하는 로직을 담당
뷰(View) : 사용자에게 보여지는 화면과 입력을 담당.\
컨트롤러(Controller) : 모델과 뷰 사이에서 사용자의 입력을 처리하고, 모델과 뷰를 연결하는 역할을 담당
이렇게 MVC 구조를 활용하면 코드의 복잡성을 줄이고, 개발과 유지보수를 더욱 쉽게 할 수 있다.
Swift로 iOS 앱을 만들 때도 많이 사용하는 패턴 중 하나라고 한다.