상속, 모듈, 지연초기화(lateinit), Overriding

유민국·2023년 5월 29일
0

상속

  • 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 입니다")
}
profile
안녕하세요 😊

0개의 댓글