728x90

kotlin in action 6

[Kotlin in action] 6. μ½”ν‹€λ¦° νƒ€μž… μ‹œμŠ€ν…œ

#1. null κ°€λŠ₯μ„± (nullability) NPEλ₯Ό ν”Όν•  수 있게 돕기 μœ„ν•œ μ½”ν‹€λ¦° νƒ€μž… μ‹œμŠ€ν…œμ˜ νŠΉμ„± Nullable νƒ€μž… μ½”ν‹€λ¦° νƒ€μž… μ‹œμŠ€ν…œμ΄ null이 될 수 μžˆλŠ” νƒ€μž…μ„ λͺ…μ‹œμ μœΌλ‘œ μ§€μ›ν•œλ‹€. νƒ€μž… 이름 뒀에 ?λ₯Ό 뢙이면 κ·Έ νƒ€μž…μ˜ λ³€μˆ˜λ‚˜ ν”„λ‘œνΌν‹°μ— null μ°Έμ‘°λ₯Ό μ €μž₯ν•  수 μžˆλ‹€. ?κ°€ μ—†λŠ” νƒ€μž…μ€ κ·Έ λ³€μˆ˜κ°€ null μ°Έμ‘°λ₯Ό μ €μž₯ν•  수 μ—†λ‹€. Nullable νƒ€μž…μΈ λ³€μˆ˜μ— λŒ€ν•΄ λ³€μˆ˜.λ©”μ„œλ“œ() 처럼 λ©”μ„œλ“œλ₯Ό 직접 ν˜ΈμΆœν•  μˆ˜λŠ” μ—†λ‹€. Nullable 값을 NonNull νƒ€μž…μ˜ λ³€μˆ˜μ— λŒ€μž…ν•  수 μ—†λ‹€. val x: String? = null val y: String = x //=> Error: Type mismatch: inferred type is String? but String was ex..

개발/Kotlin 2021.08.13

[Kotlin In Action] 5. λžŒλ‹€λ‘œ ν”„λ‘œκ·Έλž˜λ°

λžŒλ‹€μ‹/λžŒλ‹€: λ‹€λ₯Έ ν•¨μˆ˜μ— λ„˜κΈΈ 수 μžˆλŠ” μž‘μ€ μ½”λ“œ 쑰각 #1. λžŒλ‹€μ‹κ³Ό 멀버 μ°Έμ‘° λžŒλ‹€: μ½”λ“œ λΈ”λŸ­μ„ ν•¨μˆ˜ 인자둜 λ„˜κΈ°κΈ° λžŒλ‹€ 식을 μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  ν•„μš”κ°€ μ—†κ³ , μ½”λ“œ λΈ”λŸ­μ„ 직접 ν•¨μˆ˜μ˜ 인자둜 전달할 수 μžˆλ‹€. button.setOnClickListener { /* actions on click */ } -> λžŒλ‹€λ₯Ό λ©”μ„œλ“œκ°€ ν•˜λ‚˜λΏμΈ 무λͺ… 객체 λŒ€μ‹  μ‚¬μš©ν•  수 μžˆλ‹€. λžŒλ‹€μ™€ μ»¬λ ‰μ…˜ μ˜ˆμ‹œ) maxBy: μ»¬λ ‰μ…˜μ—μ„œ νŠΉμ • 쑰건을 κΈ°μ€€μœΌλ‘œ κ°€μž₯ 큰 μ›μ†Œλ₯Ό μ°Ύμ•„ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜ val people = listOf(Person("Alice", 29), Person("Bob", 31)) println(people.maxBy { it.age }) //λΉ„κ΅μ˜ 기쀀이 될 값을 λžŒλ‹€λ‘œ μ „λ‹¬ν•œλ‹€. ν•¨μˆ˜λ‚˜ ν”„λ‘œνΌν‹°λ₯Ό ..

개발/Kotlin 2021.05.29

[Kotlin In Action] 4. 클래슀, 객체, μΈν„°νŽ˜μ΄μŠ€

#1. 클래슀 계측 μ •μ˜ μΈν„°νŽ˜μ΄μŠ€ μ½”ν‹€λ¦° μΈν„°νŽ˜μ΄μŠ€ μ•ˆμ—λŠ” 좔상 λ©”μ„œλ“œλΏ μ•„λ‹ˆλΌ κ΅¬ν˜„μ΄ μžˆλŠ” λ©”μ„œλ“œλ„ μ •μ˜ν•  수 μžˆλ‹€. μƒνƒœ(ν•„λ“œ)λŠ” λ“€μ–΄κ°ˆ 수 μ—†λ‹€. //μΈν„°νŽ˜μ΄μŠ€ μ •μ˜ interface Clickable { fun click() } //μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ class Button : Clickable { //코틀린은 클래슀 ν™•μž₯κ³Ό μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ λͺ¨λ‘ 콜둠(:)을 뢙인닀. //μ˜€λ²„λΌμ΄λ“œ ν‘œμ‹œ override fun click() = println("I was clicked") } μžλ°”μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ μΈν„°νŽ˜μ΄μŠ€λŠ” 개수 μ œν•œμ—†μ΄ λ§ˆμŒλŒ€λ‘œ κ΅¬ν˜„ν•  수 μžˆμ§€λ§Œ, ν΄λž˜μŠ€λŠ” 였직 ν•˜λ‚˜λ§Œ ν™•μž₯ν•  수 μžˆλ‹€. μƒμœ„ ν΄λž˜μŠ€μ— μžˆλŠ” λ©”μ„œλ“œμ™€ μ‹œκ·Έλ‹ˆμ²˜κ°€ 같은 λ©”μ„œλ“œλ₯Ό μš°μ—°νžˆ ν•˜μœ„ ν΄λž˜μŠ€μ— μ„ μ–Έν•˜λŠ” 경우, 컴파일이 μ•ˆ 되기 λ•Œλ¬Έμ—..

개발/Kotlin 2021.05.19

[Kotlin In Action] 3. ν•¨μˆ˜ μ •μ˜μ™€ 호좜

#1. ν•¨μˆ˜ 호좜 fun joinToString( collection: Collection, separator: String, prefix: String, postfix: String ): String { val result = StringBuilder(prefix) for ((index, element) in collection.withIndex()) { if (index > 0) result.append(separator) result.append(element) } result.append(postfix) return result.toString() } 이름 뢙인 인자 μžλ°” joinToString(collection, /* separator */ " ", /* prefix */ " ", /* pos..

개발/Kotlin 2021.05.10

[Kotlin In Action] 2. μ½”ν‹€λ¦° 기초

#1. ν•¨μˆ˜ Hello, world! fun main(args: Array) { println("Hello, world!") } ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ fun ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€. λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œλ‚˜ νŒŒλΌλ―Έν„° 이름 뒀에 νƒ€μž…μ„ μ“΄λ‹€. ν•¨μˆ˜λ₯Ό μ΅œμƒμœ„ μˆ˜μ€€μ— μ •μ˜ν•  수 μžˆλ‹€. 클래슀 μ•ˆμ— λ„£μ–΄μ•Ό ν•  ν•„μš”κ°€ μ—†λ‹€. 배열도 일반적인 ν΄λž˜μŠ€μ™€ λ§ˆμ°¬κ°€μ§€λ‹€. μ„Έλ―Έμ½œλ‘ (;)을 뢙이지 μ•Šμ•„λ„ λœλ‹€. statement(λ¬Έ)κ³Ό expression(식)의 ꡬ뢄 식: 값을 λ§Œλ“€μ–΄λ‚΄λ©°, λ‹€λ₯Έ μ‹μ˜ ν•˜μœ„μš”μ†Œλ‘œ 계산에 μ°Έμ—¬ν•  수 μžˆλ‹€. λ¬Έ: μžμ‹ μ„ λ‘˜λŸ¬μ‹Έκ³  μžˆλŠ” κ°€μž₯ μ•ˆμͺ½ λΈ”λŸ­μ˜ μ΅œμƒμœ„ μš”μ†Œλ‘œ μ‘΄μž¬ν•˜μ—¬ μ•„λ¬΄λŸ° 값을 λ§Œλ“€μ–΄λ‚΄μ§€ μ•ŠλŠ”λ‹€. μžλ°”μ—μ„œλŠ” λͺ¨λ“  μ œμ–΄κ΅¬μ‘°κ°€ 'λ¬Έ'인 반면, μ½”ν‹€λ¦°μ—μ„œλŠ” 루프λ₯Ό μ œμ™Έν•œ λŒ€λΆ€λΆ„μ˜ μ œμ–΄κ΅¬μ‘°κ°€ '식'이닀. 식이..

개발/Kotlin 2021.05.10

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

#1. μ½”ν‹€λ¦°(Kotlin)? μžλ°” ν”Œλž«νΌμ—μ„œ λŒμ•„κ°€λŠ” μƒˆλ‘œμš΄ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ κ°„κ²°, μ‹€μš©μ , μžλ°” μ½”λ“œμ™€μ˜ μƒν˜Έμš΄μš©μ„± μ€‘μ‹œ #2. μ£Όμš” νŠΉμ„± λŒ€μƒ ν”Œλž«νΌ μ„œλ²„, μ•ˆλ“œλ‘œμ΄λ“œ λ“± μžλ°”κ°€ μ‹€ν–‰λ˜λŠ” λͺ¨λ“  κ³³ 정적 νƒ€μž… 지정 μ–Έμ–΄ - 정적 νƒ€μž… 지정 μ–Έμ–΄: ν”„λ‘œκ·Έλž¨ ꡬ성 μš”μ†Œμ˜ νƒ€μž…μ„ 컴파일 μ‹œμ μ— μ•Œ 수 있고, ν•„λ“œλ‚˜ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œλ§ˆλ‹€ μ»΄νŒŒμΌλŸ¬κ°€ νƒ€μž…μ„ 검증해쀀닀. - 동적 νƒ€μž… 지정 μ–Έμ–΄: νƒ€μž…κ³Ό 관계없이 λͺ¨λ“  값을 λ³€μˆ˜μ— 넣을 수 있고, ν•„λ“œλ‚˜ λ©”μ„œλ“œ 접근에 λŒ€ν•œ 검증이 μ‹€ν–‰ μ‹œμ μ— μΌμ–΄λ‚œλ‹€. 정적 νƒ€μž… μ§€μ •μ˜ μž₯점 μ„±λŠ₯: μ‹€ν–‰ μ‹œμ μ— μ–΄λ–€ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν• μ§€ μ•Œμ•„λ‚΄λŠ” 과정이 ν•„μš”μ—†μ–΄μ„œ λΉ λ₯΄λ‹€. μ‹ λ’°μ„±: μ»΄νŒŒμΌλŸ¬κ°€ κ²€μ¦ν•˜κΈ° λ•Œλ¬Έμ— μ‹€ν–‰ μ‹œ 였λ₯˜λ‘œ μ€‘λœλ  κ°€λŠ₯성이 적닀. μœ μ§€ λ³΄μˆ˜μ„±: μ½”λ“œμ—μ„œ λ‹€λ£¨λŠ” 객..

개발/Kotlin 2021.05.09