Dependency Container 만들기
의존성 주입해줘야 하는데, 매번 의존성 주입을 위해 반복되는 작업을 하는게 불편함.
SwiftUI에서 @EnvironmentOjbect를 활용한 처음 작성한 코드를 새롭게 바꿔보고자 함.
글의 순서
- environmentObjcet를 활용한 초기 개발
- 주입할 것들을 구조체로 분리하여 정의
- 주입할 객체 생성하기
- UI구성하는 Builder에 주입하기
environmentObjcet를 활용한 초기 개발
모듈화 전 해당 부분을 처리할 때 SwiftUI에 environmentObject를 활용하고자 함.
- 사유: App Root 영역에서 container를 작성해두면 모든 하위 뷰에서 사용할 수 있기 때문
- 개선하기로 한 이유
- UIKit과 혼용해서 사용할 때 보라색 이슈가 발생하며, 해당 이슈 해결에 어려움.
- 테스트 및 모듈화 과정에서 기존에 익숙하던 방식과 달라 낯설게 느껴짐. 테스트 및 모듈화가 낯설긴 해도 불가능하진 않았음.
- 개선: DependencyContainer 별도로 생성하여 처리할 경우 UIKit과 혼용하여 사용할 수 있는 큰 장점이 존재하여 변경하기로 결정
주입할 것들을 구조체로 분리하여 정의
주입할 객체 생성하기
이미 객체가 존재한다면 해당 서비스에선 굳이 새로운 객체가 생성될 필요가 없기에, 이미 생성된 객체를 반환하도록 설계.
UI구성하는 Builder에 주입하기
UI를 구성하는 Builder에 주입
마무리
SwiftInject 같은걸로 할수도 있었지만, 오픈소스 없이 처음부터 새로운 방식으로 만들어보고자 했었음.
기간을 정해두고 리팩토링을 해서 적정한 수준으로 작업. 현재 사용하지 않을 때 메모리에서 해제하는 로직이 없는데, 이는 추후에 개발 예정.
'project > Funch(넥스터즈)' 카테고리의 다른 글
We do not provide support for this pre-release version. (1) | 2024.09.29 |
---|---|
SwiftUI 하위뷰에서 상위뷰로 DelegatePattern을 활용해 이벤트 전달하기 (0) | 2024.09.29 |
Coordinator 모듈을 통해 UI 모듈간 순환참조 해결하기 (0) | 2024.09.24 |
모듈화 리팩토링 과정에서 고민했던 것들 (2) | 2024.09.24 |
SwiftUI 화면 dismiss 상황에서 흰 화면 나타나는 문제 (1) | 2024.09.22 |