๋ชฉ๋กDevelopment/Kotlin (5)

๐Ÿ’ป ๊ฐœ๋ฐœ์ฐจ๊ธฐ ๐Ÿฅ‹ feat.Android

[Kotlin] Data class vs class ์ฐจ์ด

"๊ฐ’์ด๋ƒ ์ฐธ์กฐ๋ƒ, ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ๋กœ๋‹ค." 1. ๋“ค์–ด๊ฐ€๋ฉฐkotlin์„ ์“ฐ๋‹ค๋ณด๋ฉด class๋Š” ๊ธฐ๋ณธ์ด๊ณ  data class๋Š” ๋ชจ๋ธ, Compose์˜ MVI ํŒจํ„ด์˜ ์ƒํƒœ ๋“ฑ์„ ๋‹ด๋Š” ๋‹จ๊ณจ ๋ฉ”๋‰ด์ž…๋‹ˆ๋‹ค.์–ด์ฉ์ง€ ์ €๋Š” data class๋Š” ํŽธํ•˜๊ณ , class๋Š” ๋ญ”๊ฐ€ ์ œ๋Œ€๋กœ ํ•ด์•ผํ•  ๊ฒƒ๋งŒ ๊ฐ™์ด ๋А๊ปด์ง€๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋‘˜์˜ ์ฐจ์ด๋ฅผ ๋‹จ์ˆœํžˆ "toString๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋“ค์ด ์ž๋™ ์ƒ์„ฑ๋œ๋‹ค~" ๊ฐ™์€ ์ˆ˜์ค€์—์„œ๋งŒ ์ดํ•ดํ•˜๋ฉด ์ถ”๊ฐ€์ ์ธ ์งˆ๋ฌธ๊ณผ๊นŠ๊ฒŒ ๋ชจ๋ฅด๋Š” ๊ฑฐ ์•„๋ƒ? ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์–ด ๋ธ”๋กœ๊น… ํ•˜๋ฉฐ ์ œ๋Œ€๋กœ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.2. ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ๋น„๊ตํ•ญ๋ชฉclassdata class๊ธฐ๋ณธ ๋ชฉ์ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ’ ๊ฐ์ฒด(Value Object)์ž๋™ ์ƒ์„ฑ์—†์Œequals(), hashCode(), toString(), copy(), componentN() ๋“ฑ์ƒ์†O (..

Development/Kotlin 2025. 7. 25. 16:25
Coroutine์˜ ํŠน์ง• - ๊ตฌ์กฐ์  ๋™์‹œ์„ฑ(Structured Concurrency)

์“ฐ๊ฒŒ ๋œ ์ด์œ ์ฝ”๋ฃจํ‹ด์„ ์“ฐ๋‹ค ๋ณด๋ฉด scope, Job, cancel, launch, async ๊ฐ™์€ ๊ฐœ๋…๋“ค์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.์ฒ˜์Œ์—” "์Œ ๊ทธ๋ƒฅ ์“ฐ๋‹ˆ ๋˜๋Š”๊ตฐ" ํ•˜๋ฉด์„œ ๋„˜์–ด๊ฐ”๋Š”๋ฐ, ์ ์  ๋ณต์žกํ•œ ๊ตฌ์กฐ์—์„œ ์ž์‹ ์ฝ”๋ฃจํ‹ด์ด ์ œ๋Œ€๋กœ ์ •๋ฆฌ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ถ€๋ชจ๊ฐ€ ์ทจ์†Œ๋˜๋ฉด ๋ชจ๋“  ์ž‘์—…์ด ๋ฉˆ์ถ”๋Š” ๊ฑธ ๊ฒฝํ—˜ํ•˜๋ฉด์„œ ๊ตฌ์กฐ์  ๋™์‹œ์„ฑ(Structured Concurrency)์ด ์™œ ์ค‘์š”ํ•œ์ง€, ์ด๋Ÿฐ ํŠน์„ฑ์„ ์™œ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ด์ ธ์„œ ์“ฐ๊ฒŒ๋์Šต๋‹ˆ๋‹ค.๊ตฌ์กฐ์  ๋™์‹œ์„ฑ์ด๋ž€?๊ตฌ์กฐ์  ๋™์‹œ์„ฑ์€ ๊ฐ„๋‹จํžˆ ๋งํ•ด์ž‘์—…(์ฝ”๋ฃจํ‹ด)์ด ํŠธ๋ฆฌ ๊ตฌ์กฐ(๋‚˜๋ฌด ๋ฟŒ๋ฆฌ๋ฅผ ์ƒ๊ฐ)๋กœ ์กฐ์ง๋˜์–ด ์žˆ๊ณ , ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ฅผ ํ†ตํ•ด ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.์ฆ‰, ๋ถ€๋ชจ ์ฝ”๋ฃจํ‹ด์ด ์ทจ์†Œ๋˜๋ฉด ์ž์‹ ์ฝ”๋ฃจํ‹ด๋„ ํ•จ๊ป˜ ์ทจ์†Œ๋˜๊ณ ,๋ฐ˜๋Œ€๋กœ ์ž์‹ ์ค‘ ํ•˜๋‚˜์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด ๋ถ€๋ชจ๊ฐ€ ์ทจ์†Œ๋˜๋ฉด ๋‹ค๋ฅธ ์ž์‹๋„ ..

Development/Kotlin 2025. 5. 21. 11:04
Mutex์™€ Semaphore์— ๋Œ€ํ•ด์„œ

์‹œ์ž‘ํ•˜๋ฉด์„œ์‹ ์ž… ๋•Œ ๋ˆ„๊ตฐ๊ฐ€ ์งœ๋†“์€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์ผ์ด ์žˆ์—ˆ๋Š”๋ฐ ๊ทธ๋•Œ Mutex๋ฅผ ๋ดค์—ˆ๋‹ค.์ฒ˜์Œ ๋ดค์„ ๋• ์ด๊ฒŒ ๋ญ”๊ฐ€... ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ณ  ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ”๋‹ค.๊ทธ๋ž˜์„œ Mutex(๋ฎคํ…์Šค)๋ฅผ ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ ๋”ฐ๋ผ์˜ค๋Š” Semaphore(์„ธ๋งˆํฌ์–ด).๊ฐ€๋ณ๊ฒŒ ๊ณต๋ถ€ํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋ ค๊ณ  ํ•œ๋‹ค.์„ค๋ช…๋จผ์ € Mutex์™€ Semaphore๋Š” ์•„๋ž˜ ์„ค๋ช…์— ๋Œ€ํ•œ ๊ฒƒ ๋•Œ๋ฌธ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค"๋™์‹œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œํ•œํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ" ๋‚ด๊ฐ€ ์ดํ•ดํ•œ๋Œ€๋กœ ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•˜์ž๋ฉด, ์ปดํ“จํ„ฐ๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ(๊ณต์œ ์ž์›)๋ฅผ ๊ฐ€์ง€๊ณ  ์ž‘์—…์„ ๋‚˜๋ˆ ์„œ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ทผ๋ฐ ์ด๋•Œ A(๊ณต์œ  ์ž์›)์—์„œ ์ž‘์—…ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  B(๊ณต์œ  ์ž์›)์ด ์–ด๋– ํ•œ ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์•„์ง A๊ฐ€ ์ž‘์—…์ด ๋๋‚˜์ง€ ์•Š..

Development/Kotlin 2025. 5. 20. 16:13
๐Ÿ”ง Kotlin์˜ Collection ํ•จ์ˆ˜! - List ๊ฐ€๊ณต์„ ์‰ฝ๊ฒŒ ํ•ด๋ด…์‹œ๋‹ค

์š”์ฆ˜ ์•ฑ๋“ค์€ Listํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋“ค์„ ๋ณด์—ฌ์ฃผ๊ณ ์žˆ๋‹ค. ์ธ์Šคํƒ€, ์œ ํŠœ๋ธŒ, ํŽ˜์ด์Šค๋ถ, ๋ฐฐ๋‹ฌ์˜ ๋ฏผ์กฑ ๋“ฑ๋“ฑ ์•ˆ ๊ทธ๋Ÿฐ ์•ฑ์„ ์ฐพ๊ธฐ๊ฐ€ ํž˜๋“ค๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Listํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ๊ทธ๋ƒฅ ๋ฟŒ๋ ค์ฃผ๋ฉด ์ƒ๊ด€ ์—†์ง€๋งŒ ์นœ์ ˆํ•˜์ง€ ์•Š์€ data๋“ค์ด ๊ฐ„ํ˜น ์žˆ๋Š”๋ฐ ์ด ๋ฐ์ดํ„ฐ๋“ค์„ sortingํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ ํ˜น์€ ๋ณ‘ํ•ฉํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ ํšŒ์›๋“ค์ด ์˜ฌ๋ ธ๋˜ ๊ฒŒ์‹œ๋ฌผ๋“ค์„ ํšŒ์›๋ณ„๋กœ ๋ฌถ์–ด์„œ ๋ณด์—ฌ์ค˜์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ๋Š”๋ฐ ์„œ๋ฒ„์—์„œ ๊ทธ๋ƒฅ ๊ฒŒ์‹œ๊ธ€๋งŒ ์ซ™~ ๋‚ด๋ ค์ฃผ๊ณ  ์•ฑ์—์„œ ํ•ด์ฃผ์„ธ์š”~ ํ•˜๋ฉด ๋ณดํ†ต for ๋ฌธ์„ ๋Œ๋ ค์„œ ํšŒ์› ์•„์ด๋””๋ž‘ ์ผ์น˜ํ•˜๋ฉด ๋ฆฌ์ŠคํŠธ์— ๋‹ค์‹œ ๋‹ด๊ณ  ์†ฐ๋ผ์†ฐ๋ผ~ ์•„๋ฌดํŠผ! ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌ, ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ๊ต‰์žฅํžˆ ๊ท€์ฐฎ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋Œ€์•ˆ์ด ๋ญ๊ฐ€ ์žˆ๋ƒ? → Kotlin์˜ Collections ํ•จ์ˆ˜๋ฅผ ์“ธ ๊ฒƒ์ด๋‹ค. ๊ทธ๊ฒŒ ๋ญ”๋ฐ? → Collections์€..

Development/Kotlin 2023. 4. 5. 17:59
Kotlin ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค ๊น”๋”ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ

์ฝ”ํ‹€๋ฆฐ์˜ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ๊ณผ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ๊ทธ์ค‘์—์„œ๋„ apply, with, let, also, run์™€ ๊ฐ™์€ ๋ฒ”์œ„ ์ง€์ • ํ•จ์ˆ˜๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ธฐ๋Šฅ๋“ค์ด ์–ผํ• ๋ณด๋ฉด ๋น„์Šทํ•ด์„œ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ๋ณด๋‹ค ๊น”๋”ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„ ์ง€์ • ํ•จ์ˆ˜ ๋ž€ ํŠน์ • ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ž‘์—…์„ ๋ธ”๋ก ์•ˆ์— ๋„ฃ์–ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ธ”๋ก์€ ํŠน์ • ๊ฐ์ฒด์— ๋Œ€ํ•ด ํ•  ์ž‘์—…์˜ ๋ฒ”์œ„๊ฐ€ ๋˜๋ฉฐ, ๋”ฐ๋ผ์„œ ๋ฒ”์œ„ ์ง€์ • ํ•จ์ˆ˜๋ผ ๋ถ€๋ฅธ๋‹ค. ๋‹ค๋ฅธ ๋ง๋กœ ์ˆ˜์‹ ๊ฐ์ฒด ์ง€์ • ๋žŒ๋‹ค(ํ•จ์ˆ˜) ๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค. → ์ˆ˜์‹ ๊ฐ์ฒด๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ it์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋žŒ๋‹ค ์•ˆ์—์„œ ์ˆ˜์‹ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ๋ธ”๋ก(block) ..

Development/Kotlin 2022. 9. 4. 18:56