[코틀린 문법] 데이터 클래스와 열거형 클래스
Data Class(데이터 클래스)
// Data Class(데이터 클래스) //
// 데이터를 다루는 데 최적화된 클래스
// 서버에서 받아온 데이터를 넣을 때 사용
fun main() {
// 데이터 클래스에서 자동으로 구현하는 기능 //
// 1. equals() <- 내용의 동일성 판단
// 2. hashcode() <- 객체의 내용에서 고유한 코드를 생성
// 3. toString() <- 포함된 속성을 보기쉽게 나타냄
// 4. copy() <- 객체를 복사해 똑같은 내용의 새 객체 생성
// 5. componentX() <- 속성을 순서대로 반환
// 사용자가 직접 호출하기 위한 함수가 아님
// -> 배열이나 리스트 등에 데이터 클래스의 객체가 담겨있을 때,
// -> 이 내용을 자동으로 꺼내 쓸 수 있는 기능을 지원하기 위한 함수임
val a = General("신비", 1)
println(a == General("신비", 1))
println(a.hashCode())
println(a)
// false
// 885951223
// General@34ce8af7
val b = Data("은하", 2)
println(b == Data("은하", 2))
println(b.hashCode())
println(b)
// true
// 50711786
// Data(name=은하, id=2)
println(b.copy())
println(b.copy("엄지"))
println(b.copy(id = 3))
// Data(name=은하, id=2)
// Data(name=엄지, id=2)
// Data(name=은하, id=3)
}
class General(val name: String, val id: Int)
data class Data(val name: String, val id: Int)
fun main() {
val list = listOf(Data("보나",8),
Data("설아",12),
Data("루다", 2))
for((a, b) in list) {
println("${a}, ${b}")
}
val justDog = JustDog("파트라슈", 11)
println(justDog.name)
println(justDog.age)
println(justDog.toString())
val dataDog = DataDog("파트라슈 친구", 15)
println(dataDog.name)
println(dataDog.age)
println(dataDog.toString())
// 복붙해서 일부만 변경 가능
val dataDog2 = dataDog.copy(name = "파트라슈 여친")
println(dataDog2.toString())
}
class General(val name: String, val id: Int)
data class Data(val name: String, val id: Int)
// 일반 클래스
class JustDog(var name : String, var age : Int)
// 데이터 클래스
data class DataDog(var name : String, var age : Int)
// 데이터 클래스 보충설명
fun main() {
// 데이터 클래스
val ticketA = Ticket("korean", "shinyelee", "2022-05-24", 11)
// 객체의 내용을 출력
println(ticketA)
// Ticket(company=korean, name=shinyelee, date=2022-05-24, seatNum=11)
// 일반 클래스
val ticketB = Ticket2("korean", "shinyelee", "2022-05-24", 11)
// 메모리 주소값을 출력
println(ticketB)
// Ticket2@b684286
}
// 데이터 클래스
data class Ticket(val company : String, val name : String, var date : String, var seatNum : Int)
// 일반 클래스
class Ticket2(val company : String, val name : String, var date : String, var seatNum : Int)
// toString(), hashCode(), equals(), copy()
Enum Class(열거형 클래스)
// Enum(enumerated type) Class(열거형 클래스) //
// 클래스 내 객체는 관행적으로 대문자로 기술
// 클래스 내 객체는 고유한 속성 가짐(생성자 있으면 객체 선언시 속성 설정 가능)
// 클래스 내 함수 기술시 마지막 객체 뒤에 세미콜론(;) 붙인 후 추가
fun main() {
var state = State.SING
println(state)
// SING
state = State.SLEEP
println(state.isSleeping())
// true
state = State.EAT
println(state.message)
// 밥을 먹습니다
println(Direction.NORTH)
// NORTH
Direction.values().forEach {
println(it)
}
// NORTH
// SOUTH
// WEST
// EAST
CustomerType.values().forEach {
println(it)
}
// A
// B
// C
// D
// VIP
val direction = Direction.EAST
// E
when(direction) {
Direction.NORTH -> {
println("N")
}
Direction.SOUTH -> {
println("S")
}
Direction.WEST -> {
println("W")
}
Direction.EAST -> {
println("E")
}
}
val color = Color.GREEN
// 초록
when(color) {
Color.RED -> {
println(Color.RED.colorName)
}
Color.GREEN -> {
println(Color.GREEN.colorName)
}
Color.BLUE -> {
println(Color.BLUE.colorName)
}
}
println(Device.DEVICE_ON.status)
// ON
Device.DEVICE_ON.status = "OFF"
println(Device.DEVICE_ON.status)
// OFF
}
enum class State(val message: String) {
SING("노래를 부릅니다"),
EAT("밥을 먹습니다"),
SLEEP("잠을 잡니다");
fun isSleeping() = this == State.SLEEP
}
enum class Device(var status : String) {
DEVICE_ON("ON"),
NETWORK("OFF"),
LOCATION("SEOUL")
}
enum class Color(val colorName : String) {
RED("빨강"),
GREEN("초록"),
BLUE("파랑")
}
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
enum class CustomerType {
A, B, C, D, VIP
}
참고
반응형
'개발(Android) > kotlin syntax' 카테고리의 다른 글
[Kotlin syntax] Collection Functions (1) (0) | 2022.04.09 |
---|---|
[Kotlin syntax] Collections (2) Set, Map (0) | 2022.04.09 |
[Kotlin syntax] Nested Class, Inner Class (0) | 2022.04.08 |
[Kotlin syntax] Arguments, Infix Functions (0) | 2022.04.08 |
[Kotlin syntax] Equality (0) | 2022.04.08 |