모듈이란 무엇일까?(선택)

Swift에서 모듈과 구체타입끼리의 의존의 문제점

왕초보 프로그래머가 몰리오를 만든다고 생각해보자

뷰 컨트롤러의 코드에서 플레이리스트들을 fetch하는 API를 바로 호출하는 코드를 짤 수도 있다.

두 개의 모듈로 나눴다고 생각하자

// View.swift 모듈
import MolioAPIModule

final class ViewController: UIViewController {
	let apiService = APIService()
	
	func fetch() async {
		apiService.fetch()
	}
}

// MolioAPIModule.swift 모듈
final class APIService {
	func fetch() async {
		...
	}
}

현재 ViewControllerAPIService이다.

구현체에 의존한다.

우리가 배운 바에 따르면 이제 ViewControllerAPIService의 변경에 영향을 받는다.

APIService의 코드가 변경되면 ViewController의 코드도 변경해야 한다고 생각이 든다.

근데 과연 그럴까..?

APIService의 구현이 바뀌면 항상 ViewController도 수정해야할까?

그렇지 않다.

APIService가 변경되었다고 해서 ViewController가 변경될 부분은 한 곳도 없다.

이는 프로토콜로 의존성 역전을 시킬 때와 전혀 다를 것이 없다.

<aside> 💡

가정: APIServiceProtocol을 만들고 구현체인 APIService가 그걸 채택하도록 한 후 의존성 주입 받는 상황을 가정하자

이렇게 의존성 역전, 의존성 주입을 하더라도 APIService의 내부 구현만 변경되는 상황에서 실제 구현체의 내부 동작만 변한다. 이는 의존성 주입을 하지 않는 아까 상황과 정확히 같다.

</aside>