
프로그램의 각 요소별 설계도 역할
코틀린에서는 class 키워드를 활용해서 클래스를 만든다.
클래스에는 정보(프로퍼티)와 행위(메서드)를 작성.
보통 하나의 파일은 한개의 클래스를 의미하지만, 하나의 파일안에 여러개의 클래스가 존재할 수도 있다.
클래스 구조
class 클래스이름 {
정보1
정보2
행위1
행위2
}
data class 클래스이름 {
정보1
정보2
}클래스 상속과 관련된 개념
상속받을 수 있는 자식 클래스를 미리 정의
무분별한 상속 방지
컴파일 시점에서 생설할 수 있는 자식을 알 수 있기 때문에 효율적으로 다형성 구현
실드 클래스 기본 구조
sealed class 부모클래스 {
class 자식클래스1 : 부모클래스생성자
class 자식클래스2 : 부모클래스생성자
}
여러 곳에 동일한 상수를 정의하거나, 상수 외부에 관련된 변수나 함수를 정의하면 코드가 늘어날수록 관리가 어렵다.
enum class를 사용하면 상수값에 대한 관리 지점을 줄일 수 있다.
Comparable 인터페이스를 구현하는 추상 클래스
enum class 클래스1 {
C, JAVA, KOTLIN
}
enum class 클래스2(val code: Int) {
C(10),
JAVA(20),
KOTLIN(30)
}
fun main() {
println(클래스1.C.toString()) // 출력: C
println(클래스2.KOTLIN.code) // 출력: 30
println(클래스2.KOTLIN.name) // 출력: KOTLIN
}
class 앞에 붙을 경우에만 특별한 의미를 가진다.
fun main() {
var enum = 10
val myColor = Color.RED
}
enum class Color{
RED, BLUE, YELLOW
}
enum 클래스는 단순히 값만 열거하는 존재가 아니다.
enum 클래스에서도 일반적인 클래스와 마찬가지로 프로퍼티와 메소드를 지정할 수 있다.
fun main() {
println(Color.ORANGE)
println(Color.RED.rgb())
}
enum class Color(val r: Int, val g:Int, val b:Int){ //상수 프로퍼티를 정의한다.
//상수를 생성할 때, 그에 대한 프로퍼티 값 지정
RED(255,0,0), ORANGE(255,165,0); //세미콜론(;)을 반드시 붙인다.
fun rgb() = (r*256+g)*256+b //메소드 정의
}
https://kotlinlang.org/docs/classes.html#companion-objects
https://kotlinlang.org/docs/classes.html