24 Data 클래스와 Enum 클래스
24 Data 클래스와 Enum 클래스
Data 클래스
데이터를 다루는 데 최적화 된 클래스
Data 클래스의 기능
- 5가지 기능을 내부적으로 자동으로 생성
- 사용자가 직접 호출하기 위한 함수가 아닌 배열이나 리스트 등에 Data 클래스의 객체가 담겨있을 때 내용을 자동으로 꺼내 쓸 수 있는 기능을 지원하기 위한 함수
- equals() : 내용의 동일성을 판단
- hashCode() : 객체의 내용에서 고유한 코드를 생성
- toString() : 포함된 속성을 보기쉽게 나타냄
- copy() : 객체를 복사하여 똑같은 내용의 새 객체를 만듦. 패러미터가 있다면 일부 속성을 변경하여 생성할 수 있음
- componentX() : 속성을 순서대로 반환. 내부적으로 component1(), component2() 함수를 사용
fun main() {
val a = General("보영", 212)
println(a == General("보영", 221))
println(a.hashCode())
println(a)
val b = Data("루다", 306)
println(b == General("루다", 306))
println(b.hashCode())
println(b)
println(b.copy())
println(b.copy("아린"))
println(b.copy(id = 618))
val list = listOf(Data("보영", 212),
Data("루다", 306),
Data("아린", 618))
for ((a, b) in list) {
println("${a}, {b}")
}
}
class General(val name: String, val id: Int)
data class Data(val name: String, val id: Int)
결과
General 클래스로 만든 a는 equals()나 hashCode, toString() 함수의 결과가 제대로 구현되지 않은 반면 data class로 만든 b는 세 함수 모두 의미있는 기능으로 자동 구현되어 있음을 알 수 있으며 copy() 함수를 통해 원본을 복사한 새 객체 역시 쉽게 만들 수 있음을 알 수 있다
Enum 클래스
- Enum : Enumerated Type으로 열거형을 의미
- enum 클래스 안의 객체들은 관행적으로 상수를 나타낼 때 사용하는 대문자로 기술
- enum의 객체들은 고유한 속성을 가질 수 있다
- 일반 클래스처럼 함수도 가질 수 있다
예시
enum class Color (val number: Int) {
RED(1),
BLUE(2),
GREEN(3);
fun isRed() = this == Color.RED
}
fun main() {
var state = State.SING
println(state)
state = State.SLEEP
println(state.isSleeping())
state = State.EAT
println(state.message)
}
enum class State(val essage: String) {
SING("노래를 부릅니다"),
EAT("밥을 먹습니다"),
SLEEP("잠을 잡니다");
fun isSleeping() = this == State.SLEEP
}
참고자료
Author And Source
이 문제에 관하여(24 Data 클래스와 Enum 클래스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@wlgy33/24-Data-클래스와-Enum-클래스저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)