728x90

๋ฒˆ์—ญ 6

[Android] Dependency Injection Part 3. Dagger basics

์ž‘์„ฑ์ผ: 2020.03.02 ์ด ๊ธ€์€ Android Developer ๊ฐ€์ด๋“œ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ ์ฝ”๋“œ๋Š” Kotlin๋งŒ ๊ฐ€์ ธ์™”์œผ๋ฉฐ, Java ์ฝ”๋“œ๋Š” ์›๋ฌธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ์˜์กด์„ฑ ์ฃผ์ž…์ด๋‚˜ Service locator ์‚ฌ์šฉ์€ ํ”„๋กœ์ ํŠธ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Dagger๋ฅผ ์‚ฌ์šฉํ•ด ๋””ํŽœ๋˜์‹œ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋”๋ผ๋„ ๋ณต์žก์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dagger์˜ ์žฅ์  Dagger๋Š” ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šด ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๋„๋ก ์•„๋ž˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Part 2์—์„œ ์ง์ ‘ ๊ตฌํ˜„ํ–ˆ๋˜ AppContainer ์ฝ”๋“œ(application graph) ์ƒ์„ฑ Application graph์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค๋“ค์— ๋Œ€ํ•œ ํŒฉํ† ๋ฆฌ ์ฝ”๋“œ ์ƒ์„ฑ โž” ..

[Android] Dependency Injection Part 2. ์ง์ ‘ ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๊ธฐ

์ž‘์„ฑ์ผ: 2020.01.16 ์ด ๊ธ€์€ Android Developer ๊ฐ€์ด๋“œ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ ์ฝ”๋“œ๋Š” Kotlin๋งŒ ๊ฐ€์ ธ์™”์œผ๋ฉฐ, Java ์ฝ”๋“œ๋Š” ์›๋ฌธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๊ธฐ Android์—์„œ ๊ถŒ์žฅํ•˜๋Š” ์•ฑ ์•„ํ‚คํ…์ฒ˜๋Š” ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ž‘์€ ํด๋ž˜์Šค๋“ค๋กœ ๋”์šฑ ์ชผ๊ฐ  ํ›„, ์‹คํ–‰์„ ์œ„ํ•ด ๊ฐ ๋””ํŽœ๋˜์‹œ๋ฅผ ๋ชจ๋‘ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. MVVM ์•„ํ‚คํ…์ฒ˜๋‚˜ Repository ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, Anemic Repository๋ฅผ ๊ผญ ์ฝ์–ด๋ณด์‹œ๊ธธ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค! ํด๋ž˜์Šค ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋Š” ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , ๊ฐ ํด๋ž˜์Šค๋Š” ์ž์‹ ์ด ์˜์กดํ•˜๋Š” ํด๋ž˜์Šค์™€ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํด๋ž˜์Šค์™€ ์˜์กด๊ด€๊ณ„๋ฅผ ๊ทธ๋ฆฌ๋ฉด ๊ณง ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆผ1์—์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ทธ๋ž˜..

[Android] Dependency Injection Part 1. Overview

์ž‘์„ฑ์ผ: 2020.01.14 ์ด ๊ธ€์€ Android Developer ๊ฐ€์ด๋“œ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ ์ฝ”๋“œ๋Š” Kotlin๋งŒ ๊ฐ€์ ธ์™”์œผ๋ฉฐ, Java ์ฝ”๋“œ๋Š” ์›๋ฌธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž…(Dependency injection, DI)์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ , Android ๊ฐœ๋ฐœ์— ์ ํ•ฉํ•œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. DI์˜ ์›์น™์„ ๋”ฐ๋ฅด๋ฉด ์ข‹์€ ์•ฑ ์•„ํ‚คํ…์ฒ˜์˜ ๊ธฐ๋ฐ˜์„ ๊ฐ–์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DI๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์žฅ์  ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฆฌํŒฉํ† ๋ง ์šฉ์ด ํ…Œ์ŠคํŠธ ์šฉ์ด DI์˜ ๊ธฐ๋ณธ ๊ฐœ๋… Android์—์„œ์˜ DI๋ฅผ ์‚ดํŽด๋ณด๊ธฐ ์ „์—, ์ด ํŒŒํŠธ์—์„œ๋Š” DI์˜ ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ข€ ๋” ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ž€? ํ•œ ํด๋ž˜์Šค์—์„œ ๋‹ค๋ฅธ ํด๋ž˜์Šค ์ฐธ์กฐ๋Š” ์ž์ฃผ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Car ํด๋ž˜์Šค๋Š” Engi..

Android ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ Part 2

์ž‘์„ฑ์ผ: 2019.12.13 ์›๋ฌธ Functional Programming for Android Developers — Part 2์„ ๋ฒˆ์—ญํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ด์ „ ํŒŒํŠธ์—์„œ Purity, Side effects, Ordering์— ๋Œ€ํ•ด ๋ฐฐ์› ๊ณ , ์ด๋ฒˆ ํŒŒํŠธ์—์„œ๋Š” immutability์™€ Concurrency์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Part 1์„ ์•„์ง ์ฝ์ง€ ์•Š์•˜๋‹ค๋ฉด, ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•˜์„ธ์š”. Immutability Immutability๋Š” ๊ฐ’์ด ํ•œ ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ์ ˆ๋Œ€ ๋ฐ”๋€” ์ˆ˜ ์—†๋‹ค๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ Car ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: Java public final class Car { private String name; public Car(final String name) { this.name = name; } pu..

Android ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ Part 1

์ž‘์„ฑ์ผ: 2019.12.05 ์›๋ฌธ Functional Programming for Android Developers — Part 1์„ ๋ฒˆ์—ญํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ด ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š”, Functional Programming (FP)์˜ ๊ธฐ์ดˆ์™€ ์ž๋ฐ”(good old Java)์™€ ์ฝ”ํ‹€๋ฆฐ(new awesome Kotlin)์—์„œ ์–ด๋–ป๊ฒŒ ์“ฐ๋Š”์ง€๋ฅผ ๋ฐฐ์šฐ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ํ•œ ์ด๋ก ์ ์ธ ์ „๋ฌธ ์šฉ์–ด๋Š” ํ”ผํ•ด์„œ ์‹ค์šฉ์ ์ธ ๊ฐœ๋…์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค. FP๋Š” ๋งค์šฐ ํฐ ์ฃผ์ œ๋ผ์„œ Android ์ฝ”๋“œ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…๊ณผ ๋ฐฉ๋ฒ• ์ •๋„๋งŒ ๋‹ค๋ฃจ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Android์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฐœ๋…๋„ ์กฐ๊ธˆ ๋‚˜์˜ค๊ธด ํ•˜๊ฒ ์ง€๋งŒ ์ตœ๋Œ€ํ•œ ๊ด€๋ จ์žˆ๋Š” ๋‚ด์šฉ๋งŒ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ค€๋น„๋˜์…จ๋‚˜์š”? Let’s go! Functional Programming์ด๋ž€ ๋ฌด์—‡์ด๊ณ , ..

[Android] 100% ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ RxJava(RxJava for 100% beginners)-part 1

์ž‘์„ฑ์ผ: 2018.03.07 ์ด ๊ธ€์€ ์›๋ฌธ์„ ๋ฒˆ์—ญํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. RxJava for 100% beginners(part 1) ์š”์ฆˆ์Œ ๋งŽ์€ Android ๊ฐœ๋ฐœ์ž๋“ค์ด “Reactive Programming/RxJava”์˜ ์กด์žฌ๋ฅผ ์ž˜ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ตœ๊ทผ Android Weekly์—๋Š” ๋งค ์ฃผ RxJava์™€ ๊ด€๋ จ๋œ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ๊ฐ€ ํ•ญ์ƒ ์žˆ๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, RxJava์˜ ๋ฌธ๋ฒ•์— ์‚ฌ์šฉ๋œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๋Š” ์ดˆ๋ณด์ž์—๊ฒŒ๋Š” ์กฐ๊ธˆ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Scala์—์„œ๋Š”, RxJava์˜ map(), filter(), flatmap() ๋“ฑ๊ณผ ์œ ์‚ฌํ•œ ์˜คํผ๋ ˆ์ดํ„ฐ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด์ „์— Scalar๋‚˜ (RxJava๊ฐ€ ๊ฐœ๋…๊ณผ ๋ฌธ๋ฒ•์„ ์ฐจ์šฉํ•œ) ๋‹ค๋ฅธ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด๋ดค๋‹ค๋ฉด, ์•„์˜ˆ ์จ๋ณด์ง€ ์•Š..