์ฝ”ํ‹€๋ฆฐ์ด๋ž€?

๐Ÿ’ก Kotlin์„ ์ฃผ ์–ธ์–ด๋กœ ํ™œ์šฉํ•˜๋ฉด์„œ, ํŠน์ง•๊ณผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•˜์—ฌ ํ•œ ๋ฒˆ ํ•™์Šตํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

Kotlin

  • ์ž๋ฐ”๋ฅผ ๋งŒ๋“  ํšŒ์‚ฌ์ธ IntelliJ IDEA์˜ ๊ฐœ๋ฐœ์‚ฌ JetBrains์—์„œ ๊ณต๊ฐœํ•œ ์–ธ์–ด๋กœ, ์ž๋ฐ”์™€ 100ํผ์„ผํŠธ ํ˜ธํ™˜๋˜๋ฉฐ ์ž๋ฐ”๋ณด๋‹ค ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
  • ๋˜ํ•œ ์ ˆ์ฐจ ์ง€ํ–ฅ์ ์ธ ๋ฌธ๋ฒ• ์œ„์ฃผ์˜ ์ฝ”๋“œ์—์„œ ๋ฒ—์–ด๋‚˜, ์‚ฌ๋žŒ๊ณผ ๊ฐ€๊นŒ์šด ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด ์ค‘ ๋”์šฑ ์‚ฌ๋žŒ์˜ ์–ธ์–ด์™€ ๋น„์Šทํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ๊ตฌ์‚ฌํ•˜๋„๋ก ๊ฐœ๋ฐœ๋œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

Kotlin์˜ ํฐ ์žฅ์ 

  • ๊ฐ€๋…์„ฑ๊ณผ ์ ‘๊ทผ์„ฑ
  • ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์ด๋ฉด์„œ ๋ณ€์ˆ˜ ์œ ํ˜• ์œ ์ถ” ๋ฐ ์†์‰ฌ์šด ์บก์Šํ™”
  • ์ง๊ด€์ ์ธ ๊ธฐ๋Šฅ์„ ๊ฐ–๋Š” ํ•จ์ˆ˜๋ฅผ ํƒ‘์žฌ
  • ์ƒ์‚ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด
  • ๊ฐœ๋ฐœ ์–ธ์–ด ํŠธ๋ Œ๋“œ
  • ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ ํ†ตํ•ด ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ์ตœ์†Œํ™”
  • ์œ ์—ฐํ•˜๊ณ  ๋น ๋ฅธ ์ˆ˜์ •
  • ์œ ์ง€ ๋ณด์ˆ˜ ํŽธ๋ฆฌํ•œ ์–ธ์–ด ํ˜•์‹
  • ์ž๋ฐ”์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ, ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐํ•จ

Kotlin์˜ ํŠน์ง•

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

Kotlin์€ ์ •์  ํƒ€์ž… ์–ธ์–ด

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

Kotlin์˜ ์ฒ ํ•™

  • Kotlin์€ ์ž๋ฐ”์™€ ์ƒํ˜ธ์šด์šฉ์„ฑ์— ์ดˆ์ ์„ ๋งž์ถ˜ ์‹ค์šฉ์ ์ด๊ณ  ์•ˆ์ „ํ•˜๋ฉฐ ๊ฐ„๊ฒฐํ•œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
    • ์‹ค์šฉ์„ฑ
      • ์–ธ์–ด์˜ ๋ณต์žก๊ฐ€ ์ ๊ณ , ํŠน์ • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ์ด๋‚˜ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๊ฐ•์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ๊ฐ„๊ฒฐ์„ฑ
      • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ƒˆ๋กœ ์ž‘์„ฑํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ์‹œ๊ฐ„์ด ๋” ๊ธธ๋‹ค๋Š” ์‚ฌ์‹ค์— ์ง‘์ค‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • getter, setter, ์ƒ์„ฑ์ž ํŒŒ๋ผ๋ฏธํ„ฐ ํ•„๋“œ๋ฅผ ๋Œ€์ž…ํ•˜๊ธฐ ์œ„ํ•œ ๋กœ์ง์ด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.
      • ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ธด ์ฝ”๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ , ๋žŒ๋‹ค๋ฅผ ํ™œ์šฉํ•ด์„œ ์ž‘์€ ์ฝ”๋“œ ๋ธ”๋ก์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜์— ์‰ฝ๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์•ˆ์ „์„ฑ
      • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์•ˆ์ „ํ•˜๋‹ค๋Š” ๊ฒƒ์€, ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜ ์ค‘์—์„œ ์ผ๋ถ€ ์œ ํ˜•์˜ ์˜ค๋ฅ˜๋ฅผ ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„๊ฐ€ ์›์น™์ ์œผ๋กœ ๋ฐฉ์ง€ํ•ด์ค€๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
      • ์–ด๋–ค ์–ธ์–ด๋„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ๋ง‰์„ ์ˆœ ์—†์ง€๋งŒ, ์ฝ”ํ‹€๋ฆฐ์€ JVM ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๋‹นํ•œ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
      • JVM์€ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๊ณ , ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ฉฐ, ๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ ํ•ด์ค๋‹ˆ๋‹ค.
      • ํƒ€์ž… ์ถ”๋ก ์„ ํ†ตํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
      • ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ NullPointerException์„ ์—†์• ๊ธฐ ์œ„ํ•œ null ์ถ”์ ์ž…๋‹ˆ๋‹ค.
    • ์ƒํ˜ธ์šด์šฉ์„ฑ
      • ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š๋ƒ๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ์ฝ”ํ‹€๋ฆฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌป๋Š” ์ฒซ๋ฒˆ์งธ ์งˆ๋ฌธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
      • ์ฝ”ํ‹€๋ฆฐ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์–ด๋–ค API๋ฅผ ์ œ๊ณตํ•˜๋˜ ๊ฐ„์— ์ฝ”ํ‹€๋ฆฐ์—์„œ ํ•ด๋‹น API๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ์ž๋ฐ”์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฝ”ํ‹€๋ฆฐ๋„ ์ปดํŒŒ์ผ ์–ธ์–ด์ด๋ฉฐ, .kt๋ผ๋Š” ํ™•์žฅ์ž์˜ ํŒŒ์ผ์„ .class ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
      • ์ด๋ฅผ ํ†ตํ•ด ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•œ ๋‹ค์Œ java ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

https://warpgate3.tistory.com/entry/Kotlin-vs-Java

https://incheol-jung.gitbook.io/docs/study/kotlin-in-action/1