BigJeon Android 개발 블로그

Android DI - Hilt(1) 본문

안드로이드(기술)

Android DI - Hilt(1)

Big-Jeon 2024. 6. 14. 16:13
반응형

오늘은 DI가 무엇인지? Android에서 사용을 적극 권장하는 Hilt라이브러리에 대하여 알아보도록 하자.

1. 의존성 주입(DI)란 무엇인가?

우선 DI에 대한 정의부터 알아보도록하자.

의존성 주입(dependency injection)은 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다. 

 

위 글은 나무위키에 올라와 있는  의존성 주입에 대한 설명 첫 줄이다.

개인적으로는 해당 글을 읽고 의존성 주입에 대하여 아는것은 어렵다고 판단 되어서 의존성 주입에 관련하여 공부하던 중 찾았던 좋은 스크립트가 있어 해당 스크립트를 이용해 알아보도록 하겠다.

 

의존성 주입(Dependency Injection)은 객체 지향 프로그래밍에서 중요한 디자인 패턴 중 하나입니다. 의존성 주입은 객체가 필요로 하는 의존 객체를 외부에서 제공(주입)하는 방식으로, 객체 간의 결합도를 낮추는 데 도움을 줍니다.
왜냐하면 의존성 주입을 통해 객체는 자신이 사용할 의존 객체를 직접 생성하지 않고, 외부에서 생성된 객체를 주입받기 때문입니다. 이로 인해 객체는 자신의 구현에만 집중할 수 있으며, 변경에 유연하게 대응할 수 있습니다.

 

위의 밑줄 친 부분이 의존성 주입이자, 의존성 주입 사용 방법이기도 하다.

자신이 사용할 객체를 직접 생성하는 것 이 아닌 외부에서 이미 생성된 객체를 주입 시키는 방식인데, 필자는 약간 Interface사용 하는 목적과 비슷하다고 생각했다.

그렇다면 왜 의존성 주입을 사용하는가??

일단 의존성 주입의 장점과 단점을 알아보고 가도록 하겠다.

 

[장점]

  • 유지 보수성 및 코드 재사용성 증가.
  • 테스트 편의성 증가.
  • 객체간 의존성 저하.
  • 컴파일 시점에 의존성 주입에 대한 코드 생성.

[단점]

  • 러닝 커브 난이도 존재.
  • 소규모 프로젝트의 경우 개발 비용만 증가되는 경우 발생.
  • 설계 및 개발 초기 설정에 대한 어려움.

이렇게 정리 할 수 있을거 같다.

장점의 경우 추후 포스팅에서 예제를 사용하며 다룰 예정이라 이번 포스팅에서는 넘기도록 하겠다.

 

그렇다면 단점을 살펴보겠다.

일단 필자는 단점에 대해서는 뭐....그럴수도 있지 않나???라는 생각이다.

 

1. 러닝 커브 난이도 존재

의 경우...사실....러닝커브 없는게 있나...???그리고 그 러닝 커브를 이겨 내가면서도 사용하는데에는 이유가 있지 않나?라는 생각이라 이게 단점....일 수는 있겠으나 문제는 없다 라고 생각했다.

 

2. 소규모 프로젝트의 경우 개발 비용만 증가되는 경우 발생

의 경우 나는 개발 할 당시 Agile 방식 또는 XP방식의 개발을 지향한다.(Start-UP 개발자였기 때문일수도 있다)

사실 Agile이나 XP방식의 유저 니즈 맞춤형 프로젝트를 구현 할 때는 일단 기능이 수행이 되는것에만 집중을 하게된다.

그 이후 해당 제품의 반응 또는 성적에 따라 추가로 고도화 해나갈 방향성이 정해지는데 이렇다보니 개발 비용이 증가하는 문제가 발생한다느 매우 공감가는 이유였다....필자는 차라리 추후 유지보수성 확대를 위한 리팩토링 시 DI구조를 설계하여 개발하느 방향이 더 맞지 않나 라는 생각을 하였다.

 

3. 설계 및 개발 초기 설정에 대한 어려움.

의 경우 사실 위에 내용과 굉장히 비슷한 이유 때문이라고 생각한다. 그렇기에 따로 집고 넘어가진 않도록 하겠다.

 

2. Hilt(DI)란 무엇인가?

일단 위의 내용으로 간략하게나마 DI는 의존성을 주입 시켜주는 개념이다 라는것을 알게되었다.

하지만 Android DI만 검색을 해봐도 Koin, Dagger2, Hilt등 다양한 DI라이브러리가 존재 하는 것을 알 수 있는데,

Hilt란 그 많은 DI를 쉽게 해주는 라이브러리중 하나일뿐이다.

하지만 왜 사람들이 Hilt를 주로 사용하는것일까? 이에 따른 필자의 의견은 다음과 같다.

 

  • 1. 성능이 Koin에 비해 좋다
  • 2. Google이 적극적으로 사용을 권장하는 라이브러리이다.

사실 처음 DI의 개념을 익히기에는 Koin라이브러리를 사용해서 접근 해 보는게 쉬울 수는 있다, 하지만

리플렉션 사용, 인스턴스 동적 주입등으로 인한 성능저하등의 이슈가 존재하고, Android 공식 문서를 살펴 보면

위와 같이 나와있는 걸 확인해 볼 수 있다.

따라서 필자는 다음 포스팅 부터 Hilt를 이용한 DI 예제 만들어보기를 포스팅 해보고 추후 기회가 된다면 Koin라이브러리 또한 사용해 보고 포스팅 해보도록 하겠다.

 

자세한 Hilt에 관련된 내용과 DI의 원리에 대해서는 다음 포스팅에 이어서 작성 하도록 하겠다.

(알고리즘 공부 이후 이어서 포스팅 하도록 하겠다!)

 

반응형