๊พธ์ค€ํ•จ์ด ์ง„๋ฆฌ๋‹ค!!

์–ด์ œ๋ณด๋‹ค ๋ฐœ์ „ํ•œ ์˜ค๋Š˜์ด ๋˜๊ณ ํ”ˆ ๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ์˜ ๋ธ”๋กœ๊ทธ

Android 34

[Kotlin] Kotlin Property ๋’ท๋ฐ›์นจ ํ•„๋“œ(Backing Field)์˜ ์‚ฌ์šฉ๋ฒ•

์•ˆ๋…•ํ•˜์„ธ์š” Backing Filed(๋’ท๋ฐ›์นจ ํ•„๋“œ)์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  Java์—์„œ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์„ Kotlin์—์„œ๋Š” Property(์†์„ฑ)์ด๋ผ๊ณ  ์นญํ•ฉ๋‹ˆ๋‹ค. Kotlin์—์„œ๋Š” ์„ ์–ธ ํ‚ค์›Œ๋“œ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์ ‘๊ทผ์ž ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ฒŒ ๋˜๋Š”๋ฐ, - val ์˜ ๊ฒฝ์šฐ : getter ๋งŒ ์กด์žฌ - var ์˜ ๊ฒฝ์šฐ : setter / getter ๋‘˜ ๋‹ค ์กด์žฌ ์ƒ์„ฑ๋˜๋Š” ๋ฐฉ์‹์€ ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. Backing Field๋Š” ์œ„ setter / getter๋ฅผ ์žฌ์ •์˜ํ•˜์—ฌ ์†์„ฑ๊ฐ’์„ ์ˆ˜์ • , ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉฐ ์„ค๋ช… ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. class Person{ val name = "DEV yo" get() = field.uppercase(Locale.getDefaul..

Tutorial/tutorial 2022.09.21

[Java][Android] Android ViewTreeObserVer onGlobalLayoutListener ํ™œ์šฉํ•˜๊ธฐ

์˜ค๋Š˜๋„ ํšŒ์‚ฌ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ •๋ฆฌ ์ค‘ ์•ฑ์ด destory ๋˜์—ˆ์Œ์—๋„ porifler์—์„œ ์ธ์Šคํ„ด์Šค๋“ค์„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ํ™•์ธ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. GC๋ฅผ ์•„๋ฌด๋ฆฌ ๋Œ๋ ค๋„ ์ฐธ์กฐ๊ฐ€ ํ•ด์ œ ๋˜์ง€ ์•Š์•„ ํ•ด๋‹น ๋ถ€๋ถ„์„ ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ MainView์—์„œ ViewTressObeserver์— onGlobalLayoutListener๋ฅผ ๋“ฑ๋กํ•œ ๊ฒƒ์ด ํ•ด์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์˜๋ฏธ๋กœ ์˜ค๋Š˜์€ ViewTreeObserver๊ฐ€ ๋ญ”์ง€ ๋˜ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ์™œ ViewTreeObserver์—์„œ ์ฐธ์กฐ๊ฐ€ ํ•ด์ œ๊ฐ€ ๋˜์ง€ ์•Š์•˜๋Š”์ง€์— ๋Œ€ํ•ด ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜Ž ViewTreeObserver๋ž€ ๋ฌด์—‡์ธ๊ฐ€? A view tree observer is used to register listeners that can be notified of..

Android/Java 2022.08.24

[Java][Android] ์•ˆ๋“œ๋กœ์ด๋“œ InputMethodManager ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(leak) ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

์˜ค๋Š˜์€ ํšŒ์‚ฌ์—์„œ ๊ทผ๋ฌด์ค‘์— ๋ฐœ๊ฒฌํ•œ InputMethodManager์— ๊ด€๋ จํ•œ Memory Leak์— ๋Œ€ํ•ด ํฌ์ŠคํŒ… ํ•˜๋ คํ•ฉ๋‹ˆ๋‹ค. ์ž์ฒด์ ์œผ๋กœ ์•ฑ์— ๋Œ€ํ•ด ๋ฉ”๋ชจ๋ฆฌ Leak๋ถ€๋ถ„์ด ์žˆ๋Š”์ง€ ํ™•์ธ์ค‘ dumpsys ํ™•์ธ๊ฒฐ๊ณผ GC๊ฐ€ ๋Œ์•„๋„ Activites์™€ View๊ฐ€ ๋ฆด๋ฆฌ์ฆˆ ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ์ ์ด ๋ฐœ๊ฒฌ๋˜์–ด ์•ฝ 1๋‹ฌ ๋™์•ˆ ํ•ด๋งธ์Šต๋‹ˆ๋‹ค.. ํ˜„์žฌ ์ œ๊ฐ€ ๊ทผ๋ฌดํ•˜๋Š” ํšŒ์‚ฌ์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฒ„์ „์€ Android4.4(KitKat)๋กœ ๋งค์šฐ ์˜›๋‚  ๋ฒ„์ „์ด๋‹ค๋ณด๋‹ˆ Profiler๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•ด ๋” ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋˜๊ฒƒ์ด๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์„๊ฒ๋‹ˆ๋‹ค. (๋ณ€๋ช… ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.) Profiler๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฒ„์ „์—์„œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ดํ›„ ์ถ”๊ฐ€์ ์œผ๋กœ ํฌ์ŠคํŒ… ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Profiler ํ™•์ธ ๊ฒฐ๊ณผ ๋ฉ”๋ชจ๋ฆฌ Leak์ด 2๊ฑด ๋ฐœ์ƒ ํ•˜์˜€๊ณ ..

Android/Java 2022.07.13

[Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ ๋กœํ‹ฐ์• ๋‹ˆ๋ฉ”์ด์…˜(Lottie Animation) ํ™œ์šฉํ•˜๊ธฐ

๋จผ์ € ๋กœํ‹ฐ์• ๋‹ˆ๋ฉ”์ด์…˜์ด๋ž€ After Effect์—์„œ ์ œ์ž‘ํ•œ Motion Graphic์„ ์–ดํ”Œ๋ฆฌ์ผ€์…˜์—์„œ ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์จ OOM(OUT OF MEMORY)์— ๋Œ€ํ•ด์„œ๋„ ์‹ ๊ฒฝ์„ ๋งŽ์ด ์“ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค. ๋กœํ‹ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ์— ์•ž์„œ ๋ชจ๋“ˆ gradle ํŒŒ์ผ์— dependency๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. dependencies { ... def lottieVersion = '์‚ฌ์šฉํ•  ๋ฒ„์ „' implementation "com.airbnb.android:lottie:$lottieVersion" ... } ์œ„์™€ ๊ฐ™์ด ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋˜๋ฉฐ ๊ธ€์“ด์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋‹น์‹œ ์ตœ์‹ ๋ฒ„์ „์„ ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ์ •๋ณด๋Š” http://airbnb.io/lottie/#/android?id=sample-app๋ฅผ ํ†ตํ•ด ํ™•..

Android/Kotlin 2022.03.21