ν¬μΈν°κ° κ°λ¦¬ν€λ κ³³μ λ°λΌμ κ°λλ°, κ·Έκ³³μ λ©λͺ¨λ¦¬ μμ²΄κ° κ·μ λμ΄ μμ§ μμ λ Null Pointer Exceptionμ΄ λ°μνλ€! π€―
μ΄λ° μν©μ λ°©μ§νλ €λ©΄? λμ΄ κ°λ₯ν μλ£ν (Nullable Type)κ³Ό λΆκ°λ₯ν μλ£ν (Non-Null Type)μ ꡬλΆνλ€!
var a: String? = null // nullable (aλ λ¬Έμμ΄νμ΄μΌ? null μΈκ±°μΌ?)
var b: String = "Hello" // non-null (bλ λ¬Έμμ΄μ΄μΌ. null μ λΌ.)
b = null // Error
// μ»΄νμΌ λΆκ°
var name: String? = null
val len = name.length // μλ¬: null κ°λ₯μ± μλ κ²½μ° lengthμ μ κ·Ό λΆκ°
// μ»΄νμΌ κ°λ₯, Safe Call μ¬μ©
var name: String? = null
val len = name?.length // nameμ΄ nullμ΄ μλ κ²½μ°μλ§ lengthμ μ κ·Ό
val one: Int = 10 // Java: final int one = 20; (κ³ μ )
one = 12 // Error
var two: Int = 2
two = 5 // OK
val mutableList = mutableListOf<Int>(1, 2, 3, 4)
// .add() .remove() μ΄μ©ν΄μ μμ μΆκ°, μμ κ°λ₯ (κ°λ³μ±)
val immutableList = listOf<Int>(1, 2, 3, 4)
// .add() .remove() μ΄μ©ν΄μ μμ μΆκ°, μμ λΆκ°λ₯ (λΆλ³μ±)
μλ°λ λΆλ³μ±μ μ 곡νλ 컬λ μ
μ΄ μμμ§λ§, Java 9μμλΆν° μ 곡νκΈ° μμνλ€.
ex) List a = List.of("a", "b", "c");
μ¦, λ²μ μ λ°λΌμ λ μλ μκ³ μ λ μλ μλ€. νμ§λ§ μ½νλ¦°μ κΈ°λ³Έμ μΌλ‘ λ³μλ₯Ό mutable, immutable μ΄ λκ°μ§ μνλ‘ κ΅¬λΆνλ€!
ν΄λμ€ μμμ΄λ λμμΈ ν¨ν΄μ μ¬μ©νμ§ μκ³ λ ν΄λμ€μ νμ₯ ν¨μλ₯Ό λ§λ€μ΄μ κΈ°λ₯μ νμ₯ν μ μλ€. λ¨, λ무 λ§μ΄ μ¬μ©νλ©΄ κΈ°λ₯μ΄ λ¨λ°νκ² λλ―λ‘ κ°λ μ±μ΄ λ¨μ΄μ§ μ μλ€.
μλ μμμ²λΌ String ν΄λμ€μ νμ₯ ν¨μ lastChar()λ₯Ό λ§λ€λ©΄, μμ κ°μ²΄λ‘ λ°μ λ¬Έμμ΄μ λ§μ§λ§ λ¬Έμ '5'κ° λ¦¬ν΄λλ€.
fun add(a: Int, b: Int) = a + b
fun substract(a: Int, b: Int) = a - b
fun main() {
// μΌκΈ κ°μ²΄λ ν¨μμ μΈμ, λ°νκ°,
// μ¬μ§μ΄ μλ μ½λμ²λΌ 리μ€νΈ κ°μ μλ£κ΅¬μ‘°μλ λ£μ μ μλ€!
val functions = mutableListOf(::add, ::substract)
println(functions[0])
// fun add(kotlin.Int, kotlin.Int): kotlin.Int
// functions[0]λ add ν¨μ
println(functions[0](12,30))
// 12+30 = 42
// functions[1]μ substract ν¨μ
println(functions[1](57,15))
// 57-15 = 42
}
fun calculator(a: Int, b: Int, sum: (Int, Int) -> Int): Int {
return a + b + sum(a, b)
}
fun main(){
val out = calculator(11, 10, { a, b -> a + b })
// calculator(11, 10) { a, b -> a + b } μ λμΌ
// 11+10+(11+10) = 42
println(out)
}
μ΄μ²λΌ ν¨μν νλ‘κ·Έλλ°μ 볡μ‘ν μμ κ°κ²°ν ν μ μλ€λ κ² κ°μ₯ μ€μν νΉμ§μ΄λ€.
μ΄μΈμλ μ½νλ¦°μ Coroutines (λΉλκΈ° μ²λ¦¬), DSL (Domain-Specific Language), Multiplatform, Higher-order Functions, OOP λ± λ§μ νΉμ§μ κ°κ³ μλ€! μμΌλ‘ μ°¨μ°¨ μ΄λ¬ν λ΄μ©μ λν΄ μμΈν λ°°μ°κ² λ κ²μ΄λ€.
μλ£νμ λν μ€λ₯λ₯Ό 미리 μ‘μ μ μλ μ μ μΈμ΄μ
λλ€.
μ½νλ¦°μ νλ‘κ·Έλ¨μ΄ μ»΄νμΌλ λ μλ£νμ κ²μ¬νμ¬ νμ νλ μ μ μΈμ΄μ
λλ€. μ¦ μλ£ν μ€λ₯λ₯Ό μ΄κΈ°μ λ°κ²¬ν μ μμ΄ νλ‘κ·Έλ¨μ μμ μ±μ΄ μ’μμ§λλ€.
λ ν¬μΈν°λ‘ μΈν νλ‘κ·Έλ¨μ μ€λ¨μ μλ°©ν μ μμ΅λλ€.
μ»΄ν¨ν° νλ‘κ·Έλλ°μ κ΄μ¬μ΄ λ§μ λ
μλΌλ©΄ λ ν¬μΈν° μμΈ(Null Pointer Exception)μ νλ²μ―€μ κ²½ννκ±°λ λ€μ΄λ³Έ μ μ΄ μμ κ²μ
λλ€. λ ν¬μΈν° μ€λ₯λ νλ‘κ·Έλ¨μ΄ μ€νλλ λμ€μ λ°μνκΈ° λλ¬Έμ μΈμ μ΄λμ μ΄λ»κ² λ°μν μ§ μ무λ μ μ μμ΅λλ€. μ€λ«λμ νλ‘κ·Έλλ¨Έμ 골μΉλ₯Ό μνκ² λ§λ μ£Όλ²μ΄μ£ . νμ§λ§ μ½νλ¦°μ λ ν¬μΈν° μ€λ₯λ₯Ό 미리 μλ°©ν μ μμ΅λλ€.
βΆ λ³΄ν΅ κ°λ°μλ€μ μ½νλ¦°μ μ΄λ° νΉμ§μ 'NPEμμ μμ λ‘λ€'λΌκ³ λ§ν©λλ€.
βΆ NPEλ Null Pointer Exceptionμ μ€μ¬ λ§ν κ²μ
λλ€.
μμ£Ό κ°κ²°νκ³ ν¨μ¨μ μ
λλ€.
μ½νλ¦°μ μ¬λ¬κ°μ§ μλ΅λ ννμ΄ κ°λ₯ν μΈμ΄μ
λλ€. κ·Έλμ λ€λ₯Έ μΈμ΄λ³΄λ€ ν¨μ¬ κ°κ²°νκ³ ν¨μ¨μ μΌλ‘ μ½λ©μ ν μ μμ΅λλ€.
ν¨μν νλ‘κ·Έλλ°κ³Ό κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ΄ λͺ¨λ κ°λ₯ν©λλ€.
ν¨μλ₯Ό λ³μμ μ μ₯νκ±°λ ν¨μλ₯Ό λ€λ₯Έ ν¨μμ 맀κ°λ³μλ‘ λκΈΈ μ μλ ν¨μν νλ‘κ·Έλλ°κ³Ό ν΄λμ€λ₯Ό μ¬μ©νλ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ λͺ¨λ ν μ μμ΅λλ€.
βΆ λ³΄ν΅ μ΄λ° νΉμ§μ 'λ©ν° ν¨λ¬λ€μ μΈμ΄'λΌκ³ λΆλ¦
λλ€.
μΈλ―Έμ½λ‘ μ μλ΅ν μ μμ΅λλ€.
μ½λλ₯Ό μμ±ν λ λ¬Έμ₯μ λ§μ§λ§μ μ¬μ©νλ μΈλ―Έμ½λ‘ (;)μ μλ΅ν μλ μμ΅λλ€.