코틀린 2.0.0 이 곧 정식으로 출시될 것 같아 그 전에 코틀린 기초를 정리하려 한다.
이름 그대로 데이터가 목적인 클래스다.
클래스도 데이터 보관이 되지만, 클래스는 기능을 데이터 클래스는 데이터를 중점으로 두고 있다.
데이터 클래스는 다음 특성을 가진다.
클래스와 동일하게 eqauls('==')이 있다.
클래스는 두 객체가 같아요 true가 나오지만 데이터 클래스는 변수 값만 같으면 true가 나온다.
만약 데이터 클래스 자체를 비교하려면 '==='연산자를 사용해야 한다.
val person1 = Person("name1", 10)
val person2 = Person("name1", 10)
val human1 = Human(10)
val human2 = Human(10)
println(person1 == person2)
println(person1 === person2)
println(human1 == human2)
클래스는 toString을 호출하면 클래스 이름과 해시 값의 조합돼서 이상한 값이 나온다.
데이터 클래스는 순수하게 멤버 변수만 출력하기 때문에 간단하게 값을 볼 수 있다.
데이터 클래스는 멤버 변수의 이름을 지정하지 않아도 component를 사용하면 값을 사용할 수 있다.
실제로 어떻게 사용되는 지는 아래에 설명이 나온다.
보통 클래스 변수를 꺼낼려면 1줄에 1개씩 꺼내는 게 일반적이다.
데이터 클래스는 구조 분해를 사용해 한 줄에 여러 변수를 한 번에 꺼낼 수 있다.
val person1 = Person("name1", 10)
val (name, age) = person1
구조 분해 코드는 컴파일 시 위에서 설명한 component를 사용해 변수를 꺼낸다.
데이터 클래스의 변수를 그대로 복사해 준다.
특이하게도 copy의 파라미터로 특정 멤버를 지정하면 해당 변수만 바꿔서 복사해준다.
주로 데이터 상태를 유지할 때 유용하게 사용한다.
val person1 = Person("name1", 10)
val person2 = person1.copy(name = "name2")
Pair와 Triple도 데이터 클래스라고 한다.
Pair은 변수 2개, Triple은 변수 3개를 저장할 수 있다.