제이슨의 개발이야기
의존성 이란? 의존성 주입이란 무엇인가? Dependency Injection 본문
안녕하세요!
오늘은 DI 프레임워크를 공부하기 전
의존성 과 의존성 주입은 무엇인지 먼저 공부하려고 합니다!
의존성이란 무엇인가??
객체지향언어에서는 두 클래스 간 관계를 의미 합니다 조금 더 쉽게 이야기 하자면
두 클래스가 서로를 알고 있는 냐에 따라 의존하는지 안하는지 가 결정됩니다
위의 이미지를 보면 MainViewModel에서 AServerRepository 객체를 생성합니다
이것은 MainViewModel이 AServerRepository 클래스에 의존하다고 할 수 있습니다
이런 의존관계가 형성되면 문제가 발생하는대
만약 AServerRepository 가 아닌 BServerRepository 로 바꿔야한다면
객체 생성도 BServerRpository로 바꿔야 하고
MainViewModel 에 있는 getData() 메소드도 수정해야하는 번거로움이 생긴다
지금은 수정해야하는 코드의 양이 많진 않지만
의존관계의 수가 많아지면 많아질수록 나중에 유지보수 단계에서 시간이 많이 들고 오류가 발생할 가능성이 많고 생산성이 떨어집니다!
그래서 해결법은 Interface를 이용해서 구현하는 건대
AServerRepository 와 BServerRepository가 Repository 인터페이스를 구현하면
Repository(Interface) 구현한 두 클래스가 같은 혀태로 같은 기능을 하도록 강제할 수 있고 다향성을 이용해 안전하고 편하게 코드를 수정할 수 있습니다!
그리고 기존에는 ViewModel에서 직접 Repository객체를 생성했다면
생성자를 통해서 객체를 주입하는 방식으로 바꾸면 코드 수정할 때 (AServerRepository->BServerRepositry 바꿀때) ViewModel의 코드를 수정 할 필요 가 없고 외부에서 주입해주면 됩니다
이렇게 외부에서 객체를 주입하는 것을
의존성 주입(Dependency Injection) 이라고 합니다!!
이러한 코딩 방식은
변동성이 큰 클래스를 참조하는 것을 지양하고
비교적 안정적인 인터페이스를 참조하는 것이 좋습니다!!
'컴퓨터과학' 카테고리의 다른 글
코틀린 scope 함수에 대해서 apply , run , with , also , let (0) | 2022.11.19 |
---|---|
SOLID 원칙이란? 재대로 공부하자 (0) | 2022.11.11 |
보일러플레이트 코드(Boilerplate code) 란 무엇인가? (0) | 2021.08.26 |
Git Commit Message 규칙 (0) | 2021.08.17 |
Gson 라이브러리는 무엇일까? 간단한 JSON 형 변환JSON-> Data Model , Model->JSON (0) | 2021.08.11 |