본문 바로가기

프로그래밍 언어/코틀린_쌩초보를 위한 기초

쌩초보를 위한 기초_26_Visibility Modifier_가시성 제한자

캡슐화 Encapsulation

 

캡슐화는 객체지향 프로그래밍의 기본적인 개념 중 하나이다.

이것은 객체의 속성, 기능 등의 표현이나 상태를 숨기는데 사용하는 개념이다.

'정보 숨기기'라고도 한다.

 

가시성 제한자 Visibility Modifier

 

visibility modifier는 한글 이름이 사람마다 제각각으로 부른다.

가시성 지시자, 가시성 제한자, 접근 제한자 등 등.

영어 그대로 하면 '보기 제한자'도 좋을 듯 하다.

 

visibility modifier는 다시말해 접근 권한을 제한하는 키워드라고 생각할 수 있다. 

만약 선언하지 않으면 접근 제한이 없는 public이 기본값이다.

다른 패키지에서 최상위 선언을 보려면 import를 사용해야 한다.

 

접근을 제한하는 visibility modifier의 종류는 다음과 같은 것들이 있다.

접근 제한이 강한 순서대로 나열하면 다음과 같다.

 

  • private : '개인 전용'의 뜻이다. 지정하면 그 요소(패키지, 클래스) 내부에서만 접근할 수 있다.
  • protected : '보호된'의 뜻이다. 지정하면 그 클래스 내부와 서브클래스(상속받는 객체)에서 접근이 가능하다.
  • internal : '내부의'라는 뜻이다. 프로젝트의 모듈(module) 안에서만 접근이 가능하다. 모듈은 클래스를 포함한다.
  • public : '공공의'라는 뜻이다. 접근 제한이 없다. 붙이지 않아도 기본적으로 public이다.

참고로 모듈(module)은 함께 컴파일(compile) 되는 패키지 또는 파일의 묶음이다.

 

Packages(패키지)의 접근 제한

파일 이름이 example.kt 이고 package foo를 선언했다고 하자.

참고로 foo는 'for once only' (딱 한번만 사용)의 뜻으로 코딩에서 임시로 사용할 이름으로 자주 쓴다.

그 외에도 bar, baz 등이 있다. 우리가 견본 이름난에 '홍길동'을 쓰는 것과 같다.

 

fun foo() 와 set 함수는 example.kt 내부에서만 볼 수 있다.

car 변수는 같은 모듈안에서만 볼 수 있다.

 

Class와 Interface(인터페이스)의 접근 제한

 

클래스 안에 클래스 멤버들이 선언되었을 때 

private는 이 클래스 안에서만 볼 수 있다는 뜻이다.

protected는 클래스 내부와 상속받은 객체에서 볼 수 있다.

internal는 같은 모듈안에서 볼 수 있다.

 

 

어떤 보기 제한이 걸려 있는지 하나씩 살펴보면 이해가 될 것이다.

예를 들면 마지막에 있는 Somebody 클래스는 매개변수p로 Parent클래스를 참조하고 있지만 볼 수 있는 것과 못 보는게 있다.

 

그 외 키워드에서의 보기 제한은 다음과 같다.

 

constructor(생성자)는 기본적으로 public이다.

보기 제한을 붙이려면 private constructor~로 표현한다.

 

Local(지역)로 선언된 변수, 함수, 클래스는 보기제한자를 붙일 수 없다. 

 

끝.