클래스 멤버 가시성

고성욱·2023년 3월 18일
0

안드로이드

목록 보기
11/26

멤버 가시성

  • 가시성은 클래스 멤버마다 다르게 지정할 수 있습니다. 어떤 영역에서 쓰일 수 있는지 경절 할수 있고, 가기성을 사용해 구현과 관련한 세부 사항을 캡슐화함으로써 외부 코드로부터 구현 세부 사항을 격리시킬 수 있으므로, 가시성 지정은 클래스 정의 시 아주 중요한 부분입니다.

  • 코틀린에서는 클래스 멤버의 가시성을 다음과 같이 변경자 키워드로 지정 할 수 있습니다.

    	- public(공개): 멤버를 어디서나 볼수 있습니다. 디폴트 가시성 명시적으로 사용안해도 됩니다.
    
    	- interbak(모듈 내부): 멤버를 멤버가 속한 클래스가 포함된 컴파일 모듈 내부에서만 볼수 있습니다.
    
    	- protected(보호): 멤버를 멤버가 속한 클래스와 멤버가 속한 클래스의 모든 하위 클래스 안에서 볼수 있습니다.
    
    	- private(비공개): 멤버를 멤버가 속한 클래스 내부에서만 볼수 있습니다.

자바와 코틀린의 차이점

  • 자바의 기본 가시성은 패키지 전용으로 어떤 멤버를 이 멤버가 속한 클래스있는 패키지 내부 어디서나 볼수 있습니다.
  • 자바에서는 공개로 정의 하고 싶으면 명시적으로 public 변경자를 붙여야 합니다.
  • 코틀린은 자바에 있는 패키지 전용에 해당하는 가시성이 없다는 점을 유의해야 합니다.

멤버 가시성 예시

class Example {
    public val publicVal = 1
    internal val internalVal = 2
    protected val protectedVal = 3
    private val privateVal = 4
    private val privateToThisVal = 5

    class SubClass : Example() {
        // protected 멤버에 접근 가능
        fun getProtectedVal() = protectedVal
    }

    fun printValues() {
        println(publicVal) // 어디서든 접근 가능
        println(internalVal) // 같은 모듈 내에서만 접근 가능
        println(protectedVal) // 같은 패키지 내에서는 어디서든 접근 가능
                              // 다른 패키지에서는 상속한 서브 클래스에서만 접근 가능
        println(privateVal) // 같은 클래스 내에서만 접근 가능
        println(privateToThisVal) // 해당 인스턴스 내에서만 접근 가능
    }
}

위 코드는 코틀린 클래스 내에 다섯 가지 가시성 등급을 지정한 예시입니다. public, internal, protected, private, private to this 등급의 멤버 변수를 선언하고, 각각에 대한 가시성 범위를 보여줍니다.

그리고 Example 클래스의 printValues() 함수는 해당 클래스 내에서 선언한 모든 멤버 변수에 접근하여 값을 출력하는 함수입니다.

이처럼 코틀린에서는 가시성 지정자를 사용하여 멤버 변수나 함수 등을 캡슐화할 수 있으며, 이를 통해 코드의 안정성과 가독성을 높일 수 있습니다.

profile
안드로이드, 파이썬 개발자

0개의 댓글