| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- Hilt
- include태그
- 공공데이터포털리사이클러뷰
- 안드로이드 스튜디오 API
- kotlin
- 프론트엔드
- SpringBoot
- SpringWebFlux
- 리사이클러뷰
- 안드로이드스튜디오
- glide
- hilt오류
- 안드로이드 스튜디오
- 안드로이드로딩창
- include이벤트처리
- 자바
- 데이터바인딩
- 안드로이드 스튜디오 JAVA
- 종속항목삽입
- Today
- Total
내일은개발왕
[안드로이드 스튜디오] Hilt에 대해 알아보자(1) - 종속 항목 삽입이 뭔데? 본문
사용하면 항상 오류나는 친구 Hilt를 데리고 왔다. 얘 사용했는데 오류안나면 무서움 이젠...
감사운동 sns개발하면서 알게된 기술이고, 일단 사용하면 저절로 객체 만들어서 관리해주기 때문에 편해서 사용했었다. 근데 무슨 원리인지는 자세히 모르고 사용했다....히히
함께할 친구인데 모르면 안되기에 한번 알아봅시다 🧐
혼자 공부 한것이기에, 틀린 내용이 있을 수 있습니다!!
1. DI (종속 항목 삽입)
Hilt를 검색하면 공식 문서에서 보게 되는 단어가 있다. 바로 DI라는 친구다.
DI는 종속 항목 삽입 이라는 뜻인데, 단어로만 보면 뭔말인지 모르겠으니 공식 문서에 나온 말을 조금 더 살펴보자
클래스에는 흔히 다른 클래스 참조가 필요합니다.
예를 들어 Car클래스는 Engine클래스 참조가 필요할 수 있습니다.
이처럼 필요한 클래스를 종속 항목이라고 하며, 이 예에서 Car클래스가 실행되기 위해서는 Engine 클래스의 인스턴스가 있어야 합니다.
오.. 이렇게 보니 아래처럼 한줄로 요약할 수 있을 것 같다.
종속 항목 삽입이란 다른 클래스에서 필요한 부분을 가져오기 위해 해당 인스턴스를 추가해주는 것이라는 것
공식 문서의 예제를 보면 아래는 DI에 해당하지 않는다고 한다.
class Car {
private val engine = Engine() //클래스 내에서 직접 생성함
fun start() {
engine.start()
}
}
fun main(args: Array
클래스 내에서 직접 인스턴스를 생성하고 있다!!
왜 이게 해당하지 않냐면 기존에 생성된 것이 아니기 때문이다.
음... 솔직히 잘 이해가 안가서 좀 더 찾아보았다.
먼저, 종속의 뜻은 사전적으로 아래와 같다.
문장의 구성 성분으로서 다른 부분에 대하여 주술, 수식, 조건적 접속 따위의 관계로 결합하는 일. 또는 그런 방식.
(네이버 어학사전)
어떤 하나와 다른 하나가 결합하는 것을 종속이라고 한다는데, 필요할 때마다 여러 클래스에서 인스턴스를 생성하니 이는 중복이 된다. 그렇기에 이는 종속한다고 보기 어려운 것 같다고 이해할 수 있다.
그래서 위처럼 직접 생성하는 방식은 DI가 아니다!
2. DI의 종류
종속 항목 삽입에도 종류가 있다!
총 2가지로 나뉘어 지는데, 아래 사진과 같다.

먼저, 생성자 삽입에 대해 알아보자
생성자 삽입
class Car(private val engine: Engine) {
fun start() {
engine.start()
}
}
위 코드도 공식 문서에 있는 코드다.
보면 Car 라는 클래스에서 매개변수로 Engine이라는 생성자를 받는다.
직접 생성하는 것이 아니라 외부에서 받는 형식이기 때문에 의존성이 약하다는 것을 알 수 있다.
왜냐면 수정시 engine만 수정하면 되기 때문이다
필드 삽입
class Car {
lateinit var engine: Engine
fun start() {
engine.start()
}
}
위 코드를 보면 lateinit var를 사용하는 걸 볼 수 있다. Class생성 후, 추후에 추가한다는 말이다.
필드 삽입의 경우, Activity나 Fragment를 생성할 때 사용한다고 한다.
왜 이럴때만 사용하는 것인지 공식 문서에선 아래와 같이 설명하고 있다.
활동 및 프래그먼트와 같은 특정 Android 프레임워크 클래스는 시스템에서 인스턴스화하므로
생성자 삽입이 불가능합니다.
프레임워크에서 관리해서 생성자 삽입이 불가능 하다는게 무슨말인가???? 싶다..
일단 액티비티, 프래그먼트에는 생명주기가 존재한다.
코드를 짤 때 우리가 항상 보는 onCreate() 이게 생명주기의 한 종류다.
즉, 프레임워크에선 이미 정해진 생명주기라는 틀이 있고, 이에 맞춰 알아서 액티비티와 프래그먼트를 생성한다.
이는 절대적이다.
그런 절대적인 부분에 우리가 임의로 다른 생성자를 추가한다면..? 당연히 오류가 발생할수밖에 없다. 불순물이니까
그래서 화면을 생성할 땐, 아무것도 건들이지 말고 class를 먼저 생성한 후 주입을 시켜주어 오류를 방지하는 것이다.
3. DI 사용시 이점?
- 코드 재사용 가능
- 리팩토링 편의성
- 테스트 편의성
이에 대한 이점은 공식 문서에 적혀져 있는 것이다.
솔직히 말해서 리팩토링 편의성, 테스트 편의성은 아직 겪어보지 못해 와닿지는 않는다.
하지만 코드 재사용 가능은 확실히 와닿았다.
한번 생성해두면 주입만 시켜두면 되었기 때문이다. (이건 2탄에서 다루겠다..)
그래서, 불필요하게 객체를 생성시킬 일이 없었고, 이미 만들어진걸 사용할 수 있어 코드가 간결해진걸 경험했었다.

일단 Hilt를 자세히 공부하기 전에, 기초지식인 DI에 대해 알아보았다.
다음 포스팅은 Hilt에 대해 적어보겠다
참고자료
https://developer.android.com/training/dependency-injection?hl=ko#kotlin
Android의 종속 항목 삽입 | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. Android의 종속 항목 삽입 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 종속 항목 삽입(DI)은 프로그래
developer.android.com
https://developer.android.com/codelabs/android-hilt?hl=ko#0
Android 앱에서 Hilt 사용 | Android Developers
이 Codelab에서는 Hilt를 사용하여 종속 항목 삽입을 실행하는 Android 앱을 빌드해 보겠습니다.
developer.android.com
'프론트앤드' 카테고리의 다른 글
| [안드로이드 스튜디오] ProgressBar가..죽었네? 로딩창 직접 만들자 (0) | 2024.07.01 |
|---|---|
| [안드로이드 스튜디오] include 태 그 조 아. (1) | 2024.03.03 |
| 안드로이드 스튜디오 - 리사이클러뷰를 이용해서 사용자가 입력한 값 대로 공공데이터 포털 API에서 결과값 가져오기 - (2) (0) | 2023.06.24 |
| 선박 입출항 조회 기능 영상 (0) | 2023.01.17 |
| 안드로이드 스튜디오 - 리사이클러뷰를 이용해서 사용자가 입력한 값 대로 공공데이터 포털 API에서 결과값 가져오기 - (1) (0) | 2023.01.17 |