[코틀린 기초] Data Class, Enum Class
lesson 25 Data Class와 Enum Class
Data Class
데이터를 다루는 데에 최적화된 class로 '5가지 기능'을 내부적으로 자동으로 생성해준다.
1. equals()
=> 내용의 동일성 체크 메소드
2. hashcode()
=> 클래스의 내용에서 고유한 코드를 생성하는 메소드
3. toString()
=> 포함된 속성을 보기 쉽게 나타내는 메소드
4. copy()
=> 객체를 복사하여 새 객체를 만들어 주는 메소드
다른 패러미터로 교체하여 복사할 수도 있다.
ex)
val a = Data("A", 7)
val b = a.copy("B")
5. componentX()
=> 속성에 순서대로 접근할 수 있는 함수
ex)
Data("A", 7)
Component1()은 값 A
Component2()는 값 7
hashCode(), equals(), toString(), copy() 메소드 예제
fun main() {
val a = General("석우", 97)
println(a == General("석우", 97))
println(a.hashCode())
println(a)
println()
val b = Data("석우", 97)
println(b == Data("석우", 97))
println(b.hashCode())
println(b)
println()
println(b.copy())
println(b.copy("아린"))
println(b.copy(id = 101))
}
class General(val name: String, val id : Int)
data class Data(val name :String, val id: Int)
실행결과
a는 일반 class로 만들어진 객체, b는 data class로 만들어진 객체이다.
a와 b의 결과를 비교하여 data class의 편리성을 확인해 보자.
componentX() 예제
fun main() {
val list = listOf(Data("보영", 123),
Data("루다",456),
Data("아린",789)
)
for((a,b) in list){
println("${a} ${b}")
}
println()
for (i in list){
println("${i.component1()} ${i.component2()}")
}
println()
for (i in list){
println(i)
}
}
class General(val name: String, val id : Int)
data class Data(val name :String, val id: Int)
실행결과
for((a,b) in list)로 해서 a,b로 접근하는 것과
for(i in list)로해서 i.component1(), i.component2()로 접근하는 것이 같다. 즉 for에서 소괄호에 쓰인 a,b도 componentX()을 기능을 사용한 것이다.
componentX() 메소드를 이용하여 속성에 더 쉽게 접근할 수 있음을 알자.
Enum Class
enumerated type = 열거형
class안에 해당 클래스의 인스턴스가 속성으로 존재? 한다고 알아두자. 쓰일 일이 많을 것 같진 않다.
소스예제
fun main(){
var state = State.SING
println(state)
println(state.isSleeping())
println()
// 변경 안됨
state.message = "키야"
println(State.SING)
println(state)
println()
state = State.SLEEP
println(state.isSleeping())
println()
state = State.EAT
println(state.isSleeping())
}
enum class State(var message : String){
SING("노래를 부르자"),
EAT("밥을 먹자"),
SLEEP("잠을 자자");
fun isSleeping() = this == State.SLEEP
}
실행결과
학습 출처
테크과학! DiMo-디모의 Kotlin 강좌 (lesson 25)
(www.youtube.com/playlist?list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN)
구독과 좋아요 !