[Java 개발] 제14회 접근 제어자(access modifier)

Java입문강좌

시작하며

여러분 안녕하세요!

DreamHanks의 254cm입니다.

이번에는 접근 제어자에 대해 설명하겠습니다.

Java의 전체 기사는 여기를 클릭해 주세요.

이전 기사는 【Java개발】제13회 변수의 범위에 대해서 배워봤습니다.

접근 제어자

Java는 접근제어자라는 것을 사용해 클래스 및 클래스 구성요소가 사용되는 범위를 제한할 수

있습니다.

접근제어자는 4가지 종류가 존재하며 다양한 접근이 가능한 범위가 다릅니다.

접근제어자는 클래스, 필드, 메서드에 부여할 수 있습니다.

※메서드 안에서 생성된 로컬 변수는 메서드가 종료되면 없어지기 때문에 접근제어자가 들어가지 않습니다.

public

public은 클래스, 메서드, 필드에 부여되는 접근제어자입니다.

public이 부여되면 대상은 같은 패키지의 클래스와 아이 클래스,

다른 패키지의 클래스와 아이 클래스의 접근을 허가합니다.

샘플
・대상 클래스

・같은 패키지의 클래스에서 접속한 경우

・같은 패키지의 아이 클래스에서 접속한 경우

・다른 패키지의 클래스에서 접속한 경우

・다른 패키지의 아이 클래스에서 접속한 경우

위의 샘플에서 확인할 수 있듯이, public을 부여받은 필드와 메서드는
같은 패키지의 클래스와 아이 클래스, 다른 패키지의 클래스와 아이 클래스의 접근을 허가합니다.

protected

protected는 필드와 메서드에 부여할 수 있습니다.

샘플
・대상 클래스

・같은 패키지의 클래스에서 접속한 경우

・같은 패키지의 아이 클래스에서 접속한 경우

・다른 패키지의 클래스에서 접속한 경우

・다른 패키지의 아이 클래스에서 접속한 경우

위의 샘플에서 확인할 수 있듯이, 동일한 패키지의 클래스와 아이 클래스,
다른 패키지의 아이 클래스에서 접속할 수 있습니다.

default

default는 접근통제자를 부여하지 않은 상태를 의미합니다.

default가 될 수 있는 요소는 클래스, 필드, 메서드 입니다.

default는 같은 패키지의 클래스와 아이 클래스밖에 접속할 수 없으므로, package private 라고도 부르는데요.

샘플
・대상 클래스

・같은 패키지의 클래스에서 접속한 경우

・같은 패키지의 아이 클래스에서 접속한 경우

・다른 패키지의 클래스에서 접속한 경우

・다른 패키지의 아이 클래스에서 접속한 경우

상기의 샘플로 확인할 수 있듯이, 같은 패키지로의 액세스 밖에 할 수 없습니다.

private

private는 어디에서 접근해도 접근할 수 없습니다.

private가 부여된 필드는 해당 필드를 다루는 public 메서드를 사용하여 값을 조작합니다.

메서드의 경우는 클래스 내부에서 사용되는 메서드에 부여합니다.

・대상 클래스

・같은 패키지의 클래스에서 접속한 경우

・같은 패키지의 아이 클래스에서 접속한 경우

・다른 패키지의 클래스에서 접속한 경우

・다른 패키지의 아이 클래스에서 접속한 경우

상기의 샘플에서 확인할 수 있듯이, 모든 액세스를 할 수 없게 되었습니다.

보통 private 필드는 전용 public 메서드를 사용하여 조작합니다.

위의 getValue와 setValue 메서드를 이용하여 private 필드 value를 조작합니다.

실행 결과
10

클래스에 부여된 접근 제어자

클래스에는 public과 default를 부여할 수 있습니다.

public이 부여된 클래스는 어디서나 인스턴스를 생성하여 사용할 수 있으며,

생성된 파일명과 클래스명이 일치하는 클래스만 생성할 수 있습니다.

default 클래스는 다른 패키지의 클래스로 import 할 수 없습니다.

샘플

위의 샘플에서 확인할 수 있듯이 public 클래스는 파일명과 이름이 일치한다.
클래스밖에 작성할 수 없어요.

같은 패키지의 클래스에는 public클래스와 default클래스를 생성할 수 있습니다.

다른 패키지의 클래스에는 default 클래스가 import가 불가능하기 때문에 생성하실 수도 없습니다.

끝으로

이번 기사는 이상입니다.

다음은 Java의 오버로드를 배워 봅시다.

방문해 주셔서 감사합니다.

コメント