๐Ÿ“˜Effective Kotlin

์ž๋ฐ”์˜ ํ•„๋“œ์™€ ์ฝ”ํ‹€๋ฆฐ์˜ ํ”„๋กœํผํ‹ฐ๋Š” ์™„์ „ ๋‹ค๋ฅธ ๊ฐœ๋…์ด๋‹ค.

ํ”„๋กœํผํ‹ฐ์˜ ํŠน์ง•

ํ”„๋กœํผํ‹ฐ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์„ธํ„ฐ์™€ ๊ฒŒํ„ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

field ์‹๋ณ„์ž : ํ”„๋กœํผํ‹ฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด๋‘๋Š” ๋ฐฑํ‚น ํ•„๋“œ(backing field)์— ๋Œ€ํ•œ ๋ ˆํผ๋Ÿฐ์Šค > ์„ธํ„ฐ์™€ ๊ฒŒํ„ฐ์˜ ๋””ํดํŠธ ๊ตฌํ˜„์— ์‚ฌ์šฉ

ํŒŒ์ƒ ํ”„๋กœํผํ‹ฐ (derrived property)

var์„ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“  ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ๋Š” ๊ฒŒํ„ฐ์™€ ์„ธํ„ฐ ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. val๋กœ ์ฝ๊ธฐ ์ „์šฉ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋งŒ๋“ค๋•Œ๋Š” field๊ฐ€ ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š๋Š”๋‹ค

ํ”„๋กœํผํ‹ฐ๋Š” ํ•„๋“œ๊ฐ€ ํ•„์š”๊ฐ€ ์—†๋‹ค.

๊ฐœ๋…์ ์œผ๋กœ ์ ‘๊ทผ์ž๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค (val ๋Š” ๊ฒŒํ„ฐ, var๋Š” ๊ฒŒํ„ฐ์™€ ์„ธํ„ฐ)

๊ทธ๋ž˜์„œ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ํ”„๋กœํผํ‹ฐ ์ •์˜๊ฐ€ ๊ฐ€๋Šฅ

ํ”„๋กœํผํ‹ฐ ์œ„์ž„ (property delegation)์ด ๊ฐ€๋Šฅํ•˜๋‹ค

ํ™•์žฅ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค. (ํ”„๋กœํผํ‹ฐ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ํ•จ์ˆ˜์ด๋ฏ€๋กœ)

ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐฉ๋ฒ•

์›์น™์ ์œผ๋กœ ํ”„๋กœํผํ‹ฐ๋Š” ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ฑฐ๋‚˜ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ณ , ๋‹ค๋ฅธ ๋กœ์ง๋“ฑ์„ ํฌํ•จํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ๊ธฐ์ค€ : โ€œ์ด ํ”„๋กœํผํ‹ฐ๋ฅผ ํ•จ์ˆ˜๋กœ ์ •์˜ํ•  ๊ฒฝ์šฐ, ์ ‘๋‘์‚ฌ๋กœ get๋˜๋Š” set์„ ๋ถ™์ผ ๊ฒƒ์ธ๊ฐ€?โ€

ํ”„๋กœํผํ‹ฐ๋Š” ์ƒํƒœ ์ง‘ํ•ฉ / ํ•จ์ˆ˜๋Š” ํ–‰๋™

ํ”„๋กœํผํ‹ฐ ๋Œ€์‹  ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ๊ฒฝ์šฐ

์—ฐ์‚ฐ ๋น„์šฉ์ด ๋†’๊ฑฐ๋‚˜ ๋ณต์žก๋„๊ฐ€ O(1)๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ
๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™์ž‘)์„ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ
๊ฒฐ์ •์ ์ด์ง€ ์•Š์€ ๊ฒฝ์šฐ
๋ณ€ํ™˜์˜ ๊ฒฝ์šฐ
๊ฒŒํ„ฐ์—์„œ ํ”„๋กœํผํ‹ฐ์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

Last updated