상속
- kotlin은 class를 정의하면 자동으로 final 클래스가 된다.
- 자바와 동일하게 클래스의 객체를 생성하면 부모 클래스의 기본 생성자가 자동으로 호출된다.
- 만약 부모 클래스에 기본생성자가 없다면 자식 클래스에서 명시적으로 호출해줘야 한다.
open
- 클래스를 정의할 때 open 키워드를 붙여주면 일반 클래스로 정의되고 상속이 가능해진다.
모듈
kt 파일들을 모아 관리하는 개념이 패키지라면 모듈을 패키지를 모아 관리하는 개념이다.
패키지가 많아지면 관리하기가 어려워질 수 있는데 이 때 모듈로 묶어서 사용한다.
지연초기화(lateinit)
Kotlin은 변수를 정의할 때 반드시 값을 넣어줘야 한다.
lateinit
- var 변수에만 사용이 가능하며 변수를 정의할 때 값을 저장하지 않아도 된다.
- lateinit은 기본 자료형(Int, Double 등)에서는 사용할 수 없다.
lateinit var a4:String
- lateinit 변수는 사용 전에 반드시 값을 저장한 적이 있는지를 확인해야 한다.
if(::a4.isInitialized) {
println("a4 : $a4")
}
lazy
- val 프로퍼티에서 사용하는 키워드 이다.
- val 프로퍼티에 저장할 값을 어떠한 처리를 통해서 구해야 한다면 lazy를 사용한다.
- lazy 코드 블록의 제일 마지막에 작성한 값이나 변수의 값, 수식의 값을 프로퍼티에 저장한다.
val a5:Int by lazy{
val temp = 1 + 2 + 3 + 4 + 5
temp
}
만약 init 블럭에서 프로퍼티에 값을 저장한다면 프로퍼티를 정의할 때 값을 저장하지 않아도 된다.
Overriding
Kotlin에서 메서드는 final 메서드로 정의된다.
- 이에 overriding이 가능하게 하기 위해서 open 키워드를 사용한다.
- open 키워드를 사용하면 메서드는 final 메서드가 아닌 메서드로 변환된다.
- Overriding하는 메서드는 overrdide라는 키워드를 붙혀주도록 강제하고 있다.
- 이는, 이 메서드는 Overriding한 메서드라는 것을 명시하기 위함이다.
override fun superMethod2(){
super.superMethod2()
println("SubClass2의 superMethod2 입니다")
}