접근 제한자란 객체가 공개되어야 하는 범위를 정해주는 역할을 한다.
자바에서는 접근 제한자(Access Modifier)라는 용어를 사용하고
코틀린에서는 Visibility Modifier로 사용하는데, 우리말로는 접근 제한자 또는 가시성 제한자라고 할 수 있다.
코틀린에서 접근 제한자를 가질 수 있는 요소로는 class, object, interface, constructor, function, property 등이 있다.
자바에서는 접근 제한자를 붙이지 않으면 default(package-private) 이다.
그러나 코틀린에서는 아무것도 붙이지 않으면 public 이다.
코틀린에서 말하는 모듈은 자바와는 약간의 차이가 있는데, 자바에서의 모듈은 기능이 비슷한 클래스들의 집합체를, 코틀린에서는 동일한 컴파일의 집단을 의미한다.
패키지 레벨의 접근제한자
public val myData: Int = 10
public fun myFun() {}
public class myClass() {}
- private : 해당 .kt 파일 내부에서만 사용 가능하다.
- internal : 프로젝트의 모듈 안에서 누구나 접근이 가능하다.
- protected : 최상위(top-level)에서는 사용할 수 없다.
클래스와 인터페이스의 접근제한자
클래스 또는 인터페이스 안에 선언되는 멤버들에 사용되는 접근 제한자는 다음과 같은 의미를 갖는다.
- public : 누구나 접근이 가능하다.
- private : 클래스 내부에서만 접근이 가능하다.
- protected : 클래스 내부와 상속받는 객체에서 접근이 가능하다.
- internal : 프로젝트의 모듈 안의 누구나 접근이 가능하다.
private, protected, public 과 Java와 코틀린에서 같은 의미로 사용된다. |
생성자의 접근제한자
생성자에도 접근제한자를 붙일 수 있다. 기본은 public 생성자로 누구나 접근이 가능하다.
internal을 붙이면 모듈 내에서만 접근 가능하다.
private을 붙이면 클래스 내에서만 접근이 가능하여 외부에서 생성할 수 없다.
// private 생성자
class Person private constructor(a: Int) {
}
Java 접근 제한자
접근 제한자는 Class 의 멤버에 대해 다른 Class 에서 접근하는 것을 제한하는 용도로 사용된다.
- public : 모든 Class 에서 접근 가능
- protected : 같은 패키지에 있는 Class, 그리고 다른 패키지의 자손 클래스에서 접근이 가능
- default : 같은 패키지에 있는 Class 들만 접근 가능
String name; // 아무런 접근 제한자도 지정되지 않았으므로 default 접근 제한자다.
- private : 같은 Class 내에서만 접근 가능
지시자 |
클래스 내부 |
동일 패키지 |
상속받은 클래스 |
이외의 영역 |
private |
○ |
X |
X |
X |
default |
○ |
○ |
X |
X |
protected |
○ |
○ |
○ |
X |
public |
○ |
○ |
○ |
○ |
'안드로이드 > Kotlin 문법' 카테고리의 다른 글
코틀린 data class (자바의 getter 와 setter 클래스) (0) | 2020.01.16 |
---|---|
코틀린 고차함수와 람다 그리고 확장함수 (0) | 2020.01.14 |
코틀린 패키지 (0) | 2020.01.13 |
코틀린 인터페이스 (0) | 2020.01.13 |
코틀린 추상클래스 (0) | 2020.01.12 |