본문 바로가기

iOS

[iOS] 의존성 2 by Escaper

앞서 저는 ViewController에 Method Injection을 사용하였습니다.

  • ViewController는 Constructor Injection을 시도했는데 평범한 클래스랑은 init방식이 다른 것 같음 → 실패

라는 문제가 있었는데. 코드 리뷰중 저희 팀원인 "택현"님이 추가적으로 research하여 이 문제를 해결하였습니다. 공유 공유~~

주입 방법 세가지의 차이점은?

Constructor Injection vs Method Injection, Property Injection

  • Method Injection, Property Injection은 비슷하게 동작하는 것 같음!. 런타임에서 오류를 찾음
  • Constructor Injection은 컴파일단에서 에러를 찾을 수 있음. 컴파일타임에서 오류를 찾음

Constructor Injection을 쓰자!

  • Constructor Injection는 컴파일에서 오류를 찾을 수 있는데 이는 개발자가 인지 못할 경우 컴파일타임에서 찾아주는 장점이 있음.
  • 프로퍼티를 nil로 하지 않아도 됨.

최대한 Constructor Injection로 적용하자!

  • ViewModel, UseCase, Repository 적용
  • ViewController는 Constructor Injection을 시도했는데 평범한 클래스랑은 init방식이 다른 것 같음 → 실패
  • ViewController만 Method Injection적용!

 

택현님이 의존성 주입을 Constructor Injection을 적용 시키는 방법!! 

 

방법 1 - 먼저 init(viewModel:)을 만들고 나머지 init을 fatalError시킨다!!

  • 생성자 주입을 할 수 있지만 fataterror로 처리함으로 Crash에 대한 위험이 있었습니다

 

방법 2 - 방법 1을 보안!! 

  • available을 사용해서 컴파일단에서 오류를 인지하게 만들기!!

 

추가적으로 !! 추상화를 사용하여 ViewModel을 쓰는 ViewController들의 부모 클래스로 만들기!  

 

 

결과는?!

이전에는 ViewController를 만들고 그뒤에 ViewController에 ViewModel을 메서드 주입을 하여서 코드 가독성이 떨어졌는데 생성자 주입을 하고 나니까 순차적으로 읽어져서 너무 좋네요!!

'iOS' 카테고리의 다른 글

[iOS] HashTable, Dictionary  (0) 2022.01.15
[iOS] 의존성 1 by Escaper  (0) 2021.12.06
[iOS] Appearance by Escaper  (0) 2021.12.06
[iOS] 데이터 순서 보장 by Escaper  (1) 2021.12.06
[iOS] - 접근성 - VoiceOver를 도입해보자!  (2) 2021.11.21