본문 바로가기
Kotlin

[깡샘의 코틀린 프로그래밍] 정리 11 - data 클래스

by 들풀민들레 2018. 3. 2.

본 글은 [깡샘의 코틀린 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.

좀더 자세한 내용은 책을 통해 확인해 주세요.

 

 

 

11장. 다양한 코틀린 클래스

 

11.1.1. data 클래스란?

 

어떤 클래스는 내부에 특별한 로직의 함수 없이 데이터만 포함할 수 있습니다. 흔히 객체지향 프로그래밍에서는 이를 VO(Value-Object) 클래스라 부릅니다. 관련된 데이터 여러 개를 클래스로 묶어서 이용하려는 목적으로 VO 클래스를 만듭니다. 그런데 코틀린에서는 이런 클래스들을 조금 더 편하게 이용하라고 데이터 클래스를 제공합니다. 데이터 클래스는 data라는 예약어로 선언하는 클래스입니다.

 

01 data class User(val name: String, val age: Int)

 

일반 클래스 선언과 비교해 보면 클래스 선언 부분에 data라는 예약어가 추가된다는 점만 차이가 있습니다. 데이터 클래스는 다음의 조건에 맞게 선언해야 합니다.

 

  • 주 생성자를 선언해야 하며 주 생성자의 매개변수는 최소 하나 이상이어야 한다.
  • 모든 주 생성자의 매개변수는 var 혹은 val로 선언해야 한다.
  • 데이터 클래스는 abstract, open, sealed, inner 등의 예약어를 추가할 수 없다.

 

다음은 이러한 조건에 어긋나서 데이터 클래스 사용 시 에러가 발생하는 상황을 보여줍니다

 

01 data class User1() //에러

02

03 data class User2(name: String) //에러

04

05 data abstract class User3(val name: String) //에러

06

07 data class User4(val name: String, no: Int) //에러

 

데이터 클래스는 클래스에 정의된 데이터와 관련된 편리한 기능을 제공합니다. 그런데 데이터 클래스에 선언된 모든 데이터가 아닌, 주 생성자에 매개변수로 선언된 데이터에 한해서만 제공합니다. 따라서 주생성자를 꼭 정의해야 하고 주 생성자의 매개변수를 하나 이상 선언해야 하며 val이나 var 키워드로 선언해야 한다는 조건이 있습니다.

 

01번 줄은 주 생성자에 매개변수가 없어서 에러이며, 03번 줄은 주 생성자의 매개변수는 있지만, var나 val로 선언하지 않아서 에러가 발생합니다. 또한, 05번 줄처럼 data 클래스를 abstract로 선언할 수는 없습니다. 07번 줄은 주 생성자의 매개변수가 두 개인데 첫 번째 매개변수는 val로 선언했지만, 두 번째 매개변수는 var나 val로 선언하지 않아서 에러가 발생합니다. 주 생성자의 매개변수는 몇 개를 선언하든 상관없지만, data 클래스는 모두 var나 val로 선언해야 합니다.