NeuroWhAI의 잡블로그

[Kotlin] Data class, Inner class 본문

개발 및 공부/언어

[Kotlin] Data class, Inner class

NeuroWhAI 2018. 9. 29. 19:24


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