ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

ํ•™์Šต/CS

Sealed class vs Sealed interface vs Enum

Sealed classsealed class๋Š” ๊ฐ™์€ ๋ชจ๋“ˆ์˜ ๊ฐ™์€ ํŒจํ‚ค์ง€์—์„œ๋งŒ ์ƒ์†ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค๋กœ, ์œ ํ•œํ•œ ๊ฐœ์ˆ˜์˜ subclass๋กœ ๊ตฌ์„ฑ๋œ closed type hierarchy๋ฅผ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค๋‹ค. ๋˜ํ•œ ์ƒ์†์€ ๋Ÿฐํƒ€์ž„์ด ์•„๋‹Œ ์ปดํŒŒ์ผ ํƒ€์ž„์—๋งŒ ํ—ˆ์šฉ๋œ๋‹ค. ๊ทธ๋ž˜์„œ third-party ์ฝ”๋“œ์—์„œ sealed class๋ฅผ ์ƒ์†ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค. abstract class์™€ ๋Œ€๋น„๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด MyResult๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋Š” ํŒจํ‚ค์ง€์™€ ๋‹ค๋ฅธ a ํŒจํ‚ค์ง€์— ์ •์˜๋˜์–ด ์žˆ๋Š” MyResponse ํด๋ž˜์Šค๊ฐ€ MyResult Sealed class๋ฅผ ์ƒ์†ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. Inheritor of sealed class or interface declared in packa..

2024.03.05 ๊ฒŒ์‹œ๋จ

TIL

240304 TIL

์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ Kotlin In Action 5.1, 5.2 Android ์˜์กด์„ฑ ์ฃผ์ž… ๊ฐ•์˜ 1-3, 2-1 Android ๊ตฌํ˜„ ์—ฐ์Šต - RecyclerView ViewHolder์˜ viewLifecycleOwner์— ๋”ฐ๋ผ CoroutineScope ์‹คํ–‰ํ•˜๊ธฐ : ์•„๋ž˜ ๋งํฌ๋Š” ์ฐธ๊ณ ํ–ˆ๋˜ ๋ธ”๋กœ๊ทธ ๊ธ€์ธ๋ฐ, ์•ž์œผ๋กœ Trouble Shooting๊ณผ android deep dive ํ•™์Šต ๋ฐฉํ–ฅ์˜ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์„ ๊ฒƒ์ด๋‹ค. https://hodie.tistory.com/116 - Data class๋ฅผ Json String์œผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ SharedPreferences์— String์œผ๋กœ ์ €์žฅํ•˜๊ธฐ : ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋กœ ์ด ๊ตฌํ˜„์€ ์ž ์‹œ ๋ฏธ๋ฃจ๊ณ , ์˜์กด์„ฑ ์ฃผ์ž… ๊ฐ•์˜๋ฅผ ๋นจ๋ฆฌ ์ˆ˜๊ฐ•ํ•œ ํ›„, ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋‹ค์‹œ ์ ์šฉํ•ด์•ผ ํ•จ ์˜ค๋Š˜..

2024.03.04 ๊ฒŒ์‹œ๋จ

TIL

1์ฃผ์ฐจ KPT

Keep : ์ž˜ํ•˜๊ณ  ์žˆ๋Š” ์ . ๊ณ„์† ํ–ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค ์‹ถ์€ ์ . ๋‚˜์—๊ฒŒ ์ต์ˆ™ํ•œ, ํŽธํ•œ ๊ณต๋ถ€๊ฐ€ ์•„๋‹Œ, ์–ด๋ ค์šด, ํ•˜๊ธฐ ์‹ซ์€, ๋ถˆํŽธํ•œ ๊ฒƒ ์œ„์ฃผ๋กœ ํ•™์Šตํ•˜๊ธฐ -> ํ˜„์žฌ ์ž˜ํ•˜๋Š” ๊ฒƒ์„ ๋” ์ž˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ชปํ•˜๋Š” ๊ฒƒ์„ ์ž˜ํ•˜๋Š” ์ˆ˜์ค€๊นŒ์ง€ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค Problem : ๋ญ”๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค ์‹ถ์€ ์ . ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•œ ์ . ์ฝ”ํ…Œ ํšจ์œจ์ ์œผ๋กœ ๋งŽ์ด ํ’€์–ด๋ณด๊ธฐ : 10๋ถ„ ์ •๋„ ์ƒ๊ฐํ•ด๋ด๋„ ์•ˆ ํ’€๋ฆฌ๋Š” ๋ฌธ์ œ๋Š” ๋‹ต์•ˆ์„ ๋ณด๋ฉด์„œ ์ƒ๊ฐํ•˜๋Š” ๊ณผ์ •์„ ์ตํžˆ์ž. ์•„์ง ๋‚˜๋Š” ๋งŽ์ด ํ’€์–ด๋ณธ ๊ฒฝํ—˜์ด ๋ถ€์กฑํ•˜๋‹ค. ๊ฒฝํ—˜์„ ํ†ตํ•œ ์‚ฌ๊ณ  ๊ณผ์ •์„ ์ตํžˆ๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค. Android ๊ตฌํ˜„์—์„œ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ๋ฉˆ์ถ”๊ณ  ๊ด€๋ จ ๊ฐœ๋… ํ•™์Šตํ•˜๊ธฐ : ๊ตฌํ˜„์„ ํ•˜๋‹ค๊ฐ€ ๋‚ด๊ฐ€ ์•„์ง ํ•™์Šตํ•˜์ง€ ์•Š์€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์š”๊ตฌํ•˜๋Š” ๋ถ€๋ถ„์ด ๋‚˜์™”์„ ๋•Œ, ๋ฐฐ์šฐ์ง€ ์•Š์€ ๋ถ€๋ถ„์„ ๋ฐฐ์ œํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋ ค๋‹ค ..

2024.03.04 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

ํ•™์Šต

Android์—์„œ ConstraintLayout์€ ์™œ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ

์ด๊ฒƒ์€ Android๊ฐ€ view๋ฅผ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์œผ๋กœ, Android๋Š” measure pass, layout pass ๋‘ ๊ณผ์ •์„ ํ†ตํ•ด UI๋ฅผ ์„ค์ •ํ•œ๋‹ค. measure pass๋Š” view๊ฐ€ ์ž์‹ ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์„ค์ •ํ•˜๋Š” ๊ณผ์ •์ด๊ณ , layout pass๋Š” view๊ฐ€ ์†ํ•œ ViewGroup์ด view๊ฐ€ ์ธก์ •ํ•œ ๊ฐ’์— ๋”ฐ๋ผ View์˜ ์œ„์น˜๋ฅผ ์„ค์ • ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ๋ณดํ†ต์€ ์ด ๊ณผ์ •์ด ์งง์€ ์‹œ๊ฐ„ ๋‚ด์— ์™„๋ฃŒ๋˜์ง€๋งŒ, ๋Ÿฐํƒ€์ž„์— View๋ฅผ ์ถ”๊ฐ€, ์‚ญ์ œํ•œ๋‹ค๋˜๊ฐ€(๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ RecyclerView), View์˜ ํ…์ŠคํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ํฌ๊ธฐ๋ฅผ ๋‹ค์‹œ ์ธก์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋น„๊ต์  ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ ๋งŒ์œผ๋กœ๋Š” ANR์ด ๋ฐœ์ƒํ• ๋งŒํผ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๊ณต์‹๋ฌธ์„œ์—์„œ ์ถ”์ฒœํ•˜๋Š” Layout ViewGroup์ธ Layout์ด ๋‹ค๋ฅธ..

2024.03.03 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

์ฝ”๋”ฉํ…Œ์ŠคํŠธ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์‚ผ์ด์‚ฌ ๋‹ค๋ฅด๊ฒŒ ํ’€์–ด๋ณด๊ธฐ with Kotlin

https://school.programmers.co.kr/learn/courses/30/lessons/131705 ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”. programmers.co.kr ์ด ๋ฌธ์ œ๋Š” 3์ค‘ For๋ฌธ์„ ์ด์šฉํ•ด Brute Force ๋ฐฉ์‹์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด ๋‚˜์˜ค๋Š” ๋Œ€๋‹ค์ˆ˜์˜ ์ฝ”๋“œ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ’€๊ณ  ์žˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ? Cursor ์ด์šฉํ•˜๊ธฐ ์•„์ด๋””์–ด์˜ ์‹œ์ž‘์€ ์ด๋Ÿฌํ–ˆ๋‹ค. 1. number๋ฅผ ์ •๋ ฌํ•œ๋‹ค. 2. ์™ผ์ชฝ์—๋Š” ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’, ์˜ค๋ฅธ์ชฝ์—๋Š” ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ์˜ค๋ฏ€๋กœ, cursor๋ฅผ ์ด์šฉํ•ด์„œ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒ ๊ตฌ๋‚˜! class Solution { fun solution..

2024.03.03 ๊ฒŒ์‹œ๋จ

TIL

240229 TIL - ํ•™์Šต ๋ฐฉํ–ฅ

์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ ์ฝ”ํŠธ์นดํƒ€, Leetcode Daily Problem, Dynamic Pogramming Course SOLID ์›์น™ ๊ฐœ๋… ํ•™์Šต Jetpack Compose Tutorial 1-6. Implement a real-world design Udemy ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐ•์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ตฌํ˜„ ์—ฐ์Šต - "MVVM ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ์—์„œ SharedPreferences๋Š” UI ๋ชจ๋“ˆ์—์„œ ์‹ฑ๊ธ€ํ†ค ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌํ•ด๋„ ๋ ๊นŒ? ํ˜น์€ Data ๋ชจ๋“ˆ์˜ Repository๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•˜๋„๋ก ๋ง‰์•„์•ผ ํ• ๊นŒ?" ๊ณ ๋ฏผ์„ ํ–ˆ๋Š”๋ฐ, MVVM + ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ํ•™์Šต์„ ์ข€ ๋” ํ•œ ํ›„ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณ ๋ฏผ์„ ํ•˜๊ฒŒ ๋œ ์ด์œ ๋Š” Glide๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋”ฉํ•˜๊ณ  ์บ์‹ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, Presentation ๋ชจ๋“ˆ์—์„œ S..

2024.02.29 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

TIL

240228 TIL

์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ Android ๊ตฌํ˜„ ์—ฐ์Šต - MVVM์—์„œ View๊ฐ€ ViewModel์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ callback ํ˜•ํƒœ๋กœ ๊ฒฐ๊ด๊ฐ’์— ๋”ฐ๋ผ UI๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ์•ˆ๋œ๋‹ค. 1. LiveData๋ฅผ observingํ•  ๋•Œ, lifecycleOwner๋ฅผ ์ง€์ •ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ? -> View๊ฐ€ ์‚ด์•„์žˆ์„ ๋•Œ๋งŒ ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™”๋ฅผ ์ˆ˜์‹ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋‹ค. 2. ViewModel์— callback์„ ๋„˜๊ธฐ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? -> View์˜ Lifecycle๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ, ViewModel์ด ์ฃฝ์ง€ ์•Š๋Š”ํ•œ callback์ด ๋ฌด์กฐ๊ฑด ์ฒ˜๋ฆฌ๋œ๋‹ค. 3. ๋งŒ์•ฝ ViewModel์ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ View๊ฐ€ ์ฃฝ์—ˆ๋Š”๋ฐ, callback์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? -> ์•ฑ crash๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 4. ๋”ฐ๋ผ์„œ View๊ฐ€ ViewMode..

2024.02.28 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

ํ•™์Šต

Android์—์„œ View๋Š” ์–ด๋–ป๊ฒŒ ๊ทธ๋ ค์งˆ๊นŒ? - 1

ํ•™์Šตํ•˜๊ฒŒ ๋œ ์ด์œ  TextView์—๋Š” marquee๋ผ๋Š” ์†์„ฑ์ด ์žˆ๋‹ค. ์ด๊ฒƒ์„ ์ด์šฉํ•˜๋ฉด ํ…์ŠคํŠธ๊ฐ€ TextView ์˜์—ญ์„ ๊ณ„์† ์›€์ง์ด๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์‹œ์ž‘๊ณผ ๋์ด ์™„์ „ํžˆ ์ด์–ด์ง€์ง€ ์•Š๊ณ  ์•ฝ๊ฐ„์˜ ๊ณต๋ฐฑ์ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ณต๊ฐ„์„ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ค„์ด๋Š” attribute๋Š” TextView๊ฐ€ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•ด๋‹น ๊ณต๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด๋‹ค๊ฐ€ ์•„๋ž˜ ๋‹ต๋ณ€์„ ํ†ตํ•ด TextView๋ฅผ ์ƒ์†ํ•œ CustomView๋ฅผ ํ†ตํ•ด ์ค„์ผ ์ˆ˜ ์žˆ์Œ์„ ์•Œ๊ฒŒ๋๋‹ค. https://stackoverflow.com/a/72749204/11722881 Android: How to remove end blank space from Textview with marquee I have created TextView with marq..

2024.02.28 ๊ฒŒ์‹œ๋จ

TIL

240227 TIL

์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ Kotlin In Action 4.4 ๋‚จ์€ ๋ถ€๋ถ„, 9-3 - JvmStatic, JvmField์˜ ์ฐจ์ด์™€ Companion Object์™€ ์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ดค์Šต๋‹ˆ๋‹ค. https://dodobest.notion.site/JvmStatic-JvmField-5c0bbb1d97af4542ac64e4aa89c19e1b CS ํ•™์Šต : ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ณผ์ • fetch-decode-execute View๊ฐ€ ๊ทธ๋ ค์ง€๋Š” ๊ณผ์ • - ์›๋ž˜๋Š” Custom View๋ฅผ ํ•™์Šตํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜, ์ž๋ฃŒ๊ฐ€ ์ ๊ณ  ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” View๋“ค์˜ ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ํ•™์Šตํ•˜๊ธฐ์—๋Š” ๋‚˜์˜ ์—ญ๋Ÿ‰์ด ๋ถ€์กฑํ•˜๋‹ค. ๊ทธ๋ž˜์„œ View๊ฐ€ ๊ทธ๋ ค์ง€๋Š” ๊ณผ์ •์„ ๋จผ์ € ํ•™์Šตํ•ด๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœ ๋ฐ›์•˜๊ณ , ์•„๋ž˜ ๊ณต์‹ ๋ฌธ์„œ ๋‚ด์šฉ์„ ๋‹จ์–ด ํ•˜๋‚˜ ํ•˜๋‚˜ ์˜๋ฏธ ํ•˜๋Š” ๋ฐ”๋ฅผ ์ฐพ์•„..

2024.02.27 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

TIL

240226 TIL

์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ Kotlin In Action 4.4 ์ผ๋ถ€ - ๋™๋ฐ˜ ๊ฐ์ฒด companion object๋Š” ์ผ๋ฐ˜ object ๊ฐ์ฒด์™€ ๊ฐ™์€ ๊ฐ์ฒด์ด๋‹ค. ๋‹ค๋งŒ, ํด๋ž˜์Šค ๊ฐ์ฒด ์„ ์–ธ ์—†์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. - ๋™๋ฐ˜ ๊ฐ์ฒด์—๋Š” ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๋ณดํ†ต์€ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ธฐ๋ณธ ์ด๋ฆ„์€ Companion์ด๋‹ค. - ์ตœ์ƒ์œ„ ํ•จ์ˆ˜๋Š” ํด๋ž˜์Šค์˜ private ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ๊ด€๊ณ„์—†์ด ํ˜ธ์ถœํ•ด์•ผ ํ•˜์ง€๋งŒ, ํด๋ž˜์Šค ๋‚ด๋ถ€ ์ •๋ณด์— ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•  ๋•Œ, companion object์— ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋ฃจํ‹ด 7์žฅ ๋ณต์Šต ๋ฐ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„ ํ•™์Šต Android ๊ตฌํ˜„ ๋ฐฐ๋‹ฌ์˜ ๋ฏผ์กฑ ๋ฐฐ๋„ˆ์™€ ๊ฐ™์ด ์˜†์œผ๋กœ ๋„˜๊ธฐ๋Š” UI๋ฅผ RecyclerView๋ฅผ ์ด์šฉํ•ด ..

2024.02.26 ๊ฒŒ์‹œ๋จ