VIPER

iOS 아키텍처 패턴 – 4: VIPER

a computer monitor sitting on top of a wooden desk

iOS 개발의 세계에는 다양한 아키텍처 패턴이 존재한다.

이 중에서도 VIPER는 크고 복잡한 프로젝트에서 코드의 구조와 관리를 개선하기 위해 도입되는 아키텍처 중 하나이다.

이 글에서는 VIPER의 구성 요소와 Swift 예제를 통해 이 패턴을 깊게 이해해보도록 한다.

VIPER란?

VIPER는 View, Interactor, Presenter, Entity, Router의 약자로, 각 구성 요소는 다음과 같은 역할을 담당한다.

  • View: 사용자에게 보여지는 UI 요소를 담당한다.
  • Interactor: 비즈니스 로직을 수행한다.
  • Presenter: View와 Interactor 사이에서 데이터를 변환하고 조정한다.
  • Entity: 애플리케이션의 기본 데이터 객체이다.
  • Router: 화면 간의 전환 로직을 담당한다.

Swift 예제로 VIPER 이해하기

1. Entity

struct Article {
    let title: String
    let content: String
}

2. Interactor

protocol ArticleInteractorProtocol {
    func fetchArticles() -> [Article]
}

class ArticleInteractor: ArticleInteractorProtocol {
    func fetchArticles() -> [Article] {
        // 여기서 데이터베이스 또는 API로부터 데이터를 가져온다.
        return [Article(title: "Sample Title", content: "Sample Content")]
    }
}

3. Presenter

protocol ArticlePresenterProtocol {
    func viewDidLoad()
}

class ArticlePresenter: ArticlePresenterProtocol {
    var view: ArticleViewProtocol?
    var interactor: ArticleInteractorProtocol?
    var router: ArticleRouterProtocol?

    func viewDidLoad() {
        let articles = interactor?.fetchArticles()
        view?.displayArticles(articles ?? [])
    }
}

4. View

SwiftUI를 사용하여 간단한 예제를 구현했다.

protocol ArticleViewProtocol: AnyObject {
    func displayArticles(_ articles: [Article])
}

import SwiftUI

struct ArticleView: View, ArticleViewProtocol {
    var presenter: ArticlePresenterProtocol?

    var body: some View {
        // UI 구성
    }

    func displayArticles(_ articles: [Article]) {
        // UI 업데이트 로직
    }
}

5. Router

protocol ArticleRouterProtocol {
    func navigateToDetail(article: Article)
}

class ArticleRouter: ArticleRouterProtocol {
    func navigateToDetail(article: Article) {
        // 상세 화면으로의 전환 로직
    }
}

VIPER의 장점

  1. 단일 책임 원칙: 각 모듈은 자신의 역할에만 집중한다. 이로 인해 코드의 품질과 유지보수성이 향상된다.
  2. 테스트 용이성: 각 구성 요소는 독립적이므로 단위 테스트하기 쉽다.
  3. 모듈화: VIPER는 모듈화를 장려하여, 팀원 간의 협업이 더욱 원활해진다.

마치며

VIPER는 iOS 애플리케이션의 복잡도를 효과적으로 관리할 수 있는 강력한 아키텍처 패턴이다.

큰 프로젝트나 팀으로의 개발 시에 특히 유용하므로, 개발자로서 이 패턴을 학습하고 경험하는 것은 큰 자산이 될 것이다.