의존성(종속성) 이란?
위에 사진을 보면 ComputerClass가 CpuClass를 이용하고 있는 것을 볼 수 있습니다
여기서 종속성이 발생하는데 종속성이란 두 클래스가 상호 종속될 때 코드 기반에서 일어나는 상황을 의미합니다
위의 사진을 보고 저희는 2가지를 알 수 있습니다
- ComputerClass가 CpuClass에 의존한다
- CpuClass가 ComputerClass의 종속성이다
위의 두 개의 말 모두 같은 말입니다, 또한 다르게 설명하는 방법이 있습니다
바로 ComputerClass가 클라이언트고 CpuClass가 서비스라고 설명할 수 있습니다
위의 사진같이 말이죠, client, service 용어는 소프트웨어 설계에서 광범위하게 사용합니다
하지만 만약 아래와 같은 상황이면 "어떤 게 클라이언트고 어떤 게 서비스지? "라는 의문이 생길 수 있습니다
CpuClass는 ComputerClass가 사용하기 때문에 서비스라고 할 수 있습니다. 하지만 PartClass관점에서 보면 CpuClass는 클라이언트라고 할 수 있습니다.
이처럼 클라이언트, 서비스 용어는 각각의 상황마다 달라집니다, 때문에 이것을 논의할 때마다 상황의 맥락 등을 확인해야 합니다
클라이언트가 서비스의 참조를 얻는 방법은?
위에 사진처럼 클라이언트가 서비스에 대한 참조를 얻는 방법은 몇 가지가 있습니다
1. 클라이언트는 서비스를 인스턴스화
- 가장 직관적인 접근 방법입니다
- 어디에서나 볼 수 있습니다
2. 정적 메서드를 발행
3. 클라이언트가 정적 글로벌 변수에 접근하여 서비스를 참조
4. 외부에서 3번의 참조를 받는 것
하지만 여기서 처음 1~3번째 옵션은 기본적으로 정적 메서드 호출과 정적 전역 변수가 활성화되어 있습니다.
마지막 4번째는 외부로부터 레퍼런스를 받는 것으로 다소 수동적이라고 할 수 있고 종속성에 대한 참조가 외부에서 클라이언트로 주입되고 있습니다
4번째 이 방법이 바로 의존성 주입입니다!
이제 종속성 주입을 한 문장으로 설명해 보자면
"종속성 주입은 기본적으로 외부에서 클라이언트에게 서비스를 제공하는 것! "이라고 말할 수 있습니다
(의존성 주입과 종속성 주입은 번역의 차이일 뿐 둘 다 같은 말입니다)
의존성 주입 용어
앞에 클라이언트가 서비스를 참조하는 4가지 방법에 대해 소개했습니다. 그중 4번째 의존성 주입 방법에 대해 좀 더 자세히 알아보겠습니다
외부에서 서비스를 주입하는 방법은 3가지가 있습니다
- 생성자 주입
- 메서드 주입
- 필드 주입
생성자 주입
생성자 주입에 대해 설명해 보겠습니다. 우선 코드로 보여드리겠습니다
위 코드대로 작성하면 ClientClass를 구성할 때마다 미리 초기화된 Service1 인스턴스를 제공해줘야 합니다
이것이 생성자 주입입니다!
메서드 주입
위 코드에서 service2를 먼저 선언해두고 나중에 의존성을 주입하고 싶다면 나중에 메서드로 위 코드와 같이 할 수 있습니다. 하지만 Kotlin에서는 이렇게 하는 경우가 거의 없습니다(자바에서 이렇게 한다)
코틀린에서는 대부분 생성자 주입만 사용합니다
'Android' 카테고리의 다른 글
Android Studio 하위 패키지가 겹쳐지는 현상 (0) | 2021.08.27 |
---|---|
bundleOf를 이용한 Activity에서 Fragment로 데이터 전달 방법 (0) | 2021.08.25 |
사진 선택 후 RecyclerView 갱신 (0) | 2021.08.11 |
Android floating action button 아이콘 색깔 변경 (0) | 2021.07.02 |
Fragment에서 Activity로 이동할때 전환 애니메이션 변경하기 (0) | 2021.06.23 |