data class User(val name: String, val age: Int)
기본 생성자에서 선언된 속성을 통해 컴파일러가 자동적으로 생성해준다
의미있는 Data 클래스의 조건
기본생성자에 1개 이상의 파라미터
기본생성자의 파라미터가 var, val로 선언
Data클래스는 abstract, open, sealed, inner가 안됨
Data 클래스 interface구현 기능 (1.1버전 이후)
Sealed class 상속가능 (1.1버전 이후)
fun foo() {
val obj = User("BAE",32)
println(obj) // User(name=BAE, age=32)로 출력된다. 주소값이 출력되는게 아닌 toString()
}
toString() 그 외에도 실제 디컴파일해보면 여러가지 메서드들이 생성되있다.
기본값 설정
data class User(var name: String = "", var age:Int = 0) // 기본값 설정해주면 된다.
val obj = User(); //파리머터없는 생성자도 가능.
val obj2 = User("TEST") // name이 TEST로 변경되서 출력된다. (타입에 따라 추론가능하니까)
val obj3 = User("BAE", 32) // 두가지 모두 설정
val obj4 = User(age=444) // age만 바꿀경우, 지정하여서 출력도 가능
바디에도 변수를 만들 수 있다. (단 컴파일러가 만들어주는 메서드는 적용되지 않는다.)
data class User(var name: String, var age:Int) {
var other1: Int = 1
}
/*
위처럼, 바디에 변수를 넣더라도, 자동으로 생성되는 메서드들은 생성되지 않는다.
*/
fun foo() {
val obj = User("BAE",32)
println(obj) // User(name=BAE, age=32)로 출력된다. 바디에 변수를 넣더라도 적용안됨.!
}