๊นจ์•Œ ๊ฐœ๋… ๐Ÿ“‘/Android 82

[Android] Unit Testing - Room๊ณผ LiveData

#1 ์ด์ „ ๊ธ€#1-1 Unit Testing ๊ฐœ์š” [Android] Unit Testing - ๊ฐœ์š”์™€ ํ™˜๊ฒฝ ์„ค์ •#1 ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ํ…Œ์ŠคํŠธ#1-1 ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ํ…Œ์ŠคํŠธ์˜ ์ข…๋ฅ˜๋จผ์ €, ์—ฌ๊ธฐ์— ์žˆ๋Š” ๊ตฌ๊ธ€ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ์ฝ์œผ๋ฉด ์ข‹๋‹ค. ํ•ด๋‹น ๊ตฌ๊ธ€ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ๋ณต์‚ฌํ•ด์˜จ ์œ„์˜ ๊ทธ๋ฆผkenel.tistory.com์œ„ ๋งํฌ์— ์žˆ๋Š” ์ด์ „ ๊ฒŒ์‹œ๊ธ€์— ์ด์–ด์„œ, ์‹ค์ œ ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด Room ๋ฐ LiveData์˜ Unit Testing์„ ์ˆ˜ํ–‰ํ•ด๋ณธ๋‹ค. ๋ณธ ๊ฒŒ์‹œ๊ธ€์„ ์ฝ๊ธฐ ์ „์— [Android] Unit Testing - ๊ธฐ์ดˆ๋ฅผ ๋ณด๊ณ  ์˜ค๋ฉด ์ดํ•ด์— ๋„์›€์ด ๋œ๋‹ค. #1-2 ํ™˜๊ฒฝ ์„ค์ • (build.gradle ๋“ฑ)์ด์ „ ๊ฒŒ์‹œ๊ธ€์˜ #3์„ ํ† ๋Œ€๋กœ ๋ณธ ๊ฒŒ์‹œ๊ธ€์— ๋‚˜์˜ค๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ์˜ Gradle..

[Android] Unit Testing - ViewModel

#1 ์ด์ „ ๊ธ€#1-1 Unit Testing ๊ฐœ์š” [Android] Unit Testing - ๊ฐœ์š”์™€ ํ™˜๊ฒฝ ์„ค์ •#1 ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ํ…Œ์ŠคํŠธ#1-1 ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ํ…Œ์ŠคํŠธ์˜ ์ข…๋ฅ˜๋จผ์ €, ์—ฌ๊ธฐ์— ์žˆ๋Š” ๊ตฌ๊ธ€ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ์ฝ์œผ๋ฉด ์ข‹๋‹ค. ํ•ด๋‹น ๊ตฌ๊ธ€ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ๋ณต์‚ฌํ•ด์˜จ ์œ„์˜ ๊ทธ๋ฆผkenel.tistory.com์œ„ ๋งํฌ์— ์žˆ๋Š” ์ด์ „ ๊ฒŒ์‹œ๊ธ€์— ์ด์–ด์„œ, ์‹ค์ œ ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด ViewModel์˜ Unit Testing์„ ์ˆ˜ํ–‰ํ•ด๋ณธ๋‹ค. ๋ณธ ๊ฒŒ์‹œ๊ธ€์„ ์ฝ๊ธฐ ์ „์— [Android] Unit Testing - ๊ธฐ์ดˆ๋ฅผ ๋ณด๊ณ  ์˜ค๋ฉด ์ดํ•ด์— ๋„์›€์ด ๋œ๋‹ค. #1-2 ํ™˜๊ฒฝ ์„ค์ • (build.gradle ๋“ฑ)์ด์ „ ๊ฒŒ์‹œ๊ธ€์˜ #3์„ ํ† ๋Œ€๋กœ ๋ณธ ๊ฒŒ์‹œ๊ธ€์— ๋‚˜์˜ค๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ์˜ Gradle, AGP,..

[Android] Unit Testing - ๊ธฐ์ดˆ

#1 ์ด์ „ ๊ธ€#1-1 Unit Testing ๊ฐœ์š” [Android] Unit Testing - ๊ฐœ์š”์™€ ํ™˜๊ฒฝ ์„ค์ •#1 ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ํ…Œ์ŠคํŠธ#1-1 ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ํ…Œ์ŠคํŠธ์˜ ์ข…๋ฅ˜๋จผ์ €, ์—ฌ๊ธฐ์— ์žˆ๋Š” ๊ตฌ๊ธ€ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ์ฝ์œผ๋ฉด ์ข‹๋‹ค. ํ•ด๋‹น ๊ตฌ๊ธ€ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ๋ณต์‚ฌํ•ด์˜จ ์œ„์˜ ๊ทธ๋ฆผkenel.tistory.com์œ„ ๋งํฌ์— ์žˆ๋Š” ์ด์ „ ๊ฒŒ์‹œ๊ธ€์— ์ด์–ด์„œ, ์‹ค์ œ ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๊ธฐ์ดˆ์ ์ธ ์•ˆ๋“œ๋กœ์ด๋“œ Unit Testing์„ ์ˆ˜ํ–‰ํ•ด๋ณธ๋‹ค. #1-2 ํ™˜๊ฒฝ ์„ค์ • (build.gradle ๋“ฑ)์ด์ „ ๊ฒŒ์‹œ๊ธ€์˜ #3์„ ํ† ๋Œ€๋กœ ๋ณธ ๊ฒŒ์‹œ๊ธ€์— ๋‚˜์˜ค๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ์˜ Gradle, AGP, JDK์˜ ๋ฒ„์ „ ์„ค์ • ๋ฐ build.gradle ์„ค์ •์„ ์ง„ํ–‰ํ•œ๋‹ค. ์ด์ „ ๊ฒŒ์‹œ๊ธ€์˜ build.gradle๊ณผ ๋‹ฌ..

[Android] Unit Testing - ๊ฐœ์š”์™€ ํ™˜๊ฒฝ ์„ค์ •

#1 ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ํ…Œ์ŠคํŠธ#1-1 ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ํ…Œ์ŠคํŠธ์˜ ์ข…๋ฅ˜๋จผ์ €, ์—ฌ๊ธฐ์— ์žˆ๋Š” ๊ตฌ๊ธ€ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ์ฝ์œผ๋ฉด ์ข‹๋‹ค. ํ•ด๋‹น ๊ตฌ๊ธ€ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ๋ณต์‚ฌํ•ด์˜จ ์œ„์˜ ๊ทธ๋ฆผ์€ ํ…Œ์ŠคํŠธ๋ฅผ ์ด 3๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„๊ณ  ์žˆ๋‹ค. ๋จผ์ € Unit test๋Š” ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค ๋“ฑ์˜ ์•ฑ์˜ ์•„์ฃผ ์ž‘์€ ๋ถ€๋ถ„์„ ๊ฒ€์ฆํ•˜๋Š” ํ…Œ์ŠคํŠธ๊ณ , ๋ณธ ๊ฒŒ์‹œ๊ธ€์—์„œ ๋‹ค๋ฃฐ ๋‚ด์šฉ์ด๋‹ค. ๋‘๋ฒˆ์งธ๋Š” Integration(ํ†ตํ•ฉ) test๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™, API ํ˜ธ์ถœ ๋“ฑ ๋ชจ๋“ˆ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฒ€์ฆํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์€ End-to-end(๋๊ณผ ๋์„ ๋ถ™์ด๋Š”) test๋‹ค. ์ „์ฒด ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ(๋) ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ(์ž˜ ๋ถ™๋Š” ์ง€)์„ ํ™•์ธํ•œ๋‹ค. End-to-end test์—์„œ์˜ '๊ตฌ์„ฑ ์š”์†Œ'๋Š” ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด๋‚˜ ์‹œ๋‚˜๋ฆฌ์˜ค ๋“ฑ๊นŒ์ง€ ํฌํ•จํ•œ๋‹ค. Integr..

[Android] Dagger2 - Application ํ™œ์šฉํ•˜๊ธฐ

#1 ์ด์ „ ๊ธ€ [Android] Dagger2 - ๊ธฐ์ดˆ#1 ์ด์ „ ๊ธ€ ์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)#1 ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์ด๋ž€?#1-1 Dependent์™€ Dependencyfun main() { val car = Car() car.startCar() } class Car { private val engine = Engine() private val airbag = Airbag() privatekenel.tistory.com์œ„ ๊ฒŒ์‹œ๊ธ€์˜ ์™„์„ฑ๋œ ์•ฑ์„ ์ผ๋ถ€ ์ˆ˜์ •ํ•ด์„œ, Application์„ ํ™œ์šฉํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด, @Component ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ์ค‘๋ณต ํ˜ธ์ถœ์„ ์ œ๊ฑฐํ•œ๋‹ค. #2 Application์˜ ํ™œ์šฉ์„ฑ Application  |  Androi..

[Android] Dagger2 - Activity์— Dependency ์ฃผ์ž…

#1 ์ด์ „ ๊ธ€ [Android] Dagger2 - ๊ธฐ์ดˆ#1 ์ด์ „ ๊ธ€ ์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)#1 ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์ด๋ž€?#1-1 Dependent์™€ Dependencyfun main() { val car = Car() car.startCar() } class Car { private val engine = Engine() private val airbag = Airbag() privatekenel.tistory.com์œ„ ๊ฒŒ์‹œ๊ธ€์˜ ์™„์„ฑ๋œ ์•ฑ์„ ์ผ๋ถ€ ์ˆ˜์ •ํ•ด์„œ, 'Activity์— ์˜์กด์„ฑ์„ ์ฃผ์ž…'ํ•ด๋ณธ๋‹ค. ์ด ๋ง์˜ ์˜๋ฏธ๋Š” #3-1์— ๋‚˜์˜จ๋‹ค.  #2 @Component ์ธํ„ฐํŽ˜์ด์Šค ์† getter์˜ ๋ถˆํŽธํ•จ// package com.example.activ..

[Android] Dagger2 - ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ฒด ์ฃผ์ž… (@Binds)

#1 ์ด์ „ ๊ธ€ [Android] Dagger2 - ๊ธฐ์ดˆ#1 ์ด์ „ ๊ธ€ ์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)#1 ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์ด๋ž€?#1-1 Dependent์™€ Dependencyfun main() { val car = Car() car.startCar() } class Car { private val engine = Engine() private val airbag = Airbag() privatekenel.tistory.com์œ„ ๊ฒŒ์‹œ๊ธ€์˜ ์™„์„ฑ๋œ ์•ฑ์„ ์ผ๋ถ€ ์ˆ˜์ •ํ•ด์„œ, Interface๋ฅผ Dependency๋กœ ์ฃผ์ž…ํ•ด๋ณธ๋‹ค. #2 ์ฝ”๋“œ ์ˆ˜์ • - ์ง๊ด€์ ์ธ ๋ฒ„์ „#2-1 ๊ฐœ์š” [Android] Dagger2 - ๋งค๊ฐœ๋ณ€์ˆ˜#1 ์ด์ „ ๊ธ€ [Android] Dagger2 ..

[Android] Dagger2 - ๋งค๊ฐœ๋ณ€์ˆ˜ ๋™์  ํ• ๋‹น

#1 ์ด์ „ ๊ธ€ [Android] Dagger2 - @Provides#1 ์ด์ „ ๊ธ€ [Android] Dagger2 - ๊ธฐ์ดˆ#1 ์ด์ „ ๊ธ€ ์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)#1 ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์ด๋ž€?#1-1 Dependent์™€ Dependencyfun main() { val car = Car() car.startCar() } class Car { private val engine = Enginekenel.tistory.com์œ„ ๊ฒŒ์‹œ๊ธ€์˜ ์™„์„ฑ๋œ ์•ฑ์„ ์ผ๋ถ€ ์ˆ˜์ •ํ•ด์„œ, @Provides ๋˜๋Š” @Module์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋งŒ๋“ค์–ด๋ณธ๋‹ค.  Dagger ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ @Provides ๋˜๋Š” @Module์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € dagger..

[Android] Dagger2 - @Provides

#1 ์ด์ „ ๊ธ€ [Android] Dagger2 - ๊ธฐ์ดˆ#1 ์ด์ „ ๊ธ€ ์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)#1 ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์ด๋ž€?#1-1 Dependent์™€ Dependencyfun main() { val car = Car() car.startCar() } class Car { private val engine = Engine() private val airbag = Airbag() private kenel.tistory.com์œ„ ๊ฒŒ์‹œ๊ธ€์˜ ์™„์„ฑ๋œ ์•ฑ์„ ์ผ๋ถ€ ์ˆ˜์ •ํ•ด์„œ, @Inject๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์˜ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ•ด๊ฒฐํ•ด๋ณธ๋‹ค. #2 @Provides์ด์ „ ๊ธ€์—์„  ์ƒ์„ฑ์ž์— @Inject๋ฅผ ๋ถ™์˜€๊ณ , ๊ทธ๊ฒƒ์€ dagger๊ฐ€ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ•˜๋Š” ๋ช…์‹œ์ ์ธ ํ‘œ์‹œ..

[Android] Dagger2 - ๊ธฐ์ดˆ

#1 ์ด์ „ ๊ธ€ ์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)#1 ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์ด๋ž€?#1-1 Dependent์™€ Dependencyfun main() { val car = Car() car.startCar() } class Car { private val engine = Engine() private val airbag = Airbag() private val battery = Battery() fun startCar() { engine.startEkenel.tistory.com๋ณธ ๊ฒŒ์‹œ๊ธ€์„ ์ดํ•ดํ•˜๋ ค๋ฉด ๋จผ์ €, ์˜์กด์„ฑ ์ฃผ์ž…์— ๋Œ€ํ•ด ์“ด ์ด์ „ ๊ฒŒ์‹œ๊ธ€์„ ์ฝ์–ด์•ผ ํ•œ๋‹ค. ๋˜, ์ด์ „ ๊ฒŒ์‹œ๊ธ€์˜ ์ฝ”๋“œ๋ฅผ ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ๋กœ Migrationํ•ด์„œ ๋ณธ ๊ฒŒ์‹œ๊ธ€์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. #2..