면접 질문 목록으로 가기
면접 질문실전 질문꼬리 질문

코틀린의 가시성 수정자(Visibility Modifiers)

skydovesJaewoong Eum (skydoves)||6분 소요

코틀린의 가시성 수정자(Visibility Modifiers)

코틀린은 클래스, 인터페이스, 함수, 프로퍼티의 접근 범위를 제어하는 네 가지 가시성 수정자(visibility modifier)를 제공합니다. public, private, protected, internal 이 네 가지 수정자는 코드 접근에 대한 명확한 경계를 정의하여 캡슐화(encapsulation)와 모듈화 설계를 가능하게 합니다. Java에서는 수정자를 명시하지 않으면 package-private가 기본 가시성이지만, 코틀린에서는 아무 수정자도 지정하지 않으면 public이 기본값이라는 점이 중요한 차이입니다. 면접에서도 이 차이를 정확히 짚어서 설명할 수 있으면 좋은 인상을 줄 수 있습니다. 이번 면접 질문을 통하여 아래 내용들을 학습하실 수 있습니다.

  • 최상위(top-level) 선언과 멤버 선언 각각에서 가시성 수정자가 어떤 범위를 가지는지 설명할 수 있습니다.
  • internal 가시성이 Gradle 모듈의 개념과 어떻게 대응되는지 이해할 수 있습니다.
  • protected가 Java의 protected와 어떻게 다른지 비교하여 설명할 수 있습니다.
  • 라이브러리와 애플리케이션 코드에서 캡슐화를 강화하기 위해 가시성 수정자를 적절하게 적용할 수 있습니다.

Public

public 수정자는 선언을 어디에서든 접근할 수 있게 합니다. 코틀린의 기본 가시성이므로, 별도의 수정자를 명시하지 않은 선언은 모두 public으로 취급됩니다.

class UserRepository {
    fun getUsers(): List<User> = listOf()
}

UserRepositorygetUsers() 모두 public입니다. 어떤 모듈의 어떤 코드에서든 자유롭게 접근할 수 있습니다.

Private

private 수정자는 선언 위치에 따라 접근 범위가 달라집니다. 최상위 선언(클래스 바깥에 선언된 함수, 프로퍼티, 클래스)에 private을 붙이면 해당 파일 내에서만 접근할 수 있습니다. 클래스 내부의 멤버 선언에 private을 붙이면 해당 클래스 내부에서만 접근이 가능합니다.

private val apiKey = "secret"  // 이 파일 안에서만 접근 가능

class Account {
    private var balance = 0  // Account 클래스 내부에서만 접근 가능

    fun deposit(amount: Int) {
        balance += amount
    }
}

apiKey 프로퍼티는 다른 파일에서 접근할 수 없습니다. balance 프로퍼티는 Account 외부에서 접근할 수 없으며, 서브클래스에서도 마찬가지입니다. Java에서는 private이 클래스 수준에서 동작하지만, 코틀린에서는 최상위 선언에 대해 파일 수준의 가시성을 제공한다는 점이 중요한 차이입니다.

Protected

protected 수정자는 클래스 멤버에만 적용됩니다. 선언된 클래스와 해당 클래스를 상속받은 서브클래스에서만 접근할 수 있습니다. Java와 달리, 코틀린의 protected는 같은 패키지에 있더라도 패키지 수준의 접근을 허용하지 않으므로 더 엄격합니다.

이 면접 질문은 구독자 전용입니다

Dove Letter를 구독하시면 안드로이드, 코틀린 개발 관련 독점 면접 질문의 전체 내용을 볼 수 있습니다.

구독하기
면접 질문 목록으로 가기