class NetworkClient {
// 네트워크 연결을 진행하는데, 에러가 뜨는 메소드
tryConnect(): void {
throw new Error('no network!');
}
}
class UserService {
// DI!!
constructor(private client: NetworkClient) {}
// DI로 받은 tryConnect()메소드를 사용하고 login()하는 함수
login() {
this.client.tryConnect()
}
}
class App {
// DI!!
constructor(private userService: UserService) {}
run(){
this.userService.login()
}
}
NetworkClient ⇒ UserService ⇒ App 의 형태인 것입니다
그렇지만 App 에서 NetworkClient의 tryConnect()를 사용할 수는 없습니다
NetworkClient ⇒ UserService ⇒ App 형태로 DI가 됐는데
App에서 주입받은 UserService가 NetworkClient를 주입받고 있다고 해서, App에서 NetworkClient의 것까지 사용할 수는 없는 것입니다
물론, 상속을 하거나 인터페이스를 사용하게 되면 App에서 NetworkClient의 것까지 사용이 가능하게 되지만, 기본적으로는 사용이 안 된다는 것입니다
상속 사용시
class NetworkClient {
// 네트워크 연결을 진행하는데, 에러가 뜨는 메소드
tryConnect(): void {
throw new Error('no network!');
}
}
class UserService **extends NetworkClient**{
// DI!!
constructor(private client: NetworkClient) {
super()
}
// DI로 받은 tryConnect()메소드를 사용하고 login()하는 함수
login() {
this.client.tryConnect()
}
}
class App {
// DI!!
constructor(private userService: UserService) {}
run(){
this.userService**.tryConnect()**
}
}