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 |
Tags
- MiTweet
- 암호학
- Coroutines
- ProGuard
- Hilt
- androidStudio
- AWS
- boj
- 코루틴
- pandas
- Compose
- 프로그래머스
- Kotlin
- relay
- 백준
- architecture
- activity
- Coroutine
- Rxjava
- MyVoca
- livedata
- android
- 쿠링
- 코드포스
- GitHub
- Python
- Codeforces
- TEST
- textfield
- Gradle
Archives
- Today
- Total
이동식 저장소
[Kotlin] 데이터 클래스 본문
Data Class
클래스의 용도 중 하나로 데이터 전달이 있다. 코틀린에서는 데이터 전달용 객체(Data Transfer Object, DTO)를 편리하게 선언할 수 있도록 ``data class``라는 키워드를 지원한다.
데이터를 표현하는 객체는 다음의 메소드를 지원해야 한다.
- getters, setters: 프로퍼티 읽기/쓰기용 메소드
- ``equals()``: 데이터의 값이 같은지 비교할 때 사용
- ``toString()``: 데이터를 문자열로 쉽게 알아보고 싶을 때 사용
- ``hashCode()``: ``Map`` 등에서 해시값을 계산할 때 사용
- ``copy()``: 객체 복사
더보기
# 코틀린에서의 객체 비교 (펼치기)
자바에서 == 연산자를 사용하면 두 변수가 동일한 객체를 가리키는지 검사한다. 그러나 코틀린에서는 가리키는 객체가 아닌 객체의 값을 비교한다. 코틀린에서 동일한 객체를 가리키는지 검사하고 싶다면 ===를 사용해야 한다.
자바로 ``DTO``를 선언하려면 위의 메소드를 모두 정의해야 한다. 그러나 코틀린에서는 프로퍼티만 잘 정의하면 ``data class``가 위의 메소드를 모두 정의해 준다.
Data Class 선언
data class Customer(var name: String, var email: String)
- 주 생성자(클래스 이름 바로 옆의 생성자)는 최소한 하나의 매개변수를 가져야 한다.
- 주 생성자에는 var 또는 val로 선언된 프로퍼티만 존재해야 한다.
- 데이터 클래스에는 ``abstract``, ``open`` 등의 키워드를 사용할 수 없다.
데이터 클래스의 ``init`` 블럭이나 부 생성자 등에 간단한 코드를 작성할 수 있다.
메소드 사용 예시
val cus1 = Customer("hsk", "hsk@email.com")
val cus2 = Customer("hsk", "hsk@email.com")
println(cus1 == cus2) // true
val cus3 = cus1.copy(name = "hsk2") // name만 변경하고 나머지는 그대로 가져옴
println(cus3) // Customer(name=hsk2, email=hsk@email.com)
Destructuring
파이썬을 배웠다면 다음과 같이 튜플의 원소를 가져올 수 있음을 알 것이다.
tup = ('1', 2, '3')
one, two, three = tup
코틀린에서는 ``data class``의 프로퍼티를 위와 비슷한 방법으로 가져올 수 있다.
val (name, email) = cus1
println(name, email) // hsk, hsk@email.com
특정 프로퍼티를 쓰지 않을 경우 ``_``로 대체해도 된다.
val (_, email) = cus1
for문에서도 사용할 수 있다.
for ((name, email) in customers) {
println("name = $name, email = $email")
}
람다식에서도 사용할 수 있다.
val myLambda = { (name, email): Customer ->
println(name)
}
myLambda(cus1)
참고문헌
코틀린 프로그래밍 기본 2/2(객체지향편) > 3-2 데이터 클래스와 기타 클래스 (1) 데이터 클래스란 : 부스트코스 (boostcourse.org)
'Primary > Kotlin' 카테고리의 다른 글
[Kotlin] Coroutines - Basics (0) | 2021.01.19 |
---|---|
[Kotlin] Sequence (0) | 2021.01.15 |
[Kotlin] Thread 생성 및 실행 (0) | 2021.01.14 |
[Kotlin] Collections 확장 함수 (0) | 2021.01.13 |
[Kotlin] 위임 (0) | 2021.01.06 |
Comments