1. Data class(데이터 클래스)
- 매개체의 데이터를 관리하는 용도로 사용
- abstract, open, sealed, inner 클래스로 정의할 수 없음
- 반드시 주 생성자를 가지고 있어야 함
1-1. 자동으로 구현되는 5가지 기능
- equals() : 내용의 동일성을 판단하여 true 또는 false 리턴
- hashcode() : 객체의 구분하기 위한 고유한 코드를 생성
- toString() : 현재 객체의 모든 프로퍼티를 문자로 리턴
- copy() : 객체를 복사하여 똑같은 내용의 새 객체 생성
- componentX() : 속성을 순서대로 반환 (객체 분해)
fun main(){ val a = General("란",159) println(a == General("란",159)) println(a.hashCode()) println(a) //toString()의 결과값을 보기 위해 a를 그대로 출력 } class General(val name:String, val id:Int) |
fun main(){ val b = Data("라니",951) println(b == Data("라니",951)) println(b.hashCode()) println(b) println(b.copy()) println(b.copy("아이른")) println(b.copy(id=555)) } data class Data(val name:String, val id:Int) |
<print> false 885284298 General@34c45dca //일반 클래스로 만든 a는 equals(), hashCode(), toString()함수의 결과가 제대로 구현되지 않음 |
<print> true 46559851 Data(name=라니, id=951) Data(name=라니, id=951) Data(name=아이른, id=951) Data(name=라니, id=555) |
- componentX()계열의 동작 확인 (X : 1,2,3 .. 숫자)
fun main(){
//Data class의 객체들이 담긴 list 작성
val list = listOf(Data("란",111), Data("라니",222), Data("아이른",333))
//리스트에 담긴 Data객체의 내용을 for문에서 모두 순회
//두 개의 속성을 받을 수 있는 이름을 지정 : (a,b)
for((a,b) in list){
println("${a},${b}")
}
//내부적으로는 component1():a , component2():b 라는 함수를 사용하여 순서대로 값을 불러오게 됨
}
data class Data(val name:String, val id:Int)
<print>
란,111
라니,222
아이른,333
//===========비교===========
data class Test(
val id: Int = 0,
val name: String = "hello"
)
fun main() {
val list = listOf(
Test(1, "a"),
Test(id = 2, name = "b")
)
for((id, name) in list){
println("$id $name")
}
/*
for(i in 0 until list.size){
println("${list[i].id} ${list[i].name}")
}
*/
}
<print>
1 a
2 b
2. 열거 클래스(Enum class)
- enumerated type, 열거형의 준말로 enum class 내에 상태를 구분하기 위한 객체들에 이름을 붙여 여러개 생성해두고
그 중 하나의 상태를 선택하여 나타내기 위한 클래스
enum class Color{
RED,
BLUE,
GREEN
}
//특이한 형태이지만 모두 enum class인 Color의 객체를 생성하기 위한 선언
- enum class 객체들은 관행적으로 상수를 나타낼 때 사용하는 대문자로 기술하고, 고유한 속성을 가질 수 있음
enum class Color(val number:Int){
RED(1),
BLUE(2),
GREEN(3)
}
- 생성자를 만들어 속성을 받도록하면 객체를 선언할 때 속성도 설정할 수 있고, 일반 클래스처럼 함수도 추가 가능
enum class Color(val number:Int){
RED(1),
BLUE(2),
GREEN(3):
fun isRed()=this == Colot.RED
}
//이때는 객체의 선언이 끝나는 위치에 :을 추가한 후 함수를 기술하면 된다
- enum class 동작 확인
fun main() {
println(클래스1.C.toString()) // 출력: C
println(클래스2.KOTLIN.code) // 출력: 30
println(클래스2.KOTLIN.name) // 출력: KOTLIN
}
enum class 클래스1 {
C, JAVA, KOTLIN
}
enum class 클래스2(val code: Int) {
C(10),
JAVA(20),
KOTLIN(30)
}
fun main(){
//초기값 설정
var state = State.SING
println(state)
//선언시에 만든 객체를 이름으로 참조하여 그대로 사용
//state 값을 State.SLEEP으로 바꿈
state = State.SLEEP
println(state.isSleeping())
state = State.EAT
println(state.message)
}
enum class State(val message:String){
SING("노래를 부릅니다"),
EAT("밥을 먹습니다"),
SLEEP("잠을 잡니다");
fun isSleeping() = this == State.SLEEP
//잠을 자는지 여부를 boolean값으로 반환하는 함수
//비교할 객체는 State 자기 자신이므로 this
}
<print>
SING//enum변수를 그대로 출력할 때는 toString()을 통해 상태 객체의 이름이 출력
true//같은 객체끼리 비료했기 때문에 true가 반환
밥을 먹습니다//EAT객체의 message 속성이 담긴 밥을 먹습니다가 출력
'연습장 > 이론' 카테고리의 다른 글
Kotlin_ 4-3. 확장 함수 (1) | 2024.04.02 |
---|---|
클래스 1-2. 컬렉션 클래스(Collection class) (0) | 2024.03.11 |
클래스 6. object, 다향성(Polymorphysm) (0) | 2024.02.23 |
Kotlin_ 4-2-1. 스코프 함수 (1) | 2024.02.22 |
Kotlin_ 4-3. 고차함수, 람다식 (0) | 2024.02.20 |