10
10

์ฝ”ํ‹€๋ฆฐ ์ธ ์•ก์…˜ ์ฑ…์œผ๋กœ ์Šคํ„ฐ๋””๋ฅผ ํ•˜๊ฒŒ ๋๋Š”๋ฐ, ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž˜ ๊ธฐ๋กํ•ด๋‘˜ ๊ณ„ํš์ด๋‹ค.

๊ฐœ์š”

์ฝ”ํ‹€๋ฆฐ์€ ์ •์ ํƒ€์ž… ์ง€์ •์–ธ์–ด๋‹ค

์ •์  ํƒ€์ž…(statically typed) ์ง€์ •์ด๋ผ๋Š” ๋ง์€ ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ์˜ ํƒ€์ž…์„ ์ปดํŒŒ์ผ ๋•Œ ์•Œ ์ˆ˜ ์žˆ๊ณ , ๊ฐ์ฒด์˜ ํ•„๋“œ/๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ ์‹œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํƒ€์ž…์„ ๊ฒ€์ฆํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ๋™์  ํƒ€์ž…์€ ํƒ€์ž…๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋ชจ๋“  ๊ฐ’์„ ๋ณ€์ˆ˜์— ๋„ฃ์„ ์ˆ˜ ์žˆ๊ณ , ๊ฒ€์ฆ์‹œ์ ์ด ์‹คํ–‰์‹œ์ ์ด๋‹ค. Groovy๊ฐ€ ๋Œ€ํ‘œ์ ์ธ๋ฐ, ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ๋Š” ํ™•์‹คํ•œ ์žฅ์ ์ด์ง€๋งŒ ์ปดํŒŒ์ผ ์‹œ ๊ฑธ๋Ÿฌ๋‚ด์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ์‹คํ–‰์‹œ์ ์— ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ ์žฅ๋‹จ์ ์ด ์žˆ๋‹ค.

์ •์ ํƒ€์ž… ์ง€์ •์–ธ์–ด์˜ ์žฅ์ ์€ ์„ฑ๋Šฅ, ์‹ ๋ขฐ์„ฑ(์ปดํŒŒ์ผ๋Ÿฌ ๊ฒ€์ฆ), ์œ ์ง€๋ณด์ˆ˜์„ฑ, ๋„๊ตฌ ์ง€์› ๋“ฑ์ด ์žˆ๋‹ค.

์ฝ”ํ‹€๋ฆฐ์€ ์ž๋ฐ”์™€ ๊ฐ™์€ ์ •์  ํƒ€์ž… ์ง€์ • ์–ธ์–ด์ง€๋งŒ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฌธ๋งฅ์œผ๋กœ ํƒ€์ž…์„ ์ถ”๋ก ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํƒ€์ž… ๋ช…์‹œ๊ฐ€ ๋”ฐ๋กœ ํ•„์š”ํ•˜์ง„ ์•Š์ง€๋งŒ ์œ ์ง€ ๋ณด์ˆ˜์‹œ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๋ช…์‹œ๋ฅผ ํ•ด ์ฃผ๋Š”๊ฒŒ ๋” ์ข‹์€ ๋ฐฉํ–ฅ์ด๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ฝ”ํ‹€๋ฆฐ์€ nullable type์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ์‹œ null ๊ฒ€์‚ฌ๋ฅผ ๊ฑฐ์น  ์ˆ˜ ์žˆ๋‹ค. ๋˜ function type์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•œ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ๊ฐœ๋ฐœ์—์„œ๋„ ์ด ์žฅ์ ์€ ์œ ํšจํ•œ๋ฐ, null์„ ์ถ”์ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— NPE(NullPointerException)์˜ ๋นˆ๋„๋ฅผ ํ™• ์ค„์ผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ฒ˜์Œ ์ ‘ํ–ˆ์„ ๋•Œ ๊ต‰์žฅํžˆ ๋‚œํ•ด ํ–ˆ๋Š”๋ฐ, ํฌ๊ฒŒ 3๊ฐ€์ง€ ํŠน์ง•์ด ์žˆ๋‹ค.

  • ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰์‹œ๋ฏผ(์ผ๋ฐ˜ ๊ฐ’์ฒ˜๋Ÿผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. ์‹ฌ์ง€์–ด ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.)
  • ๋ถˆ๋ณ€์„ฑ
  • side effect ์—†์Œ(์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ)

์ด๋Ÿฐ ํŠน์ง•์€ ๊ฐ„๊ฒฐ์„ฑ์„ ์‚ด๋ ค์ค˜ ์ค‘๋ณต์„ ์ค„์—ฌ์ฃผ๊ณ , ๋™๊ธฐํ™” ๊ฑฑ์ •์ด ์—†์–ด์„œ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉ์‹œ ์•ˆ์ „ํ•˜๋‹ค๋Š” ์ ์ด๋‹ค. ๋˜ ์ˆœ์ˆ˜ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์€ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ํŽธํ•˜๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ๋‹ค.

์ฝ”ํ‹€๋ฆฐ ์ฒ ํ•™

์‹ค์šฉ์„ฑ, ๊ฐ„๊ฒฐ์„ฑ, ์•ˆ์ „์„ฑ, ์ƒํ˜ธ์šด์šฉ์„ฑ์ด ์žˆ๋Š”๋ฐ, ๊ฐ ํ•ญ๋ชฉ์„ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด๋ดค๋‹ค.

 

์‹ค์šฉ์„ฑ:

์ด๋ฏธ ๋‹ค๋ฅธ ์–ธ์–ด๊ฐ€ ๊ฒ€์ฆํ•œ ํ•ด๋ฒ•๊ณผ ๊ธฐ๋Šฅ๋“ค์„ ๋‹ต์Šตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”ํ‹€๋ฆฐ์„ ๋ฐฐ์šฐ๋Š”๋ฐ ์ˆ˜๊ณ ๊ฐ€ ์ค„๊ณ , IDE์— ์ข‹์€ ๋„๊ตฌ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—(์ปดํŒŒ์ผ๋œ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ฝ๊ธฐ์™€ ๊ฐ™์€) ์‹ค์šฉ์ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ„๊ฒฐ์„ฑ:

๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์ž๋ฐ”์— ๋น„ํ•ด ๋งŽ์ด ์ค„์˜€๋‹ค. getter, setter๋Š” ๋ฌผ๋ก ์ด๊ณ  data class์™€ ๊ฐ™์€ ํŠน์ˆ˜ ํด๋ž˜์Šค, ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐํ•จ์„ ์œ ์ง€ํ•œ๋‹ค.

์•ˆ์ „์„ฑ:

์šฐ์„  ์–ด๋Š์ •๋„ ์•ˆ์ „์„ฑ์ด JVM์„ ๋”ฐ๋ฅด๊ธฐ๋•Œ๋ฌธ์— ์ž…์ฆ๋˜์–ด์žˆ๊ณ , ์—ฌ๊ธฐ์„œ NPE์— ๋Œ€ํ•œ ์•ˆ์ „์„ฑ์ด ์ถ”๊ฐ€๋œ ๊ฒƒ์ด๋‹ค.

์ƒํ˜ธ ์šด์šฉ์„ฑ:

์ž๋ฐ”์˜ ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ž๋ฐ”์™€ ์ฝ”ํ‹€๋ฆฐ์ด ์„ž์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š”๋ฐ ์•„๋ฌด๋Ÿฐ ์žฅ์• ๊ฐ€ ๋˜์ง€์•Š๋Š”๋‹ค.

์ปดํŒŒ์ผ ๊ณผ์ •

.kt๋กœ ์ €์žฅ๋œ ํŒŒ์ผ์„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผ์„ ๋งˆ์น˜๋ฉด .classํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. .classํŒŒ์ผ์€ .jar๋ฅผ ํ†ตํ•ด ํŒจํ‚ค์ง•๊ณผ์ •์„ ๊ฑฐ์ณ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹คํ–‰๋œ๋‹ค. ์ฝ”ํ‹€๋ฆฐ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•œ ํŒŒ์ผ์€ ์ฝ”ํ‹€๋ฆฐ ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ์ปดํŒŒ์ผ ๋œ ์•ฑ์„ ๋ฐฐํฌํ•  ๋•Œ๋Š” ์ฝ”ํ‹€๋ฆฐ ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ๊ฐ™์ด ๋ฐฐํฌํ•ด์•ผ๋˜๋Š”๋ฐ, gradle๊ณผ ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ์•ฑ ํŒจํ‚ค์ง€ ์‹œ์ ์— ์ฝ”ํ‹€๋ฆฐ ๋Ÿฐํƒ€์ž„์„ ํฌํ•จ์‹œ์ผœ์ค€๋‹ค. ์ด๋Ÿฌ๋ฉด ์šฉ๋Ÿ‰์ด ์ปค์ง€๋Š” ๊ฒŒ ์•„๋‹๊นŒ? ๋‹คํ–‰ํžˆ ์ฝ”ํ‹€๋ฆฐ ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ์˜ ์šฉ๋Ÿ‰์€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ํฌํ•จ ์ „๊ณผ ํ›„์˜ ์šฉ๋Ÿ‰ ์ฐจ์ด๊ฐ€ ํฌ๊ฒŒ ๋‚˜์ง€ ์•Š๋Š”๋‹ค.

์—ฌ๊ธฐ์„œ ํ•œ๋ฒˆ์ฏค์€ ๊ถ๊ธˆํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ฝ”ํ‹€๋ฆฐ์€ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  fun main(){ }์œผ๋กœ ๋ฐ”๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์ง„์ž…์ ์„ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ธฐ๋ณธ ์š”์†Œ๋“ค

ํ•จ์ˆ˜

fun foo(param: Int): String{
    return if(param>10) "BIG" else "SMALL"
}
 

ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ด๋ฆ„ ๋’ค์— ํƒ€์ž…์„ ๋ช…์‹œํ•œ๋‹ค.

์ฝ”ํ‹€๋ฆฐ์˜ if๋Š” ๋ฌธ(statement)์ด ์•„๋‹ˆ๋ผ ์‹(expression)์ด๋‹ค. ์ฆ‰ ๊ฐ’์„ ๋ฐ˜ํ™˜ ํ•  ์ˆ˜ ์žˆ๊ณ  ๋‹ค๋ฅธ ์‹์˜ ํ•˜์œ„ ์š”์†Œ๋กœ ์—ฐ์‚ฐ์— ๊ด€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ž๋ฐ”์˜ if๋Š” ๋ฌธ์ด์ง€๋งŒ ์ฝ”ํ‹€๋ฆฐ์˜ if๋Š” ์‹์ด๋‹ค.

fun foo(param:Int) = if(param>10) "A" else "B"
 

ํ•จ์ˆ˜๊ฐ€ ์‹์„ ๋ณธ๋ฌธ์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ํƒ€์ž…์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ณ€์ˆ˜

val, var๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, val๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” immutableํ•˜๊ณ , var๋Š” mutableํ•˜๋‹ค. val๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์€ ์ž๋ฐ”์˜ final ๋ณ€์ˆ˜๋กœ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค. ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ๋•Œ๋Š” ๋ณ€์ˆ˜ ํƒ€์ž…์ด ํ•„์š” ํ•  ์ˆ˜๋„, ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”๋ฅผ ํ•œ๋‹ค๋ฉด, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํƒ€์ž…์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ดˆ๊ธฐํ™” ์‹œ์ ์ด ์„ ์–ธ์‹œ์ ๋ณด๋‹ค ํ›„๋ผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํƒ€์ž…์ถ”๋ก ์„ ํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์ดˆ๊ธฐํ™”๋ฅผ ๋‚˜์ค‘์— ํ•  ๊ฒฝ์šฐ ํƒ€์ž…๋ช…์‹œ๊ฐ€ ๊ผญ ํ•„์š”ํ•˜๋‹ค.

์ฒ˜์Œ ์ฝ”ํ‹€๋ฆฐ์„ ์ ‘ํ•  ๋•Œ ๋“ค์—ˆ๋˜ ์˜๋ฌธ์ธ๋ฐ

val arr = arrayListOf("a","b")
 

arr์€ immutableํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ arr.add(“c”)๋กœ ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ์™œ ๊ทธ๋Ÿด๊นŒ.

val ์ฐธ์กฐ ์ž์ฒด๋Š” ๋ถˆ๋ณ€์ด๋‹ค. ํ•˜์ง€๋งŒ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊นŒ์ง€๋Š” val๊ฐ€ ๊ด€์—ฌํ•˜์ง€์•Š๊ธฐ ๋•Œ๋ฌธ์— arr๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

๋ณ€์ˆ˜๋ฅผ ๋ฌธ์ž์—ด ์•ˆ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œ๊ธฐํ•œ๋‹ค. ์ด๋ฅผ ๋ฌธ์ž์—ด ํ…œํ”Œ๋ฆฟ์ด๋ผ๊ณ  ํ•œ๋‹ค.

print("Hello, $name")
print("Hello, ${name}")
 

์ด๋Ÿฐ์‹์œผ๋กœ $๋ฅผ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ, ์ค‘๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๊ฒŒ ์ข‹๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ธ์‹ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ํ•œ๊ธ€๊ณผ ์˜๋ฌธ๋ณ€์ˆ˜๋ฅผ ๋ถ™์—ฌ ์“ธ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๋‚ด๊ฒŒ ๋˜๋ฏ€๋กœ ์ค‘๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๊ถŒ์žฅ๋œ๋‹ค. ๋ณ€์ˆ˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹๋„ ์ค‘๊ด„ํ˜ธ์— ๋„ฃ์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœํผํ‹ฐ

์ž๋ฐ” ํด๋ž˜์Šค์—์„œ์˜ ํ•„๋“œ์™€ ๊ฒŒํ„ฐ, ์„ธํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ๋ฌถ์–ด์„œ ์ฝ”ํ‹€๋ฆฐ ํ”„๋กœํผํ‹ฐ๊ฐ€ ํƒ„์ƒํ–ˆ๋‹ค. val๋กœ ์„ ์–ธํ•œ ํ”„๋กœํผํ‹ฐ๋Š” ์ฝ๊ธฐ์ „์šฉ, var๋กœ ์„ ์–ธํ•œ ํ”„๋กœํผํ‹ฐ๋Š” ์“ฐ๊ธฐ์ „์šฉ์ด๋‹ค. ๋”ฐ๋ผ์„œ val๋Š” ๊ฒŒํ„ฐ๋งŒ ๊ฐ–๊ณ , var๋Š” ๋‘˜๋‹ค ๊ฐ–๋Š”๋‹ค.

์ฝ”ํ‹€๋ฆฐ์˜ ํ”„๋กœํผํ‹ฐ๋„ ๊ธฐ๋ณธ์œผ๋กœ getter๊ฐ€ ์žˆ์ง€๋งŒ, ์ด๊ฑธ ์ปค์Šคํ…€ ํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ์ด ํ”„๋กœํผํ‹ฐ๋ฅผ backing field๋ผ๊ณ  ํ•˜๋ฉฐ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๊ทธ๋•Œ ๊ทธ๋•Œ ๊ณ„์‚ฐํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ• ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฐ ๊ฐ’๋งŒ ๋ชจ์•„๋‘” ํด๋ž˜์Šค๋ฅผ value object๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์ž๋ฐ”์—์„œ getter์™€ setter๋กœ ์ ์ฒ ๋œ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” data class๋ผ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๊ฐ€ ์žˆ๋‹ค.

val isSquare: Boolean
    get(){
        return h == w
    }
 

get()์„ ๋ถ™์—ฌ ์„ ์–ธํ•˜๋ฉด ์ปค์Šคํ…€ ์ ‘๊ทผ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค. ์ด ํ”„๋กœํผํ‹ฐ๋Š” h์™€ w๊ฐ€ ๊ฐ™์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ๋‹ค.

enum๊ณผ when

enum์€ ์—ด๊ฑฐํ˜• ํƒ€์ž…์ด๊ณ , when์€ ๋ถ„๊ธฐ ๋ฌธ๋ฒ•์ด๋‹ค.

enum class Color{
    RED, ORANGE, BLUE
}
 

enum class ๋ผ๋Š” ํ‚ค์›Œ๋“œ๋กœ enum๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค.

enum class ์•ˆ์— ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋•Œ ์ฝ”ํ‹€๋ฆฐ์—์„œ ์œ ์ผํ•˜๊ฒŒ ์„ธ๋ฏธ์ฝœ๋ก ์ด ์‚ฌ์šฉ๋œ๋‹ค. enum ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ, ์ƒ์ˆ˜ ๋ชฉ๋ก ๊ฐ€์žฅ ๋์— ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๊ตฌ๋ณ„ ์ง€์–ด์ค˜์•ผ ๋ฉ”์„œ๋“œ ์ •์˜ ๋ถ€๋ถ„์„ ์ธ์‹ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ๋งŒ๋“  enum ๊ฐ์ฒด๋Š” when์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ธ๋‹ค.

when์— enum ํƒ€์ž…์„ ๋„ฃ์œผ๋ฉด, enum์— ์ •์˜๋œ ๊ฐ’์œผ๋กœ๋งŒ when branch๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค. ๋น ์ ธ์žˆ์œผ๋ฉด ์ปดํŒŒ์ผ์—๋Ÿฌ๊ฐ€ ์ผ์–ด๋‚˜๊ณ , else๊ฐ€ ํ•„์š”์—†์–ด ์œ ์ง€๋ณด์ˆ˜์— ์ข‹๋‹ค.

 

when ์—ญ์‹œ ๋ฐ˜ํ™˜๊ฐ’์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์‹์ด๊ณ , switch์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋”์šฑ ์œ ์—ฐํ•˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.

when(input){
    a -> "A"
    b,c -> "B"
    1...5 -> "NUM"
    else -> "O" 
}
 

when์€ break๋ฅผ ๋”ฐ๋กœ ์ ์–ด์ค„ ํ•„์š”๊ฐ€ ์—†๊ณ , ๋น„๊ต ๊ฐ’์˜ ํƒ€์ž…์ด ๋‹ฌ๋ผ๋„ ๋˜๊ณ , ๋ฒ”์œ„๋กœ ๋น„๊ตํ• ์ˆ˜๋„ ์žˆ๊ณ , ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ’๊ณผ ๋งค์น˜ํ•ด ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค. ์•„์ฃผ ์œ ์—ฐํ•˜๋‹ค.

setOf()๋ฅผ ์‚ฌ์šฉํ•ด ์ง‘ํ•ฉ์œผ๋กœ ๋น„๊ต๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ๋ง์€ ๊ฐ์ฒด ๋น„๊ต๊ฐ€ ๋œ๋‹ค๋Š” ๋ง์ด๋‹ค. when์€ ์ธ์ž๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋  ๋•Œ๋Š” ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ”๋กœ ์กฐ๊ฑด๋ถ„๊ธฐ๋กœ ๋Œ๊ณ ๊ณผ ์ธ์ž ์—†์ด๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

fun foo1(c1: Color, c2: Color) = when((c1 == "R")&&(c2 == "B") -> "P")
 

์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ๊ฐ ๋ถ„๊ธฐ์˜ ์กฐ๊ฑด์ด booleanํŒ๋ณ„์ด๋ฉด ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์ด๋‹ค.

๋ถ„๊ธฐ์— ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งจ ๋งˆ์ง€๋ง‰ ์ค„์— return์„ ๋ถ™์ด์ง€ ์•Š์•„๋„ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์ธ์‹ํ•œ๋‹ค.

ํƒ€์ž… ์บ์ŠคํŒ…

์Šค๋งˆํŠธ ์บ์ŠคํŠธ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๋Œ€์‹  ์บ์ŠคํŒ…์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ, is ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ์บ์ŠคํŒ…ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒ€์‚ฌ๋ฅผ ๋งˆ์นœ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์€ ๊ฒ€์‚ฌ์ดํ›„ ๊ณ„์† ๊ฐ™์€ ํƒ€์ž…์„ ๊ฐ–๋Š”๊ฒƒ์œผ๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ธ์‹ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ val๋กœ ์„ ์–ธํ•ด์ค˜์•ผํ•œ๋‹ค.

๋ช…์‹œ์ ์ธ ํƒ€์ž… ์บ์ŠคํŒ…์€ as ํƒ€์ž… ์œผ๋กœ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

iteration

๋ฐ˜๋ณต๋ฌธ์˜ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ๋Š” ์ ˆ์ด๋‹ค

for(i in a..b)์™€ ๊ฐ™์€ ๋ฒ”์œ„ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐฐ์—ด์„ ๋Œ€์ƒ์œผ๋กœ foreach๊ฐ™์ด ๋Œ๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค.

๋ฒ”์œ„ ์ง€์ •์‹œ ..๋Š” ํ•ญ์ƒ [ ] ์ด๋‹ค. a until b ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด [ )๋กœ ๋ ๊ฐ’์„ ํฌํ•จํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ปฌ๋ ‰์…˜์— .withIndext()์™€ ์ธ๋ฑ์Šค ๋ณ€์ˆ˜๋ฅผ ๊ฐ™์ด ๋„ฃ์–ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ

for((idx, i) in list.withIndex()
 

์ด๋•Œ idx๊ฐ€ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ๋”ฐ๋ผ๊ฐ„๋‹ค.

๋ฐ˜๋ณต๋ฌธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” in์€ ์—ฐ์‚ฐ์ž์ด๋‹ค. ์–ด๋–ค ๊ฐ’์ด ํ•ด๋‹น ๋ฒ”์œ„์— ์†ํ•˜๋Š”์ง€ in์„ ํ†ตํ•ด true/false๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. when์—์„œ๋„ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณธ ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์˜ˆ์™ธ์ฒ˜๋ฆฌ

์˜ˆ์™ธ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” try, throw ๋ฌธ ์—ญ์‹œ ์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” ์‹์ด๋‹ค.

val exc = try{
    ..
}catch(e: NumberFormatException){
    // ์˜ˆ์™ธ ๋ฐœ์ƒ
}finally{
    // ๋งˆ๋ฌด
}
 

์˜ˆ์™ธ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” try~catch~finally๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ํฌํ•จํ•  ์˜๋ฌด๊ฐ€ ์—†๋‹ค. ์ž๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด throws IOException์„ ์‚ฌ์šฉํ•  ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ ์ฝ”ํ‹€๋ฆฐ์—๋Š” ๊ทธ ์ž‘์—…์ด ํ•„์š”์—†๋‹ค๋Š” ๋œป์ด๋‹ค.

 

"๋Œ“๊ธ€, ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์‹œ๋ฉด ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค"
๋ฐ˜์‘ํ˜•

'๐Ÿ“– > ์ฝ”ํ‹€๋ฆฐ ์ธ ์•ก์…˜๐Ÿ“–' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Kotlin in action(5)  (0) 2023.10.10
Kotlin in action(4)  (0) 2023.10.10
Kotlin in action(3)  (0) 2023.10.10
Kotlin in action(2)  (0) 2023.10.10
Kotlin in action(9)  (0) 2023.10.10
COMMENT