-
[Kotlin] 데이터 클래스(Data Class) 이해하기(1)Kotlin 2021. 3. 19. 01:25
최근 높은 연봉으로 개발자들 사이에서 이야기가 많이 나오는 모 대기업의 기술면접에서 제대로 대답하지 못해 아쉬웠던 질문들에 대한 답들을 블로그에 하나씩 정리해보려 한다.
그중 첫 번째는 데이터 클래스(data class)에 대한 것이다.1. 데이터 클래스(data class)란?
먼저 데이터 클래스란 data를 보유하는 클래스이면서 아무것도 하지 않는 것을 말한다.
즉, 데이터를 보관하기 위한 목적으로 사용하는 클래스이다.
(그렇다고 데이터 클래스 없이 데이터를 다룰 수 없다는 말은 아니다.)2. 사용 목적
메서드 없이 데이터 보관만을 목적으로 만들어지는 클래스이다.
특히 코틀린에서 데이터 클래스를 사용하는 이유는 기본적으로 제공되는 다음과 같은 기능들을 사용하기 위함이다.* getters()* setters(): getter와 setter같은 접근자의 경우 따로 익힐 필요가 없는데 그 이유는 3-2에서 알 수 있다.
* equals()
* hashcode()
* copy()
* toString()
* componentN()
코틀린에서는 위 기능들을 자동으로 생성해준다.
하나씩 살펴보자.3. 사용 방법
3-1. 데이터 클래스의 선언
kotlin에서 data class를 선언하는 형태는 다음과 같다.
data class Dogs(
@PrimaryKey(autoGenerate = true)
val Id: Long = 0,
val name: String = " ",
val age: Int = 0
)* 데이터 클래스의 기본 생성자는 val 또는 var로 선언해야 한다.
var과 val의 차이점에 대해서
* Id는 중복되지 않게 PrimaryKey로 선언하는데, 이때 autoGenerate를 true로 할 경우 Id값은 자동으로 1씩 증가한다.
데이터베이스에서 각각의 데이터를 식별하는 유일키는 이후 중요한 역할을 하게 되는데 이는 DB 관련 글을 쓸 때 설명하겠다.
* 데이터 클래스의 생성자는 Long, String, Int 외에도 다양하게 선언할 수 있다.
3-2. 접근자(getter/setter)의 사용
Java에서 사용하고자 할 경우 Dogs라는 클래스를 생성하고 각 필드에 getter와 setter를 만들어주어야 한다.
데이터클래스 Dogs의 필드가 name한가지라고 했을때 필요한 코드는 다음과 같아진다.
//Java code
public class Dogs {
private String name;
public Dogs(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}field 하나를 생성하고 getter, setter 생성자를 만들기 위해 위와같은 코드가 필요하지만
코틀린을 사용하면 다음과 같다.
//Kotlin code
data class Dogs( val name: String )이처럼 kotlin에서는 클래스를 생성하고 필드를 만들어주면 내부적으로 접근자를 생성해주기에 별도의 코딩을 하지 않아도 된다.
그렇다면 Java에서의 getName() 메서드는 kotlin에서 어떻게 사용할 수 있는지 다음을 확인하자.
//Kotlin code
data class Dogs (
val name: String,
val age: Int
)
fun dogPage (array: Array<String>) {
val dogs = Dogs("ruby", 1)
dogs.age = 2
println("Name : ${dogs.name}")
println("Age : ${dogs.age}")
}위에서 확인 할 수 있듯 일반 변수처럼 사용이 가능하다.
data class에서 where의 역할을 하는 equals등 본격적인 기능은 다음글에서 설명하겠다.
'Kotlin' 카테고리의 다른 글
[Kotlin] val과 var의 차이와 사용 (0) 2021.03.19