Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- lifecycleScope
- dialog resize
- Retrofit with MVVM
- dialog fragment
- ScrollView with ConstraintLayout
- 리사이클러뷰
- ScrollView Child View Height Programmatically
- Retrofit Kotlin
- 다이얼로그 프래그먼트
- 데이터바인딩
- NestedScrollView
- 레트로핏2
- 뷰바인딩
- Android
- programmers
- java
- location System
- 스크롤뷰 자식 뷰 높이 동적조절
- 인텐트란?
- 레트로핏 코틀린
- 쉐어드
- recyclerview
- dialogfragment singleton
- viewBinding
- 다이얼로그 크기조절
- 위치정보확인
- DataBinding
- 안드로이드
- 레트로핏 MVVM
- 프로그래머스
Archives
- Today
- Total
안드로이드 세계
Data Class vs Class 본문
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의 특징은 다음과 같습니다.
- 생성자에는 한 개 이상의 프로퍼티를 가져야 한다.
- 프로퍼티는 var 또는 val로 선언되어야 한다.
- abstract, open, inner 등을 붙일 수 없습니다.
- toString(), copy(), hashCode(), equals() 자동으로 구현해줍니다.
- 상속이 불가능합니다.
정리
Entity를 이용할 때에는 데이터 클래스를 사용하게 됩니다. 그 이유로는 1. 일반적으로 구현해야 하는 메서드(toString(), equals(), hashCode(), copy())등을 자동으로 만들어주어 boilerplate Code 줄여줍니다.2. 일반적인 메서드를 자동으로 구현해주기 때문에 코드의 간결성이 올라가 가독성이 증가합니다.등이 있습니다.
참고
https://codechacha.com/ko/kotlin-destructuring-declarations/
문제가 될 시 포스팅을 삭제하겠습니다.
'안드로이드(Android) > 코틀린(Kotlin)' 카테고리의 다른 글
DialogFragment lifecycleScope 사용시 주의점 (0) | 2021.12.15 |
---|---|
com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable 에러 해결법 (0) | 2021.07.09 |
[Android] WorkManager 특정시간알림 (0) | 2021.06.01 |
[Android] WorkManager (0) | 2021.05.31 |
[Android] ScrollView의 Child View Height 문제 (0) | 2021.05.01 |
Comments