코틀린

[Youtube DiMo] 12-13강. Scope, 접근제어자

iseohyun 2022. 4. 29.

목차

    [12강] https://youtu.be/q7GV68jKLVM

    [13강] https://youtu.be/ewrozSyi8kE

     

    1. 참조하기

    물리적 분류 :
    project > module > file

    논리적 분류 : 
    package

    문법 :
    패키지 정의할 때 : (파일 첫줄에)
    package 패키지명
    불러올 때 :
    import 패키지명

     

    2. scope

    변수, 함수의 생애
    규칙1. 변수, 함수가 존재한다면 참조할 수 있다.
    규칙2. 선언과 함께 탄생, 중괄호 닫힘("}")과 함께 소멸한다.
    (그러므로 패키지 스코프는 소멸 할 수 없다.)
    var a = 10 // 패키지 스코프
    
    fun main() {
        val x = X() 
        
        // 패키지 스코프 a 출력
        println(a)
        
        x.p()
        
        // 패키지 스코프 a 출력
        println(a)
    }
    
    class X() {
        fun p() {
            // 패키지 스코프 a '증가' 및 출력
            println(++a)
        }
    }
    10
    11
    11

     

    변수 생성 소멸 예시 2:

    val a = 10 // 패키지 스코프
    
    fun main() {
        println(a) // 패키지
        
    	val a = 11
        println(a) // main 로컬
        
        if(true){
            println(a) // main 로컬
            val a = 12
            println(a) // if 로컬
        }
    }
    10
    11
    11
    12

     

     

    3. 접근제어자

    public(+) : 완전 공개 (기본값)
    internal(~) : 패키지에 한하여 공개
    protected(#) : 상속에 한하여 공개
    private(-) : 완전 비공개
    fun main() {
        val x = X() 
        val y = Y()
    
        x.A() // --> A
        //x.B() // --> Cannot access 'B': it is protected in 'X'
        //x.C() // --> Cannot access 'C': it is private in 'X'
        x.D() // --> C
        y.I() // --> B
    }
    
    open class X() {
        public fun A() { println("A") }
        protected fun B() { println("B") }
        private fun C() { println("C") }
        fun D() { C() } // 내부 함수는 private을 호출 할 수 있다.
    }
    
    class Y() : X() {
        fun I() { B() }
    }
    A
    C
    B

    댓글