안드로이드 세계

Data Class vs Class 본문

안드로이드(Android)/코틀린(Kotlin)

Data Class vs Class

리안94 2021. 7. 3. 03:42

Data Class는 데이터 보관 목적으로 만들어진 클래스인데, 일반 Class와 달리 toString(), copy(), hashCode(), equals()를 자동으로 구현해줍니다.

 

따라서 boilerplate Code를 줄여주는 장점이있습니다.

 

data class User(val userId: String, val userName: String)

class NormalClassUser(val userId: String, val userName: String)
val user = User("user1", "ryan")
val user2 = user.copy()
val normalUser = NormalClassUser("user2", "ryan2")
val normalUser2 = normalUser.copy() // Class는 Copy가 구현되어있지않기때문에 error발생



user.also {
    Log.e("Data Class", "userId -> ${it.userId} userName -> ${it.userName} toString -> $it hashCode -> ${it.hashCode()}")
}

normalUser.also {
    Log.e("Class", "userId -> ${it.userId} userName -> ${it.userName} toString-> $it hashCode -> ${it.hashCode()}")
}

 

아래의 코드는 로그입니다.

E/Data Class: userId -> user1 userName -> ryan toString -> User(userId=user1, userName=ryan) hashCode -> -832516178
E/Class: userId -> user2 userName -> ryan2 toString-> kr.ryan.comparedataclasswithclass.NormalClassUser@14cb62b hashCode -> 21804587

 

로그의 결과처럼 차이점은 copy가 구현되어있지 않은 점

객체를 출력하였을 때 Class는 객체의 주소가 나오는 점과, Data Class는 객체의 내용이 출력되는 점이 다른 것을 확인할 수 있습니다.

 

 

Data Class의 특징은 다음과 같습니다.

  1. 생성자에는 한 개 이상의 프로퍼티를 가져야 한다.
  2. 프로퍼티는 var 또는 val로 선언되어야 한다.
  3. abstract, open, inner 등을 붙일 수 없습니다.
  4. toString(), copy(), hashCode(), equals() 자동으로 구현해줍니다.
  5. 상속이 불가능합니다.

 

정리

Entity를 이용할 때에는 데이터 클래스를 사용하게 됩니다. 그 이유로는 1. 일반적으로 구현해야 하는 메서드(toString(), equals(), hashCode(), copy())등을 자동으로 만들어주어 boilerplate Code 줄여줍니다.2. 일반적인 메서드를 자동으로 구현해주기 때문에 코드의 간결성이 올라가 가독성이 증가합니다.등이 있습니다.

 

 

참고

https://codechacha.com/ko/kotlin-destructuring-declarations/

 

Kotlin - Destructuring Declaration

Destructuring Declaration은 어떤 객체의 데이터를 변수들에 대입하는 기술입니다. 이 기술은 코드의 가독성을 높여주며 코드의 길이를 줄여줍니다. 데이터 클래스가 이런 기능을 기본으로 지원하며,

codechacha.com

문제가 될 시 포스팅을 삭제하겠습니다.

Comments