Nested Class
μ€μ²© (nested) ν΄λμ€λ ν΄λμ€ μμ μλ ν΄λμ€λ‘ μ μ μΈ μ€μ²© ν΄λμ€λ₯Ό λ§νλ€. μλ μ½λμμ λ§νλ Outer Class λ΄λΆμ μλ Nested Class μ κ°μκ±Έ λ§νλ€.
class OuterClass {
  // statement
  class NestedClass {
    // statement
  }
}
μ€μ²© ν΄λμ€λ ν¬κ² λ μ’ λ₯λ‘ λλ μ μλ€.
- Static Nested Class (μ μ  μ€μ²© ν΄λμ€)
 - Non-Static Nested Class (λΉ μ μ  μ€μ²© ν΄λμ€ :: Inner Class)
 
Static Nested Class (μ μ  μ€μ²© ν΄λμ€)
μ μ  μ€μ²© ν΄λμ€μ νΉμ§μ λ€μκ³Ό κ°λ€.
- Outer Class μ μ§μλ³μ μ κ·Όμ΄ λΆκ°λ₯
 - μΈλΆμμ 
OuterClass.NestedClassλ‘ κ°μ²΄ μμ± κ°λ₯ 
μλ°μμ μ¬μ©ν κ²½μ° μλμ κ°μ΄ μ¬μ©
class OuterClass {
  // statement
  static class StaticNestedClass {
    // statement
  }
}
μ½νλ¦°μμ μ¬μ©ν κ²½μ° μλμ κ°μ΄ μ¬μ©
class OuterClass {
  // statement
  class StaticNestedClass {
    // statement
  }
}
μ μ€μΌλ ν€μ½λμμ ꡬν λ΄μ©μ μΆκ°νλ©΄ μλμ κ°λ€.
class OuterClass {
  val outerValue = 10
  class StaticNestedClass {
    private val innerValue = 20
    fun printItems() {
      println("value: $innerValue")
    }
  }
}
fun main(args: Array<String>) {
  val nested = OuterClass.StaticNestedClass()
  nested.printItems()
}
Non-Static Nested Class
λΉ μ μ  μ€μ²© ν΄λμ€λ μΌλ°μ μΌλ‘ Inner Class λΌκ³ νλ©° νΉμ§μ λ€μκ³Ό κ°λ€.
- OuterClass μ μ§μλ³μ μ κ·Όμ΄ κ°λ₯
 - μΈλΆμμ 
OuterClass.NestedClassλ‘ κ°μ²΄ μμ±μ΄ λΆκ°λ₯ 
μλ°μ μ¬μ©ν κ²½μ° μλμ κ°μ΄ μ¬μ©
class OuterClass {
  // statement
  class InnerClass {
    // statement
  }
}
μ½νλ¦°μμλ μλμ κ°μ΄ μ¬μ©
class OuterClass {
  // statement
  inner class InnerClass {
    // statement
  }
}
μ½νλ¦°μμλ inner class λ‘ μ¬μ©νλ €λ©΄ inner ν€μλλ₯Ό κΌ λΆμ¬μ€μΌ νλ€.
μ μ€μΌλ ν€ μ½λμμ ꡬν μ½λλ₯Ό μΆκ°νλ©΄ λ€μκ³Ό κ°λ€.
class OuterClass {
  val outerValue = 10
  
  inner class InnerClass {
    private val innerValue = 20
    fun printItems() {
      println("inner: $innerValue, outer: $OuterValue")
    }
  }
  fun printItems() {
    val inner = InnerClass()
    inner.printItems()
  }
}
fun main(args: Array<String>) {
  val outer = OuterClass()
  outer.printItems()
}
μ°Έκ³ μλ£