[코틀린기초] 25. 가시성 지시자

캡슐화

클래스를 작성할 때 외부에서 숨겨야 하는 속성이나 기능

가시성 지시자를 통해 외부 접근 범위를 결정할 수 있음

클래스의 주생성자에 가시성 지시자를 쓰려면 constructor 키워드를 생략할 수 없음!

  private class PrivateTest{
    private var i = 1
    private fun privateFunc(){  //  Private
      i+=1
      println(i)
    }
    
    fun access(){ //  Public
      privateFunc()
    }
  } 
  
  class OtherClass{
    // val pc = PrivateTest()  // 접근 불가.
    private val pc = PrivateTest() // 이건 가능하다
    
    fun test(){
      val pc = PrivateTest()  //  생성 가능
      pc.i  // 접근 불가
      pc.access() //  접근 가능
    }
  }
  
  fun main(){
    val pc = PrivateTest()  // 탑레벨 함수에서는 private 없이도 접근 가능
    //pc.i = 3  //  접근 불가
    //pc.privateFunc() // 접근 불가
    
    pc.access()    
  }

internal은 같은 모듈이면 접근이 가능하다. (파일이 다르더라도)

그러나 패키지 명이 달라지면 패키지를 import하여 사용 가능하다.

  //한 파일 내에서는 internal은 public이랑 거의 같다
  
  internal class InternalClass{
    internal var i = 1
    internal fun icFunc(){
      i+=1  //접근 가능
    }
    fun access(){
      icFunc()  // 접근 가능
    }
  }
  
  class Other{
    internal val ic = InternalClass() //internal 키워드를 없애면 public이 되어 에러발생!
    fun test(){
      ic.i
      ic.icFunc()
    }
  }
  
  fun main(){
    val mic = InternalClass()
    mic.i
    mic.icFunc()
  }