728x90

접근 제한자란 객체가 공개되어야 하는 범위를 정해주는 역할을 한다.

자바에서는 접근 제한자(Access Modifier)라는 용어를 사용하고
코틀린에서는 Visibility Modifier로 사용하는데, 우리말로는 접근 제한자 또는 가시성 제한자라고 할 수 있다.
코틀린에서 접근 제한자를 가질 수 있는 요소로는 class, object, interface, constructor, function, property 등이 있다.

자바에서는 접근 제한자를 붙이지 않으면 default(package-private) 이다.
그러나 코틀린에서는 아무것도 붙이지 않으면 public 이다.

코틀린에서 말하는 모듈은 자바와는 약간의 차이가 있는데, 자바에서의 모듈은 기능이 비슷한 클래스들의 집합체를, 코틀린에서는 동일한 컴파일의 집단을 의미한다.


패키지 레벨의 접근제한자

프로퍼티와 함수를 최상위(Top) 레벨에 작성한다는 것은 클래스에 멤버로 포함하지 않고 코틀린 파일에 정의하는 것을 의미한다.
package foo

public val myData: Int = 10
public fun myFun() {}
public class myClass() {}

- 접근 제한자를 표기하지 않으면 public이 기본으로 설정되며, 누구나 접근이 가능하다.

- private : 해당 .kt 파일 내부에서만 사용 가능하다.
- internal : 프로젝트의 모듈 안에서 누구나 접근이 가능하다.
- protected : 최상위(top-level)에서는 사용할 수 없다.
 

클래스와 인터페이스의 접근제한자
클래스 또는 인터페이스 안에 선언되는 멤버들에 사용되는 접근 제한자는 다음과 같은 의미를 갖는다.
- public : 누구나 접근이 가능하다.
- private : 클래스 내부에서만 접근이 가능하다.
- protected : 클래스 내부와 상속받는 객체에서 접근이 가능하다.
- internal : 프로젝트의 모듈 안의 누구나 접근이 가능하다.


private, protected, public 과 Java와 코틀린에서 같은 의미로 사용된다.
하지만 internal은
자바에서는 default(같은 패키지내에서만 접근가능)
코틀린에서는 같은 모듈안에서만 사용 가능하다. 


생성자의 접근제한자
생성자에도 접근제한자를 붙일 수 있다. 기본은 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




블로그 이미지

Link2Me

,