ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kotlin] this, super
    Kotlin 2022. 9. 14. 15:38

    this 용도

    1. 멤버변수와 매개변수(또는 지역변수)의 이름이 같을때 그들을 구분하기 위해 사용

    2. 기본(대표) 생성자가 있는경우 보조 생성자에서 기본생성자의 매개변수 갯수와 자료형에 맞춰서 반드시 호출해야 하는데, 이때 this 카워드를 사용

    3. 매서드 내부에 다른 매서드(이름하여 지역 매서드:지역변수와 같은 의미)를 만들어 쓸 수 있는데 맴버메서드와 구분하기 위해 사용

    class TestClass41 ( var a2:Int ){
        var a1:Int = 200
        // 보조 생성자는 반드시 대표생성자를 this 키워드를 이용해서 호출해야함
        // 대표생성자의 매개변수가 멤버변수로 생성되어야 하는데 호출되지 않으면 생성 안됨
        constructor() : this(300){}
    
        fun testMethod1(){
            var a1 = 100
            println("현재 메서드의 지역변수 a1 : $a1")
            println("현재 클래스의 멤버변수 a1 : ${this.a1}")
            // $this.a1 이라고 출력하면 문자열로 인식되어 "$this.a1" 라는 글자가 출력될 수 있음
            // 따라서  ${this.a1} 중괄호로 데이터를 먼저 바인딩
    
            fun testMethod2(){
                println("testMethod1 메서드 내부의 testMethod2")
            }
            testMethod2()  // 지역메서드가 우선 실행
            this.testMethod2()  // 멤버메서드를 실행하려면  this 키워드를 사용
            // this는 언제나 현재 클래스의 멤버변수, 멤버메서드 가리킴
        }
        fun testMethod2(){
            println("멤버메서드 testMethod2")
        }
    }
     

     

    super 의 용도

    1. 상속관계의 자식 생성자에서, 부모클래스의 생성자를 호출할 때, 자식클래스의 이름 옆에 부모 클래스의 이름을 사용하지만, 보조 생성자에서는 super 라는 키워드를 사용

    2. 자식클래스에서 오버라이드된 메서드 그리고 변수 를 사용할 때, 인위적으로 부모의 메서드를 호출하거나 변수값을 취할때 사용

    open class SuperClass(var a2:Int){ // 대표생성자
        open var a1 = 100
        constructor(): this(200) // 보조생성자
        open fun superMethod1(){
            println("SuperClass의 superMethod1")
        }
    }
    // 대표 생성자와 보조생성자가 모두 있는 부모클래스는 둘 중 어떤 형태로도 
    // 상속(부모클래스 생성자호출)이 가능함
    class SubClass : SuperClass(100){
        override fun superMethod1() {
            super.superMethod1() // 부모클래스의 메서드
            println("super.a1 : ${super.a1}") // 부모클래스의 멤버변수
            println("SubClass의 superMethod1")
        }
    }
    class SubClass_1 : SuperClass{
        // constructor 키워드로 생성된 '보조생성자' 이름 옆에 super 키워드를 이용하여
        // 부모 클래스의 대표 생성자 호출 가능
        // 그 중 Extends로 연결되는 부모클래스 이름 옆의 괄호는 지워줌
        // class SubClass_1: SuperClass() -> class SubClass_1: SuperClass
        constructor(a1:Int) : super(a1){ }
    }
     

    'Kotlin' 카테고리의 다른 글

    [Kotlin] Interface  (0) 2022.09.14
    [Kotlin] Abstract  (0) 2022.09.14
    [Kotlin] Any Class  (0) 2022.09.14
    [Kotlin] Override  (0) 2022.09.14
    [Kotlin] Extends  (0) 2022.09.14

    댓글

Designed by Tistory.