project/Funch(넥스터즈)

Dependency Container 만들기

lgvv 2024. 9. 29. 04:19

Dependency Container 만들기

 

의존성 주입해줘야 하는데, 매번 의존성 주입을 위해 반복되는 작업을 하는게 불편함.

SwiftUI에서 @EnvironmentOjbect를 활용한 처음 작성한 코드를 새롭게 바꿔보고자 함.

 

글의 순서

  • environmentObjcet를 활용한 초기 개발
  • 주입할 것들을 구조체로 분리하여 정의
  • 주입할 객체 생성하기
  • UI구성하는 Builder에 주입하기

 

environmentObjcet를 활용한 초기 개발

 

모듈화 전 해당 부분을 처리할 때 SwiftUI에 environmentObject를 활용하고자 함.

  • 사유: App Root 영역에서 container를 작성해두면 모든 하위 뷰에서 사용할 수 있기 때문
  • 개선하기로 한 이유
    • UIKit과 혼용해서 사용할 때 보라색 이슈가 발생하며, 해당 이슈 해결에 어려움.
    • 테스트 및 모듈화 과정에서 기존에 익숙하던 방식과 달라 낯설게 느껴짐. 테스트 및 모듈화가 낯설긴 해도 불가능하진 않았음.
  • 개선: DependencyContainer 별도로 생성하여 처리할 경우 UIKit과 혼용하여 사용할 수 있는 큰 장점이 존재하여 변경하기로 결정

 

리팩토링 전

 

주입할 것들을 구조체로 분리하여 정의

디펜던시 컨테이너에 필요한 부분 구조체로 묶어서 생성

 

 

 

 

주입할 객체 생성하기

이미 객체가 존재한다면 해당 서비스에선 굳이 새로운 객체가 생성될 필요가 없기에, 이미 생성된 객체를 반환하도록 설계.

객체 생성

 

 

UI구성하는 Builder에 주입하기

UI를 구성하는 Builder에 주입

 

UI Builder에 주입

 

 

 

 

 

마무리

SwiftInject 같은걸로 할수도 있었지만, 오픈소스 없이 처음부터 새로운 방식으로 만들어보고자 했었음.

기간을 정해두고 리팩토링을 해서 적정한 수준으로 작업. 현재 사용하지 않을 때 메모리에서 해제하는 로직이 없는데, 이는 추후에 개발 예정.