여러가지 클래스
class 앞에 사용하여 다양한 형태의 클래스를 정의할 수 있다.
- data class
equals(), hashCode(), toString(), copy() 등 을 생성해준다. (자바에서 @Data와 유사한듯)
기본 생성자에 1개 이상의 매개변수가 변수나 상수로 존재해야 한다. (var, val)
![](https://velog.velcdn.com/images/anfrosus/post/aee9301c-40bb-439f-8275-ae8c515d9273/image.png)
- seald class
상속받을 수 있는 자식 클래스들을 미리 정의할 수 있어 무분별한 상속을 방지할 수 있다.
컴파일러가 생성할 수 있는 자식을 알 수 있기 때문에 다음과 같이 사용할 수 있다.
sealed class Vehicle(){
class Bus : Vehicle()
class Car : Vehicle()
class Bicycle : Vehicle()
fun getMaxSpeed(vehicle: Vehicle) : String{
return when(vehicle){
is Bus -> "120"
is Car -> "240"
is Bicycle -> "60"
}
}
}
}
- object class
Java의 static 대신 사용하는 키워드이다.
compnion object class Util() {
}
- enum class
열거형 클래스
- open class
Java에서는 class에 final이 붙지 않으면 모두 상속이 가능하다.
Kotlin에서 class와 method는 기본적으로 final 이다.
따라서 open 키워드를 이용해 상속을 허용한다.
open class -> 상속을 가능하게 함
open method -> 해당 method를 하위 클래스에서 override 할 수 있음
가시 제한자
- public - 명시하지 않으면 기본적으로 public : 어디서나 접근 가능
- internal - 같은 모듈 내부에서만 접근 가능
- protected - private 이지만 상속을 받은 경우 타 모듈에서 접근 가능
- private - 클래스 내부에서만 접근 가능
(프로젝트 > 모듈 > 패키지 > 클래스)
클래스 외에 하나의 코틀린 파일 top-level에 정의가 가능하다.
범위가 파일과 모듈로 변하며 상속에 대한 속성인 protected는 사용 불가능하다.
https://mhwan.tistory.com/74