개발/Kotlin

[Kotlin In Action] 1. μ½”ν‹€λ¦°μ΄λž€ 무엇이며, μ™œ ν•„μš”ν•œκ°€?

도리 🐟 2021. 5. 9. 12:49

#1. μ½”ν‹€λ¦°(Kotlin)?

  • μžλ°” ν”Œλž«νΌμ—μ„œ λŒμ•„κ°€λŠ” μƒˆλ‘œμš΄ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄
  • κ°„κ²°, μ‹€μš©μ , μžλ°” μ½”λ“œμ™€μ˜ μƒν˜Έμš΄μš©μ„± μ€‘μ‹œ

#2. μ£Όμš” νŠΉμ„±

λŒ€μƒ ν”Œλž«νΌ

  • μ„œλ²„, μ•ˆλ“œλ‘œμ΄λ“œ λ“± μžλ°”κ°€ μ‹€ν–‰λ˜λŠ” λͺ¨λ“  κ³³

정적 νƒ€μž… 지정 μ–Έμ–΄

- 정적 νƒ€μž… 지정 μ–Έμ–΄: ν”„λ‘œκ·Έλž¨ ꡬ성 μš”μ†Œμ˜ νƒ€μž…μ„ 컴파일 μ‹œμ μ— μ•Œ 수 있고, ν•„λ“œλ‚˜ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œλ§ˆλ‹€ μ»΄νŒŒμΌλŸ¬κ°€ νƒ€μž…μ„ 검증해쀀닀.
- 동적 νƒ€μž… 지정 μ–Έμ–΄: νƒ€μž…κ³Ό 관계없이 λͺ¨λ“  값을 λ³€μˆ˜μ— 넣을 수 있고, ν•„λ“œλ‚˜ λ©”μ„œλ“œ 접근에 λŒ€ν•œ 검증이 μ‹€ν–‰ μ‹œμ μ— μΌμ–΄λ‚œλ‹€.
  • 정적 νƒ€μž… μ§€μ •μ˜ μž₯점
    1. μ„±λŠ₯: μ‹€ν–‰ μ‹œμ μ— μ–΄λ–€ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν• μ§€ μ•Œμ•„λ‚΄λŠ” 과정이 ν•„μš”μ—†μ–΄μ„œ λΉ λ₯΄λ‹€.
    2. μ‹ λ’°μ„±: μ»΄νŒŒμΌλŸ¬κ°€ κ²€μ¦ν•˜κΈ° λ•Œλ¬Έμ— μ‹€ν–‰ μ‹œ 였λ₯˜λ‘œ μ€‘λœλ  κ°€λŠ₯성이 적닀.
    3. μœ μ§€ λ³΄μˆ˜μ„±: μ½”λ“œμ—μ„œ λ‹€λ£¨λŠ” 객체가 μ–΄λ–€ νƒ€μž…μΈμ§€ μ•Œ 수 있기 λ•Œλ¬Έμ—, 처음 λ³΄λŠ” μ½”λ“œλ₯Ό 닀루기 쉽닀.
    4. 도ꡬ 지원: λ¦¬νŒ©ν† λ§μ΄ μ•ˆμ „ν•˜κ³ , 더 μ •ν™•ν•œ μ½”λ“œ μ™„μ„± κΈ°λŠ₯을 μ œκ³΅ν•  수 있으며 IDE의 λ‹€λ₯Έ 지원 κΈ°λŠ₯도 더 잘 λ§Œλ“€ 수 μžˆλ‹€.

νƒ€μž… μΆ”λ‘  (type inference)

코틀린은 정적 νƒ€μž… 지정 μ–Έμ–΄μ΄μ§€λ§Œ, μžλ°”μ™€ λ‹€λ₯΄κ²Œ μ½”ν‹€λ¦° μ»΄νŒŒμΌλŸ¬κ°€ λ¬Έλ§₯μœΌλ‘œλΆ€ν„° λ³€μˆ˜ νƒ€μž…μ„ μžλ™μœΌλ‘œ μœ μΆ”ν•  수 있기 λ•Œλ¬Έμ— νƒ€μž… 선언을 μƒλž΅ν•΄λ„ λœλ‹€.

var x = 1

Nullable type 제곡

컴파일 μ‹œμ μ— NullPointerException λ°œμƒ κ°€λŠ₯ μ—¬λΆ€λ₯Ό 검사할 수 μžˆλ‹€.

ν•¨μˆ˜ νƒ€μž… 지원

#3. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심

  • first-class (일급 μ‹œλ―Ό) ν•¨μˆ˜: ν•¨μˆ˜λ₯Ό 일반 κ°’μ²˜λŸΌ λ‹€λ£° 수 μžˆλ‹€. ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— μ €μž₯ / 인자둜 λ‹€λ₯Έ ν•¨μˆ˜μ— 전달 / ν•¨μˆ˜μ—μ„œ μƒˆλ‘œμš΄ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•  수 μžˆλ‹€.
  • immutability (λΆˆλ³€μ„±): ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” λΆˆλ³€ 객체λ₯Ό μ‚¬μš©ν•΄ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•œλ‹€.
  • side effect (λΆ€μˆ˜νš¨κ³Ό) μ—†μŒ: μž…λ ₯이 κ°™μœΌλ©΄ 항상 같은 좜λ ₯을 λ°˜ν™˜ν•˜κ³ , λ‹€λ₯Έ 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©°, ν•¨μˆ˜ μ™ΈλΆ€λ‚˜ λ‹€λ₯Έ μ™ΈλΆ€ ν™˜κ²½κ³Ό μƒν˜Έμž‘μš©ν•˜μ§€ μ•ŠλŠ” 순수 ν•¨μˆ˜(pure function)λ₯Ό μ‚¬μš©ν•œλ‹€.

 

  • ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ μž₯점
    1. κ°„κ²°μ„±: ν•¨μˆ˜λ₯Ό κ°’μ²˜λŸΌ ν™œμš©ν•˜λ©΄ 더 κ°•λ ₯ν•œ 좔상화λ₯Ό ν•  수 있고, λ”°λΌμ„œ μ½”λ“œ 쀑볡을 막을 수 μžˆλ‹€.
    2. λ‹€μ€‘μŠ€λ ˆλ“œ μ•ˆμ „μ„±: λΆˆλ³€ 데이터 ꡬ쑰λ₯Ό μ‚¬μš©ν•˜λ©΄ 닀쀑 μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œ 같은 데이터λ₯Ό μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ³€κ²½ν•  수 μ—†λ‹€.
    3. ν…ŒμŠ€νŠΈ 용이: side effectκ°€ μ—†λŠ” 순수 ν•¨μˆ˜λŠ” λ…λ¦½μ μœΌλ‘œ ν…ŒμŠ€νŠΈν•  수 μžˆλ‹€.

μžλ°” 8 μ΄μ „μ˜ μžλ°”λŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ 지원할 수 μžˆλŠ” κΈ°λŠ₯이 거의 μ—†μ—ˆλ‹€.
코틀린은 μ²˜μŒλΆ€ν„° ν•¨μˆ˜ν˜• μŠ€νƒ€μΌλ‘œ ν”„λ‘œκ·Έλž¨μ„ 지 수 있게 지원해왔닀. (κ°•μ œν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.)
객체 지ν–₯κ³Ό ν•¨μˆ˜ν˜• μ ‘κ·Ό 방법을 ν•¨κ»˜ μ‘°ν•©ν•΄μ„œ λ¬Έμ œμ— κ°€μž₯ μ ν•©ν•œ 도ꡬλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.

#4. μ½”ν‹€λ¦°μ˜ μ² ν•™

1. μ‹€μš©μ„±

  • 코틀린은 μ‹€μš©μ μΈ μ–Έμ–΄λ‹€.
  • IDE 도ꡬ 지원도 ν’λΆ€ν•˜λ‹€.

 

2. κ°„κ²°μ„±

  • κ°œλ°œμžκ°€ μž‘μ„±ν•˜λŠ” μ½”λ“œμ—μ„œ μ˜λ―Έμ—†λŠ” 뢀뢄을 쀄이고, λΆ€μˆ˜μ μΈ μš”μ†Œλ₯Ό 쀄이기 μœ„ν•΄ λ…Έλ ₯ν–ˆλ‹€.
  • λ‹€μ–‘ν•œ ν‘œμ€€ 라이브러리λ₯Ό μ œκ³΅ν•˜μ—¬ λ°˜λ³΅λ˜κ±°λ‚˜ κΈΈμ–΄μ§ˆ 수 μžˆλŠ” μ½”λ“œλ₯Ό 라이브러리 ν•¨μˆ˜ 호좜둜 λŒ€μΉ˜ν•  수 μžˆλ‹€.
  • λžŒλ‹€λ₯Ό μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ— μž‘μ€ μ½”λ“œ 블둝을 μ‰½κ²Œ μ „λ‹¬ν• μˆ˜ μžˆλ‹€.
  • μ½”λ“œκ°€ κ°„κ²°ν•˜λ©΄ μ“°λŠ” 데 μ‹œκ°„μ΄ 덜 κ±Έλ¦°λ‹€. -> μ½λŠ” 데도 μ‹œκ°„μ΄ 덜 κ±Έλ¦°λ‹€.

 

3. μ•ˆμ •μ„±

  • Nullable type 지원
  • νƒ€μž… 캐슀트 κ°„νŽΈν™”

 

4. μƒν˜Έμš΄μš©μ„±

  • μžλ°” λ©”μ„œλ“œ 호좜, μžλ°” 클래슀 상속, μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„, μžλ°” μ• λ…Έν…Œμ΄μ…˜ μ‚¬μš© λ“± λͺ¨λ‘ κ°€λŠ₯ν•˜λ‹€.

 

#5. μ½”ν‹€λ¦° λΉŒλ“œ κ³Όμ •

μ½”ν‹€λ¦° λΉŒλ“œ κ³Όμ • (좜처: Kotlin in action)