본문 바로가기

iOS_UI+Ex

스토리보드를 활용한 프로젝트에서의 Dependency Injection

오늘 정리해 볼 내용은 인터페이스 빌더(xib)를 활용하지 않고, 스토리보드를 사용한 프로젝트에서의 의존성 주입(Dependency Injection)에 대해서 정리해보자 한다.

 

의존성 주입은 크게 3가지 방식이 있고, 다음과 같다.

1. property를 활용하는 방식

2. Initializer를 활용하는 방식

3. method를 활용하는 방식

3번의 방식은 개인적으로 가독성이 떨어진다고 생각하여 주로 1번과 2번의 방식을 사용하고 있으며,

그 중에서도 2번 방식을 즐겨 사용하여 개발하였다.

최근 들어간 프로젝트에서 그간의 프로젝트에서는 인터페이스 빌더(xib)를 통해 개발하였다면, 이번 프로젝트에서는 스토리보드를 활용하여 개발이 되어있어서 이 부분에서 다른 ViewController를 호출하는 방식과, 호출하면서 의존성을 주입하는 코드를 정리해보고자 한다.

 

우선 앱이 시작되고, AppDelegate에서 LaunchViewController를 호출하여 Splash 프로세스를 진행하고자 할때 LaunchViewController의 간단한 샘플 코드를 다음과 같이 정의해보자. 여기서 의존성 주입을 위한 변수로서 SampleStr를 사용하였다.

추가적으로 스토리보드를 사용하였을 때와 인터페이스 빌더(xib)를 사용하였을때 각각 init()함수의 형태가 조금 다른데 이 부분에 대한 내용을 추후에 정리하고 한다.

class LaunchViewController: UIViewController {
    var sampleStr: String?
    
    init?(coder: NSCoder, sampleStr: String) {
        self.sampleStr = sampleStr
        super.init(coder: coder)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
}

iOS 13을 기준으로 13+ 버전에서 지원하는 호출 방식과 13- 버전에서 지원하는 호출 방식이 조금 다르다.

현재까지 파악한 바로 정리를 우선 해보자면 13- 버전에서는 property injection방식으로서의 주입만 가능한 것으로 파악된다.

if #available(iOS 13.0, *) {
    let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "LaunchViewController", creator: { coder in
        LaunchViewController(coder: coder, sampleStr: "sample!!")
    })
    vc.modalPresentationStyle = .overFullScreen
    self.present(vc, animated: true, completion: nil)
} else {
    guard let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LaunchViewController") as? LaunchViewController else { return true }
    vc.sampleStr = "sample!!"
    vc.modalPresentationStyle = .overFullScreen
    self.present(vc, animated: true, completion: nil)
}

 

'iOS_UI+Ex' 카테고리의 다른 글

UIFont 쉽게 가져다 쓰기(공통으로 빼놓기)  (0) 2022.01.11
UIColor : hexString To UIColor  (0) 2022.01.11