Notice
Recent Posts
Recent Comments
NeuroWhAI의 잡블로그
[Kotlin] Data class, Inner class 본문
package com.neurowhai
data class Book(val id: Int, val name: String, var info: String = "NOPE") {
// 오직 기본 생성자에 선언된 프로퍼티만 데이터로 취급하므로
// 그 외의 멤버는 toString, copy, hashCode등의
// 자동으로 생성된 메소드에서 다루지 않음.
val fullName
get() = "$id - $name"
}
class Outer {
class Inner {
fun foo() = 42
}
}
class Outer2 {
var value: Int = 42
inner class Inner {
// inner 키워드로 수식된 내부 클래스는
// 외부 클래스의 멤버에 접근 가능
fun sum(n: Int) = value + n
}
}
fun main(args: Array<String>) {
val b1 = Book(1, "테스트")
val b2 = Book(1, "테스트", info="abcd")
b1.info = "abcd"
println(b1 == b2) // b1.equals(b2)
println(b1) // println(b1.toString())
println(b1.fullName)
b2.info = "꺌룰랭"
println(b2.info)
println(b2.hashCode())
val b3 = b2.copy(name="뀨뀨", info="꺄꺄")
println(b3)
val (id) = b3;
println(id)
val (_, name) = b3;
println("$id, $name")
val (id2, _, info) = b3;
println("$id2, $name, $info")
println(Pair(42, "asdf"))
val obj = Outer.Inner()
println(obj.foo())
// inner 키워드로 수식된 내부 클래스를 생성하려면
// 먼저 외부 클래스를 생성해야 함.
val obj2 = Outer2().Inner()
println(obj2.sum(1))
val outer = Outer2()
val obj3 = outer.Inner()
outer.value = 777
println(obj3.sum(0))
}
true Book(id=1, name=테스트, info=abcd) 1 - 테스트 꺌룰랭 1690215722 Book(id=1, name=뀨뀨, info=꺄꺄) 1 1, 뀨뀨 1, 뀨뀨, 꺄꺄 (42, asdf) 42 43 777
다른 언어와 다르게 중첩 클래스가 좀 더 확장된 기능을 가지는 것 같네요.
데이터 클래스는 편리해보이네요.
'개발 및 공부 > 언어' 카테고리의 다른 글
[Kotlin] object (0) | 2018.10.07 |
---|---|
[C++] 다중 상속시 인스턴스 주소를 얻을 때 주의할 점 (0) | 2018.09.30 |
[Kotlin] 프로퍼티 (0) | 2018.09.22 |
[C++] Structured binding 설명 (0) | 2018.09.20 |
[Kotlin] 상속 (0) | 2018.09.15 |
Comments