본문 바로가기

TEKHIT ANDROID SCHOOL

[TEKIT] 지연 초기화와 오버라이딩

출처 : Tekit Android App School / Soft campus 윤재성 강사님

🎉 지연 초기화란 ?

코틀린과 자바의 가장 큰 차이는 코틀린은 개발자가 값을 초기화 하지 않고 사용하는 것을 방지하기 위해 프로퍼티를 정의하면 무조건 값을 지정해 줘야 합니다.  그래서 코드를 수행해 얻은 값을 프로퍼티에 저장해야 하는 경우 프로퍼티에 일단 아무 값이나 넣어두고 이후에 저장해줘야 합니다. 이런 이유로 코틀린에선 지연 초기화를 이용해 프로퍼티를 정의할 때 초기값을 지정하지 않아도 되게 해줍니다.

class TestClass1{
    
    var a1:Int = 100
    
    var a3:Int
    var a4:Int
    
    init{
        a4 = 400
    }
    
    constructor(){
        a3 = 300
    }
]
  • a1 : 초기 값을 지정해주어 아무런 문제가 없습니다.
  • a3, a4 : Property 정의시 값을 지정하지 않았지만 init과 생성자 블럭에서 값을 지정해주면 오류가 발생하지 않습니다.
  • 이는 객체 생성시 init과 constructor는 반드시 동작하기 때문에 Property에 값이 저장되는 것을 보장받을 수 있기 때문입니다.

🔨 lateinit 

lateinit var a5:String
  • lateinit 을 사용해 초기화를 지연했습니다. lateinitvar Property에만 가능하며 Int, Float, Double 과 같은 기본 자료형에는 사용할 수 없습니다.

🔨 lazy

Property에 저장될 값을 특정 연산을 통해 저장할 수 있습니다.

val a8:Int by lazy{
    val temp = 1 + 2 + 3 + 4 + 5
    // 마지막에 작성한 값이나 변수의 값이 property에 저장된다.
    temp
}

🔨 isInitialized

Property가 초기화 되었는지 확인하는 함수 입니다.

fun testMethod1(){
    // lateinit property는 사용전에 반드시 초기화 되었는지를 검사하는 것이 좋다.
    if(::a5.isInitialized){
        println("step1 : $a5")
    }
    // lateinit property에 값을 저장한다
    a5 = "안녕하세요"
    if(::a5.isInitialized){
        println("step2 : $a5")
    }
}

 

 객체 지향 프로그래밍의 4대 특징이 있습니다. 캡슐화, 추상성, 상속성, 다형성. 다형성은 어떤 요소의 형태가 다양할 수 있다는 의미로 메소드를 다양한 형태로 사용할 수 있습니다.  다형성을 가능하게 해주는 것이 바로 오버로딩과 오버 라이딩입니다.

  • 오버로딩 :  부모 메소드의 시그니처(매개변수 타입, 갯수) 등을 다르게 구현
  • 오버 라이딩 :  부모 메소드와 시그니처는 같지만 기능을 다시 구현하며 자식 클래스에서 오버라이딩을 허용하고 싶으면 open 키워드를 사용하고 부모 클래스의 메서드를 사용하고 싶으면 override 키워드를 붙혀줘야 합니다.
open class SuperClass1{
    open fun superMethod2(){
        println("SuperClass1의 superMethod2")
    }
}

class SubClass1 : SuperClass1(){
    override fun superMethod2() {
        println("SubClass1의 superMethod2")
    }
}

 

Git Hub

 

GitHub - chanho0908/tekit_android_app_school

Contribute to chanho0908/tekit_android_app_school development by creating an account on GitHub.

github.com

 

 

 

 

 

 

 

 

'TEKHIT ANDROID SCHOOL' 카테고리의 다른 글

[TEKHIT] Any & This Super  (0) 2024.01.10
[TEKHIT] Abstract & Interface  (0) 2024.01.05
[TEKHIT] 상속과 프로퍼티  (0) 2024.01.05
[TEKHIT] Constructor  (0) 2024.01.05
[TEKHIT] 객체 지향 프로그래밍  (0) 2024.01.02