inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Kiến trúc sạch iOS & MVVM: Làm chủ RxSwift

Tạo UIViewController bằng code

의존성 주입에 관하여 질문있습니다.

Đã giải quyết

252

hoon

13 câu hỏi đã được viết

0

let coredata = UserCoreData(viewContext: appDelegate.persistentContainer.viewContext)
let network = UserNetwork(manager: NetworkManager(session: UserSession()))
let userRP = UserRepository(coreData: coredata, network: network)
// Domain Layer
let userUC = UserListUsecase(respository: userRP)
let userVM = UserListViewModel(usecase: userUC)
// Presentation Layer
let userVC = UserListViewController(viewModel: userVM)

하나의 뷰 컨트롤러를 생성 시 ViewModel, UseCase, Repository, Network, CoreData 등 주입할 요소가 많아지는 것을 느꼈습니다.

그렇다면 화면전환을 수행할 때마다 뷰 컨트롤러를 생성하게 되는데 매번 해당 컨트롤러에 의존성을 주입해주어야 하나요?

또한 Network, CoreData 등 동일한 객체를 유지하기 위해서 이전화면의 ViewModel 객체를 다음화면의 ViewModel로 넘겨주면 될까요?

궁극적으로 실무에서 사용하는 방식을 알고 싶습니다.

ios swift 객체지향 mvvm 클린-아키텍처

Câu trả lời 2

0

dumveloper

네 맞습니다 의존성주입을 위해서 전환시 모두 객체 생성하여야 합니다

그렇게되면 뷰컨트롤러가 커지게될수 있는데 coordinator 패턴을 사용한다면 coordinator 내부에서 모든 객체 생성 및 네비게이션을 구현하고 뷰컨트롤러에서 coordinator 의존하여 사용하시면 됩니다

이전화면과 다음화면에 데이터가 유지되어야하거나 같은 프로세스인경우(ex 회원가입 이메일입력-> 비민번호입력 ) 뷰모델을 공유하기도하지만 각각 다른 기능 을 가진다면 각각 뷰모델을

가져가는게 좋아보입니다!

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.
hoon님께서 질문하신 의존성 주입과 관련된 내용입니다.

의존성을 주입하는 과정에서 발생할 수 있는 문제는 각 컴포넌트 간의 결합도 증가와 코드의 복잡성이 있습니다. 이를 해결하기 위한 몇 가지 방식이 있습니다:

  1. 의존성 주입 프레임워크 사용: Swift에서는 Swinject이나 Resolver 같은 DI(Dependency Injection) 프레임워크를 사용할 수 있습니다. 이러한 프레임워크는 코드에서 수작업으로 주입하는 과정을 자동화하여 결합도를 줄이고 코드의 가독성을 높여줍니다.

  2. 공유 싱글톤 사용: NetworkCoreData와 같이 애플리케이션 전반에서 동일한 객체를 사용할 경우, 싱글톤 패턴을 적용할 수 있습니다. 이는 특정 객체가 하나만 존재해야 할 때 유용합니다. 하지만, 싱글톤 패턴의 사용은 유지보수와 테스트에 어려움을 줄 수 있으므로, 상황에 맞게 신중히 사용해야 합니다.

  3. 화면 간 데이터 전달: ViewModel 객체를 화면 전환 시 다음 화면에 전달하는 것은 좋은 방법이 될 수 있습니다. 다만, 이 경우 ViewModel이 비대해질 수 있으므로, 각 화면의 성격에 맞게 ViewModel을 분리하고 필요한 데이터나 의존성만을 전달하는 것이 좋습니다.

관련된 사례나 구현 방식에 대한 더 깊은 이해를 위해서는 아래의 질문들을 참고하시는 것을 추천드립니다:
- MVVM 패턴 구현에서 rx binding관련 질문입니다.
- Swift Modern Collection View에서 click event 처리에 관하여 고민이 됩니다

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

run() 메서드 안에 지역변수 sum을 사용한 이유

0

5

0

강의 화면이 안나와요

0

33

0

중급 과정 학습 중 복습과 진도 진행의 우선순위에 대해 질문드립니다

0

35

1

빠져나오기 위해서 System.in을 닫는다는게 무슨 의민가요??

0

32

1

Static 선언 시 에러 발생

0

39

1

문제2번

0

41

1

클로저의 형태로 만들다

0

43

1

Function Types Error

0

34

1

안드로이드 기기 실행 오류

0

45

2

중복 코드와 유지보수성 사이에서 어떤 기준으로 리팩토링해야 할지 궁금합니다

0

35

1

static 변수를 호출할때 인스턴스변수 호출하듯이 호출해도 되나요?

0

52

1

수강연장 가능할까요...

0

54

2

강의에서 사용된 안드로이드 스튜디오 버전을 알고싶어요.

0

56

2

SwiftData 미리보기 미적용

0

53

2

중괄호와 함수

0

56

2

회원 도메인 인터페이스 개발

0

51

1

코드 버그

0

37

1

유즈케이스 프로토콜과 구현체의 분리 이유

0

267

2

즐겨찾기 탭에서 페이지네이션 422 서버 에러

0

268

2

NetworkManager의 tokenHeader 관련 질문 드립니다!

0

186

1

[클린 아키텍쳐] 로컬 Json 파싱

0

235

1

강의 자료는 어디서 받을수 있나요?

0

197

1

안녕하세요 페이지네이션 구현 강의 중 질문있습니다.

0

235

2

강의 질문있습니다.

0

194

1