๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฑ| Android/๐Ÿ“˜ | ๊ธฐ๋ก16

[Android, Kotlin] android์—์„œ Junit์œผ๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ ์ด๋ฒˆ์— ์ •๋ฆฌํ•  ๋‚ด์šฉ์€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์ด๋‹ค. ๋‹ค๋“ค ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ผ๋Š” ๋ง์„ ๋“ค์–ด๋ณธ ์ ์€ ์žˆ์–ด๋„ ์‚ฌ์šฉ๋ฒ•์„ ๋ชฐ๋ผ์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋˜ ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ์„ ๊ฒƒ์ด๊ณ , ์žฅ์ ์— ๋Œ€ํ•ด์„œ๋Š” ๋“ค์—ˆ์ง€๋งŒ ํ™• ์™€๋‹ฟ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํ•„์ž์˜ ๊ฒฝ์šฐ์—๋Š” 2๊ฐ€์ง€ ๋ชจ๋‘ ํ•ด๋‹น์‚ฌํ•ญ์ด์—ˆ๋‹ค ใ…Žใ…Ž ํ•˜์ง€๋งŒ ์ด๋ฒˆ์— ์นœ๊ตฌ๋“ค์ด๋ž‘ ํ•˜๋Š” ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์—์„œ ํŒŒํŠธ๋ณ„ ๊ฐœ๋ฐœ์„ ํ•˜๋˜ ์ค‘ ๋‚ด๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž˜ ์ž‘์„ฑํ•˜๊ณ  ์žˆ๋Š” ๊ฑธ๊นŒ?๋ผ๋Š” ์˜๋ฌธ์ด ๋“ค์–ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ณ  ์ด๋ฒˆ ๊ธฐํšŒ์— ํฌ์ŠคํŒ…์œผ๋กœ ๋‚จ๊ฒจ๋ณผ๊นŒ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฐ”๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๊ณ  ์ฝ”๋“œ ์˜ˆ์ œ๋กœ ๊ฐ™์ด ํ™•์ธํ•ด ๋ณด๋„๋ก ํ•˜์ž. 1. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ด์œ ? ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ํŠน์ • ๋กœ์ง์„ ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ๊ธฐ๋Šฅ์˜ ๋ฌธ์ œ๋‚˜ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์•„๋‚ด ์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ๋œปํ•œ๋‹ค. ํ…Œ์Šค.. 2023. 9. 28.
[Android, Kotlin] ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ line chart ๋งŒ๋“ค๊ธฐ ์ด๋ฒˆ์— ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์€ android studio์—์„œ ์ฐจํŠธ(๊ทธ๋ž˜ํ”„)๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด ๋ณด์•˜๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์— ์ฐจํŠธ ๋งŒ๋“ค๊ธฐ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค. ์‚ฌ์‹ค ์ž‘๋…„์—๋„ ์ฐจํŠธ๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒฝํ—˜์ด ์žˆ์—ˆ์ง€๋งŒ, ์ด๋ฒˆ์— ๋‹ค์‹œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ฒผ๊ธฐ์— ์ด๋ฒˆ ๊ธฐํšŒ์— ์ •๋ฆฌํ•ด ๋ณด๋ ค ํ•œ๋‹ค.(์ž‘๋…„์— ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์„ ๊ฑฐ์˜ ๋‹ค ๊นŒ๋จน์–ด์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๊ณต๋ถ€ํ–ˆ์—ˆ๋‹ค >:( ) ์ฐจํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ๋‹ค๋ฅธ ๋ถ„๋“ค์ด ๋งŒ๋“ค์–ด์ค€ ์ฐจํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํŽธํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ƒฅ android chart library๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•ด๋„ ๋‹ค๋ฅธ ๋ถ„๋“ค์ด ์ด๋ฏธ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉ ์ค‘์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‹ค์ˆ˜ ์กด์žฌํ•œ๋‹ค. ์•„๋‹ˆ๋ฉด ์ž์‹ ์ด ์ง์ ‘ custom ํ•ด์„œ ๋งŒ๋“ค๊ณ  ์‹ถ์œผ๋ฉด android์—์„œ ์ œ๊ณตํ•˜๋Š” canvas๋ฅผ ์ด์šฉํ•ด .. 2023. 9. 28.
[Android, Kotlin] android์—์„œ in-app updates๋กœ ์•ฑ ์—…๋ฐ์ดํŠธ ๊ด€๋ฆฌํ•˜๊ธฐ ์ด๋ฒˆ์— ์ •๋ฆฌํ•  ์ฃผ์ œ๋Š” ๋ฐ”๋กœ ์•ฑ ์—…๋ฐ์ดํŠธ์— ๊ด€ํ•œ ์‚ฌํ•ญ์ด๋‹ค. ๋‚ด๊ฐ€ ์ด๋ฒˆ์— ์•ฑ ์—…๋ฐ์ดํŠธ์— ๊ด€ํ•ด ์ •๋ฆฌ๋ฅผ ํ•œ ์ด์œ ๋Š” ํ•„์ž๊ฐ€ ์•ฑ์„ ํ•˜๋‚˜ ์ถœ์‹œํ•˜์˜€๋Š”๋ฐ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์‚ฌ์šฉ์ž๋“ค์ด ์•ฑ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งŽ์ด ๋ณด์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 0. ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ? ์ด๋Ÿฐ ๊ฒฝ์šฐ ์•ฑ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ์ƒ๊ด€์—†๋‹ค๋Š” ์ด์•ผ๊ธฐ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒˆ ๋ฒ„์ „์„ ์ถœ์‹œํ•˜๋ฉด์„œ ์ˆ˜์ •ํ–ˆ๋˜ ์˜ค๋ฅ˜๋ฅผ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜์ง€ ์•Š์€ ๊ธฐ์กด ์•ฑ์—์„œ๋Š” ๊ทธ๋Œ€๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋‚จ์•„์žˆ์„ ํ™•๋ฅ ์ด ๋†’๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๊ธฐํšŒ์— ๊ตฌ๊ธ€์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ in-app updates๋ฅผ ์ด์šฉํ•ด์„œ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒฝํ—˜์„ ๊ธฐ๋ก์œผ๋กœ ๋‚จ๊ฒจ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. 1. in-app updates๋Š” ๋ฌด์—‡์ผ๊นŒ? in-app updates๋Š” ๊ตฌ๊ธ€์—์„œ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ ๋‚ด.. 2023. 9. 9.
[Android, Kotlin] exoplayer์™€ media3๋ฅผ ์ด์šฉํ•ด ์˜์ƒ ์žฌ์ƒํ•˜๊ธฐ ์ด๋ฒˆ์—๋Š” ํ•„์ž๊ฐ€ ์ž์ฃผ ์‹œ์ฒญํ•˜๋Š” youtube๋ฅผ ๋ณด๊ณ  youtube๊ฐ€ exoplayer๋ฅผ ์ด์šฉํ•ด ์ œ์ž‘๋˜์—ˆ๋‹ค๋Š” ๋ง์„ ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒˆ ๊ธฐํšŒ์— exoplayer๋ฅผ ๊ณต๋ถ€ํ•ด ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ด๋ฒˆ์˜ exoplayer ์˜ˆ์ œ๋Š” ํ”„๋กœ์ ํŠธ ์•ˆ์˜ mp4 ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ณผ์ •์„ ๋‹ด์•˜๋‹ค. ์ฐธ๊ณ ๋กœ ํ˜„์žฌ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” compose๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•ด ๋ณด๊ฒ ๋‹ค. exoplayer๋ž€ ๋ฌด์—‡์ผ๊นŒ? exoplayer๋Š” android์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฏธ๋””์–ด ์žฌ์ƒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. 1. dependency ์ถ”๊ฐ€ exoplayer์™€ media3์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด dependency๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. // exoplayer compose implementation("com.google.android.exoplayer:exoplayer:2.19.1") impl.. 2023. 8. 25.
[Android] MVI ํŒจํ„ด์€ ๋ฌด์—‡์ผ๊นŒ? ์š”์ฆ˜์€ compose๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ถ”์„ธ์ด๋‹ค. ํ•„์ž๋„ compose๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ํ•„์ž๊ฐ€ ์ง€์ธ๋“ค์—๊ฒŒ compose์™€ mvi๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค๋Š” ์†Œ์‹์„ ๋“ฃ๊ณ  ๋ฐ”๋กœ mvi ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค. ์ง€๊ธˆ ๋ฐ”๋กœ mvi์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. 1. mvi๋ž€? mvi ์•„ํ‚คํ…์ฒ˜๋Š” mvc, mvp, mvvm์™€ ๊ฐ™์€ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž๋“ค์˜ ๊ฐœ๋ฐœ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์˜ ์ผ์ข…์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. mvi์˜ ๊ตฌ์กฐ๋Š” model - view - intent๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ๊ฐ layer๋Š” ์„œ๋กœ ์™„์ „ํžˆ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค. sideEffects๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…(api ํ†ต์‹ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•  ๋กœ์ง)๊ณผ ์ธ์Šคํ„ด์Šค ๋ทฐ(screen ๊ฐ„ ์ด๋™, toast์™€ dialog)๋“ฑ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. sideEffects.. 2023. 8. 21.
[Android, Kotlin] Android clean architecture ํ”„๋กœ์ ํŠธ์—์„œ api ์—๋Ÿฌ ํ•ธ๋“ค๋งํ•˜๊ธฐ clean architecture ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์ƒํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด api error ์ฒ˜๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜๊ณ  ์žˆ๋Š”๊ฐ€? ์˜ˆ์ „์˜ ํ•„์ž๋Š” ๊ทธ๋ƒฅ ๋ฌด์ง€์„ฑ์œผ๋กœ(?) presentation layer์— try catch๋ฅผ ์ด์šฉํ•ด ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ์—ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ, ์ผ์ผ์ด try catch๋ฌธ์„ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ๊ณผ presentation layer์—์„œ๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‚˜ ์ด๋Ÿฐ ์˜๋ฌธ๋“ค์ด ๋“ค๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ clean architecture project์—์„œ api error handling logic์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณต๋ถ€ํ•˜๊ณ  ์ ์–ด๋ณด์•˜๋‹ค. 1. error handling ๋กœ์ง์€ ์–ด๋–ค layer์— ์ž‘์„ฑ๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€?? ํ•„์ž๋Š” data layer์—์„œ http status code์— ๋”ฐ๋ฅธ ์˜ˆ.. 2023. 8. 1.
[Android, Kotlin] Android MVVM ๋‹ค๋ค„๋ณด๊ธฐ ์ด๋ฒˆ์— ํ•„์ž๊ฐ€ ๊ณต๋ถ€ํ•ด๋ณธ ๊ฒƒ์€ MVVM์ด๋‹ค. MVVM์€ View - Model - ViewModel์˜ ์•ฝ์ž์ธ๊ฑด ๋‹ค ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ์‹ค์ด๋‹ˆ ๊ทธ๋ƒฅ ๋„˜๊ธฐ๊ณ (?) ํ•„์ž๋Š” ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ์‚ฌ์šฉํ•ด์™”๋˜ ์•ˆ๋“œ๋กœ์ด๋“œ ์•„ํ‚คํ…์ฒ˜์ด์ง€๋งŒ ์“ฐ๋Š” ์ด์œ ์™€ ๊ฐ ํŒŒ์ผ๋“ค์ด ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์œ„ํ•œ ํŒŒ์ผ๋“ค์ธ์ง€ ์ž˜ ์•Œ์ง€ ๋ชปํ–ˆ๊ธฐ์— ์ด๋ฒˆ ๊ธฐํšŒ์— ์ œ๋ฐ๋กœ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. 1. MVVM์˜ ๊ตฌ์กฐ MVVM์€ ์ด๋ฆ„์—์„œ๋„ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด View, Model, ViewModel๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. View: ์ด๋ฒคํŠธ ๋ฐœ์ƒ, liveData ๊ฐ์ง€ํ•ด ๋ทฐ์— ์ถœ๋ ฅํ•œ๋‹ค(์ถœ๋ ฅ์‹ธ๊ฐœ). Model: ์‹ค์ง์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ณณ(DB, Api ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜(?)ํ•œ๋‹ค.) ViewModel: ํ”„๋กœ์ ํŠธ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ด€๋ฆฌํ•œ๋‹ค(Api ํ˜ธ์ถœ, DBํ˜ธ์ถœ ์ด๋Ÿฐ๊ฑฐ). ์ฃผ์˜ํ•  ์ ์€ View์™€ Mod.. 2023. 3. 18.
[Android, Kotlin] Zxing ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ QR์ฝ”๋“œ ์Šค์บ”ํ•˜๊ธฐ ์˜ค๋žœ๋งŒ์— ํฌ์ŠคํŒ…์„ ํ•ด๋ณธ๋‹ค. ์š”์ฆ˜ ์ข€ ๋ฐ”๋น ์„œ ใ…Žใ…Ž(์‚ฌ์‹ค ๊ท€์ฐฎ๊ธฐ๋„ ํ–ˆ๊ณ  ๊นŒ๋จน์—ˆ์–ด์„œ ๋ชป ์˜ฌ๋ ธ๋‹ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.) ์•„๋ฌดํŠผ ์ด๋ฒˆ์— ์‚ฌ์šฉํ•ด ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” zxing ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ๋ฐ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์— QR์ฝ”๋“œ ์Šค์บ” ๊ธฐ๋Šฅ์ด ๋“ค์–ด๊ฐˆ ์˜ˆ์ •์ด๋ผ ๊ฒ€์ƒ‰์„ ํ•ด๋ดค๋”๋‹ˆ, Zxing ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๊ธธ๋ž˜ ๋ฐ”๋กœ ์‚ฌ์šฉํ•ด ๋ณด์•˜๋‹ค(ํ—คํ—ค) ๊ฐœ์†Œ๋ฆฌ๋Š” ์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๊ณ  ๋ฐ”๋กœ Zxing์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž 1. dependency ์ถ”๊ฐ€,์„ธํŒ… build.gradle(app)build.gradle(app) // zxing implementation 'com.journeyapps:zxing-android-embedded:4.2.0' // circle imageview(์˜ˆ์ œ์—์„œ ์‚ฌ์šฉ) implementation 'de.hdodenhof:circleimageview:3.. 2023. 3. 11.
[Android, Kotlin] android custom dialog ๋งŒ๋“ค๊ธฐ custom dialog๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์ž์ฃผ ์“ฐ์ด๋Š” ํŒ์—… ์ฐฝ์„ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ํ•„์ž๋„ ๋งŽ์ด ์ž์ฃผ ์“ฐ์ง€๋งŒ, ๋งŽ์ด ๊นŒ๋จน๊ธฐ(?) ๋•Œ๋ฌธ์— ์ด๋ฒˆ์— ๊ธฐ๋ก์„ ๋‚จ๊ฒจ๋ณด๋ ค ํ•œ๋‹ค. custom dialog ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• 1. custom dialog๋กœ ์‚ฌ์šฉํ•  xml ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ ๋จผ์ € dialog์˜ xml๋กœ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค. 2. ๋‹ค์ด์–ผ๋กœ๊ทธ ์ƒ์„ฑํ•˜๊ธฐ ์ผ๋‹จ ํ•„์ž๋Š” ๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ๋ทฐ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ๊ตฌํ˜„ ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ž˜๋“ค์— ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค. viewBinding { enabled = true } ๊ทธ ๋‹ค์Œ์— ๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.(ํ•„์ž๋Š” fragment์— ๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.) activity?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) v.. 2022. 11. 20.
[Android, Kotlin] Android์—์„œ Apollo๋ฅผ ์ด์šฉํ•œ GraphQL์‚ฌ์šฉํ•˜๊ธฐ ํ˜„์žฌ ํ•„์ž๋Š” graphql๋ฅผ ์ด์šฉํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ค€๋น„ ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์— graphql์„ ์ด์šฉํ•œ apollo์— ๋Œ€ํ•ด ๋‚ด๊ฐ€ ๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. Apollo๋Š” android์—์„œ graphql์„ ๋” ์‰ฝ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. 1. Apollo ์„ค์น˜ํ•˜๊ธฐ apollo๋ฅผ android์—์„œ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” node.js๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค. https://javacpro.tistory.com/62 [Node.js] Node.js ์„ค์น˜ํ•˜๊ธฐ (Windows10) Node.js ์„ค์น˜ํ•˜๊ธฐ Node.js ์„ค์น˜๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค . ์šฐ์„  ์•„๋ž˜ URL ์„ ๋”ฐ๋ผ Node.js ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•œ๋‹ค. https://nodejs.org/en/ ๊ทธ๋Ÿผ ์œ„์™€ ๊ฐ™์ด ํ™”๋ฉด์ด ๋‚˜์˜ค๋Š”๋ฐ ๋จผ์ € ์ขŒ์ธก์œผ๋กœ๋Š” ์ตœ์‹ ๋ฒ„์ „ ์ธ๋ฐ ๊ฐœ๋ฐœ๊ณต๋ถ€๋ฅผ ๋ชฉ.. 2022. 10. 23.
[Android, Kotlin] editText์˜ toggle icon์ด ๋ฐ˜๋Œ€๋กœ ๋˜์—ˆ์„ ๋•Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• TextInputEditText ๊ธฐ๋ณธ edittext์™€ ๋‹ค๋ฅด๊ฒŒ ๋” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” edit text์˜ ํ•œ ์ข…๋ฅ˜์ด๋‹ค. TextInputEditText์—๋Š” ๊ฐ€๋ ค์•ผ ํ•  ํ…์ŠคํŠธ(๋น„๋ฐ€๋ฒˆํ˜ธ)๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ passwordToggleEnabled๋ผ๋Š” ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ passwordToggleEnabled ์„ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ์ด์ƒํ•œ ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋ฐ”๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋ณด์ด์ง€๋งŒ ์•„์ด์ฝ˜์€ ๋ˆˆ์„ ๊ฐ€๋ฆฌ๊ณ (?) ์žˆ๊ฒŒ ๋œจ๋Š” ๋ฌธ์ œ! ์ด๋ฒˆ์—๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๋‚ด๊ฐ€ ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํฌ์ŠคํŒ…์„ ํ•˜๊ฒ ๋‹ค. ๋จผ์ € toggle icon์ด ํด๋ฆญ๋˜์—ˆ์„ ๋•Œ ๋‚˜์˜ค๊ฒŒ ํ•˜๋Š” ์•„์ด์ฝ˜๋“ค์„ ์„ค์ •ํ•œ๋‹ค. toogle_icon_status.xml ํด๋ฆญ๋˜์—ˆ๊ฑฐ๋‚˜ ์•„๋‹ ๋•Œ์˜ ์•„์ด์ฝ˜์€ ์•„๋ฌด๊ฑฐ๋‚˜ ์ •ํ•ด๋„ ์ƒ๊ด€์—†๋‹ค. ํ˜„์žฌ edittext๊ฐ€ ์žˆ๋Š” xml ํŒŒ์ผ.. 2022. 8. 31.
[Android/Kotlin] retrofit2 ์ •๋ฆฌ ์˜ค๋Š˜ ์˜ˆ์ œ๋Š” http์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ retrofit์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค. 1. gradle ์ถ”๊ฐ€ implementation "com.squareup.retrofit2:retrofit:2.9.0" implementation "com.squareup.retrofit2:converter-gson:2.9.0" 2. api service api ๊ตฌํ˜„์€ ๋ฐ•์Šค์˜คํ”ผ์Šค ์˜ํ™” ์ˆœ์œ„๋ฅผ ์˜ˆ๋กœ ๋“ค๊ฒ ๋‹ค. interface RetrofitInterface { @GET("http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json") fun getBoxOffice( @Query("key") key: String?, @Query("ta.. 2022. 5. 13.
[Android] ํ™”๋ฉด ์ด๋™ ๋ฐฉ๋ฒ• ์ •๋ฆฌ ์ด๋ฒˆ ์˜ˆ์ œ๋Š” ๋‚ด๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ํ™”๋ฉด ์ „ํ™˜ ๋ฐฉ๋ฒ•๋“ค์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค. 1. intent๋ฅผ ์ด์šฉํ•œ ํ™”๋ฉด์ด๋™ intent๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ƒ๊ฐ๋ณด๋‹ค ๊ตฌ๊ธ€์— ๋งŽ์ด ๋‚˜์™€์žˆ์–ด ์‰ฝ๊ฒŒ ์•Œ์•„๋‚ผ์ˆ˜ ์žˆ๋‹ค. // ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ intent ์‚ฌ์šฉ ๋ฐฉ๋ฒ• val intent = Intent(this, SecondActivity::class.java) startActivity(intent) ์ด๊ฑด ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ intent ์‚ฌ์šฉ๋ฒ•์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ € ์˜ˆ์ œ ์ฝ”๋“œ๋Š” startActivity(this, SecondActivity::class.java)๋กœ ๋ฐ”๊ฟ” ์“ธ์ˆ˜ ์žˆ๋‹ค. 1-1. putExtra putExtra๋Š” intent๋ฅผ ์‚ฌ์šฉํ• ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๋ฉ”์„œ๋“œ๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค. class MainActivity: Appcompat.. 2022. 4. 12.
[Android Kotlin] radio button ์˜ˆ์ œ ์˜ค๋Š˜์€ ๋‚ด๊ฐ€ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ radio button ์ด ํด๋ฆญ๋œ ๊ฒƒ์˜ ํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์™€์„œ textView์— ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ๋‹ค. ๋จผ์ € ๋‚˜๋Š” ์ปค์Šคํ…€ ๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ทธ๊ฒƒ์„ view binding์„ ํ†ตํ•ด ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— build.gradle์— ์ถ”๊ฐ€๋ฅผ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. build.gradle(app) plugin { ... } android { ... buildFeatures { viewBinding = true } } dependencies { .... } ๋ทฐ ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์€ ์—ฌ๊ธฐ์„œ ์ž์„ธํžˆ ์•Œ๋ ค์ฃผ์ง€ ์•Š์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ๊ณต๋ถ€ํ•˜๊ณ  ์˜ค์‹œ๊ธธ ๋ฐ”๋ž€๋‹ค. ๊ทธ ๋‹ค์Œ dialog์— ์“ฐ์ผ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค์–ด ์ฃผ๋„๋ก ํ•˜์ž custom_dualog_set_standard.x.. 2022. 4. 11.
[Android] Clean Architecture ๊ธฐ๋ก ์˜ค๋Š˜์€ ๋‚ด๊ฐ€ Clean Architecture๋ฅผ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. Clean Architecture๋ž€? Clean Architecture๋Š” Robert C. Martin์ด๋ผ๋Š” ์‚ฌ๋žŒ์ด 2012๋…„์— ์ œ์‹œํ•œ ๊ฐœ๋…์œผ๋กœ, ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฅ˜ํ•ด์„œ ์–ป๋Š” ์žฅ์ ์€ ํ”„๋กœ์ ํŠธ ์œ ์ง€, ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ ์šฉ์ด ๋นจ๋ผ์ง„๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ์šฉ์ดํ•˜๋‹ค. ๋“ฑ ์—ฌ๋Ÿฌ ์žฅ์ ๋“ค์ด ์žˆ๋‹ค. ์•„๋ž˜์˜ ์‚ฌ์ง„์œผ๋กœ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ๊ตฌ์กฐ๋ฅผ ์‚ดํŽด๋ณด์ž ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋Š” 4๊ฐ€์ง€์˜ ๊ณ„์ธต์œผ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค. Entity User Cases Controllers UI ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ๋ฐ”๊นฅ ๊ณ„์ธต์ด ์•ˆ์ชฝ ๊ณ„์ธต์— ์˜์กด์„ฑ์„ ๊ฐ€์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. android ๊ธฐ์ค€์œผ๋กœ ๋ณด๊ธฐ์—๋Š” ์–ด๋ ค์›€์ด ์žˆ์–ด .. 2022. 4. 1.
728x90