본문 바로가기
Android

의존성 주입이란?

by 안솝우화 2021. 8. 24.
반응형

의존성(종속성) 이란?

의존성 예시

위에 사진을 보면 ComputerClass가 CpuClass를 이용하고 있는 것을 볼 수 있습니다

 

여기서 종속성이 발생하는데 종속성이란 두 클래스가 상호 종속될 때 코드 기반에서 일어나는 상황을 의미합니다

위의 사진을 보고 저희는 2가지를 알 수 있습니다

  1. ComputerClass가 CpuClass에 의존한다
  2. CpuClass가 ComputerClass의 종속성이다

위의 두 개의 말 모두 같은 말입니다, 또한 다르게 설명하는 방법이 있습니다

바로 ComputerClass가 클라이언트CpuClass가 서비스라고 설명할 수 있습니다

위의 사진같이 말이죠, client, service 용어는 소프트웨어 설계에서 광범위하게 사용합니다

하지만 만약 아래와 같은 상황이면 "어떤 게 클라이언트고 어떤 게 서비스지? "라는 의문이 생길 수 있습니다

좀더 복잡한 시나리오

CpuClass는 ComputerClass가 사용하기 때문에 서비스라고 할 수 있습니다. 하지만 PartClass관점에서 보면 CpuClass는 클라이언트라고 할 수 있습니다.

이처럼 클라이언트, 서비스 용어는 각각의 상황마다 달라집니다, 때문에 이것을 논의할 때마다 상황의 맥락 등을 확인해야 합니다

 

 

 


클라이언트가 서비스의 참조를 얻는 방법은?

 

 

위에 사진처럼 클라이언트가 서비스에 대한 참조를 얻는 방법은 몇 가지가 있습니다

1. 클라이언트는 서비스를 인스턴스화

  • 가장 직관적인 접근 방법입니다
  • 어디에서나 볼 수 있습니다

2. 정적 메서드를 발행

3. 클라이언트가 정적 글로벌 변수에 접근하여 서비스를 참조

4. 외부에서 3번의 참조를 받는 것

 

하지만 여기서 처음 1~3번째 옵션은 기본적으로 정적 메서드 호출과 정적 전역 변수가 활성화되어 있습니다.

마지막 4번째는 외부로부터 레퍼런스를 받는 것으로 다소 수동적이라고 할 수 있고 종속성에 대한 참조가 외부에서 클라이언트로 주입되고 있습니다

 

4번째 이 방법이 바로 의존성 주입입니다!

 

이제 종속성 주입을 한 문장으로 설명해 보자면

"종속성 주입은 기본적으로 외부에서 클라이언트에게 서비스를 제공하는 것! "이라고 말할 수 있습니다

 

(의존성 주입과 종속성 주입은 번역의 차이일 뿐 둘 다 같은 말입니다)

 


의존성 주입 용어

 

 

앞에 클라이언트가 서비스를 참조하는 4가지 방법에 대해 소개했습니다. 그중 4번째 의존성 주입 방법에 대해 좀 더 자세히 알아보겠습니다

외부에서 서비스를 주입하는 방법은 3가지가 있습니다

  1. 생성자 주입
  2. 메서드 주입
  3. 필드 주입

생성자 주입

 

생성자 주입에 대해 설명해 보겠습니다. 우선 코드로 보여드리겠습니다

 

 

위 코드대로 작성하면 ClientClass를 구성할 때마다 미리 초기화된 Service1 인스턴스를 제공해줘야 합니다

이것이 생성자 주입입니다!

 

메서드 주입

 

 

위 코드에서 service2를 먼저 선언해두고 나중에 의존성을 주입하고 싶다면 나중에 메서드로 위 코드와 같이 할 수 있습니다. 하지만 Kotlin에서는 이렇게 하는 경우가 거의 없습니다(자바에서 이렇게 한다)

코틀린에서는 대부분 생성자 주입만 사용합니다

 

반응형