접근 제한자

Suyong Lee·2021년 9월 9일
0

Android

목록 보기
16/22
post-thumbnail

코틀린에서 정의되는 클래스, 인터페이스, 메서드, 프로퍼티가 가지는 접근제한자에 대해 알아보려 한다.

함수형 언어라는 특성 때문에 코틀린은 기존 객체지향에서 접근 제한자의 기준으로 삼았던 패키지 대신에 모듈 개념이 도입되었다.

모듈이란?
코틀린의 프로젝트 계층구조 중 한 부분을 차지하는 개념이다.
프로젝트가 계층구조에서 최상위에 위치해 있고, 그 아래의 구조를 모듈이라고 한다.
코틀린에서 모듈이란 한 번에 같이 컴파일 되는 모든 파일을 말한다. 안드로이드로 예를 든다면 하나의 앱이 하나의 모듈이 될 수 있다. 라이브러리도 하나의 모듈이다.
참고 : https://smoh.tistory.com/226

internal 이라는 접근 제한자로 모듈 간에 접근을 제한 할 수 있다.(자바에는 없던 접근 제한자)

접근 제한자는 서로 다른 파일에게 자신에 대한 접근 권한을 제공하는 것이다.

각 변수나 클래스 이름 앞에 아무런 예약어를 붙이지 않았을 때는 기본적으로 public 접근 제한자가 적용된다. (자바는 default 가 붙었었다.)

private : 다른 파일에서 접근 불가
internal : 같은 모듈에 있는 파일만 접근 가능
protected : 다른 파일에서 접근 불가하지만 상속 관계에서 자식 클래스는 접근 가능
public : 제한 없음. 모든 파일에서 접근 가능.

open class Parent { // 다양한 접근 제한자를 갖는 부모 클래스 생성
	private val privateVal = 1
  protected open val protectedVal = 2
  internal val internalVal = 3
  val defaultVal = 4 // public이 생략 되어 있다.
}

class Child: Parent() {
	fun callVariables() {
  	// privateVal은 호출이 안 된다. private 접근 제한자가 붙었으니까 부모 클래스에서만 사용 가능.
      Log.d("Modifier", "protected 변수의 값은 ${protectedVal}") // 자식 클래스라서 접근 가능
      Log.d("Modifier", "internal 변수의 값은 ${internalVal}") // 동일한 모듈이라서 접근 가능
      Log.d("Modifier", "기본 제한자 변수 defaultVal의 값은 ${defaultVal}") // public 기본 제한자라서 접근 가능
  }
}

자바와 거의 비슷하지만 다른 부분이 조금씩 있기 때문에 유의해야 겠다.

profile
이수용

0개의 댓글