[TIL] 2024. 07. 03

2024. 7. 3. 10:02·TIL (Today I Learned)

MVC 패턴

MVC는 Model-View-Controller의 약자로, 애플리케이션을 세 가지 주요 부분으로 나누는 디자인 패턴입니다. 이 패턴은 애플리케이션의 내부 표현과 사용자 인터페이스를 분리하여 유지보수성과 확장성을 높이는 것을 목표로 합니다.

  • Model (모델): 데이터와 비즈니스 로직을 관리합니다. 데이터베이스, 네트워크와 상호작용하거나 애플리케이션의 상태를 관리합니다.
  • View (뷰): 사용자 인터페이스 요소를 관리합니다. 모델의 데이터를 사용하여 사용자에게 보여주는 역할을 합니다.
  • Controller (컨트롤러): 사용자 입력을 받아서 처리하고, 모델과 뷰 사이에서 중개자 역할을 합니다. 입력된 데이터를 모델에 전달하고, 모델의 변화를 뷰에 전달합니다.

 

Swift에서 MVC 패턴 적용 예시

아래는 간단한 Swift 코드 예제입니다. 이 예제에서는 MVC 패턴을 사용하여 사용자 정보를 표시하는 애플리케이션을 만듭니다.

Model

import Foundation

class User {
    var name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

View

import UIKit

class UserView: UIView {
    private let nameLabel = UILabel()
    private let ageLabel = UILabel()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupView()
    }
    
    private func setupView() {
        addSubview(nameLabel)
        addSubview(ageLabel)
        
        // 레이아웃 설정 (예를 들어, 오토 레이아웃 사용)
        nameLabel.translatesAutoresizingMaskIntoConstraints = false
        ageLabel.translatesAutoresizingMaskIntoConstraints = false
        
        NSLayoutConstraint.activate([
            nameLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
            nameLabel.topAnchor.constraint(equalTo: self.topAnchor, constant: 20),
            ageLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
            ageLabel.topAnchor.constraint(equalTo: nameLabel.bottomAnchor, constant: 20)
        ])
    }
    
    func updateView(with user: User) {
        nameLabel.text = "Name: \(user.name)"
        ageLabel.text = "Age: \(user.age)"
    }
}

Controller

import UIKit

class UserController: UIViewController {
    private var userView: UserView!
    private var user: User!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 모델 생성
        user = User(name: "John Doe", age: 30)
        
        // 뷰 생성 및 설정
        userView = UserView(frame: self.view.frame)
        self.view.addSubview(userView)
        
        // 모델 데이터를 뷰에 전달
        userView.updateView(with: user)
    }
}
 

Swift에서 많이 쓰이는 아키텍처 패턴들

MVVM (Model-View-ViewModel)

  • MVC의 단점을 보완하기 위해 만들어진 패턴입니다.
  • ViewModel이 View와 Model 사이의 데이터를 변환하고, 뷰에 맞는 형식으로 제공하는 역할을 합니다.
  • 데이터 바인딩을 통해 뷰와 ViewModel 간의 통신을 쉽게 할 수 있습니다.

MVP (Model-View-Presenter)

  • MVC와 유사하지만, 컨트롤러 대신 프레젠터를 사용하는 패턴입니다.
  • 프레젠터는 뷰와 모델 간의 모든 상호작용을 처리하며, 뷰는 사용자 인터페이스만을 담당합니다.
  • 뷰의 독립성을 높이고 테스트 용이성을 개선합니다.

VIPER (View-Interactor-Presenter-Entity-Router)

  • 더욱 분리된 구조를 제공합니다.
  • 각 역할이 명확히 분리되어 있어, 테스트와 유지보수가 용이합니다.
  • 단점은 상대적으로 복잡하다는 점입니다.

Clean Architecture

  • Uncle Bob에 의해 제안된 아키텍처로, 의존성을 역전시켜 비즈니스 로직을 독립적으로 유지합니다.
  • 각 계층이 명확히 분리되어 있어, 확장성과 유지보수성이 뛰어납니다.
  • 상대적으로 설계와 구현이 복잡할 수 있습니다.

 

이러한 아키텍처 패턴들은 애플리케이션의 규모와 요구사항에 따라 적절히 선택하여 사용하는 것이 중요하다고 생각합니다. 각각의 패턴은 고유한 장단점이 있으며, 프로젝트의 특성에 맞게 활용하는 것이 바람직할 것 같습니다.

반응형

'TIL (Today I Learned)' 카테고리의 다른 글

[TIL] 2024. 07. 05  (0) 2024.07.06
[TIL] 2024. 07. 04  (0) 2024.07.04
[TIL] 2024. 07. 02  (0) 2024.07.03
[TIL] 2024. 07. 01  (0) 2024.07.01
[TIL] 2024. 06. 28  (0) 2024.06.28
'TIL (Today I Learned)' 카테고리의 다른 글
  • [TIL] 2024. 07. 05
  • [TIL] 2024. 07. 04
  • [TIL] 2024. 07. 02
  • [TIL] 2024. 07. 01
DongDong_
DongDong_
  • DongDong_
    how-dev
    DongDong_
  • 전체
    오늘
    어제
    • 분류 전체보기 (102)
      • TIL (Today I Learned) (96)
      • DEV (0)
        • 알고리즘 (0)
        • SWIFT (0)
      • 사전캠프 데일리 미션 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글작성
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
DongDong_
[TIL] 2024. 07. 03
상단으로

티스토리툴바