모델-뷰-컨트롤러 (MVC) 디자인패턴

모델-뷰-컨트롤러(Model-View-Controller, MVC)는 애플리케이션의 구조를 명확하게 분리하여 개발과 유지 보수를 용이하게 하는 디자인 패턴입니다. MVC 패턴은 애플리케이션의 데이터(Model), 사용자 인터페이스(View), 그리고 데이터와 인터페이스 간 상호 작용을 관리하는 로직(Controller)을 분리합니다. 간단한 예제로 설명하겠습니다:

// Model
struct Person {
    let firstName: String
    let lastName: String
}

// View
protocol PersonView: AnyObject {
    func setFirstName(_ firstName: String)
    func setLastName(_ lastName: String)
}

// Controller
class PersonController {
    private let person: Person
    private weak var view: PersonView?

    init(person: Person, view: PersonView) {
        self.person = person
        self.view = view
    }

    func viewDidLoad() {
        view?.setFirstName(person.firstName)
        view?.setLastName(person.lastName)
    }
}

// 사용 예시
class PersonViewController: PersonView {
    private let personController: PersonController

    init(person: Person) {
        personController = PersonController(person: person, view: self)
        personController.viewDidLoad()
    }

    func setFirstName(_ firstName: String) {
        print("First name: \(firstName)")
    }

    func setLastName(_ lastName: String) {
        print("Last name: \(lastName)")
    }
}

// 모델 인스턴스 생성
let person = Person(firstName: "John", lastName: "Doe")

// 뷰 및 컨트롤러 인스턴스 생성
let personViewController = PersonViewController(person: person)
// 출력: First name: John
// 출력: Last name: Doe

위 예제에서 Person 구조체는 Model 역할을 합니다. 이는 애플리케이션의 데이터를 저장하고 처리하는 역할을 담당합니다.

PersonView 프로토콜은 View 역할을 합니다. 이 프로토콜은 사용자 인터페이스를 업데이트하는 메서드를 정의하며, 실제 애플리케이션에서는 UI 구성 요소를 다루는 코드가 포함될 것입니다.

PersonController 클래스는 Controller 역할을 합니다. 이 클래스는 Model과 View 사이의 상호 작용을 관리하며, Model의 데이터를 가져와 View를 업데이트하는 로직을 포함합니다.

사용 예시에서 PersonViewController 클래스는 PersonView 프로토콜을 구현하며, PersonController 인스턴스를 생성하고 사용합니다. PersonControllerviewDidLoad() 메서드를 호출하여 View를 업데이터로 업데이트합니다. 이 예제에서는 실제 UI 구성 요소를 사용하지 않고 콘솔에 출력하는 방식으로 구현되어 있지만, 실제 애플리케이션에서는 UIKit, SwiftUI 등을 사용하여 UI를 구성할 것입니다.

이 예제는 MVC 디자인 패턴을 사용하여 애플리케이션의 데이터, 사용자 인터페이스, 그리고 데이터와 인터페이스 간 상호 작용을 관리하는 로직을 분리하는 방법을 보여줍니다. 이 패턴은 애플리케이션의 구조를 명확하게 분리하여 개발과 유지 보수를 용이하게 하며, 코드의 가독성과 재사용성을 향상시킵니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다