프로그래밍 언어/JAVA

접근 지정자

· 코딩마이데이

객체 지향 언어에는 접근 지정자를 두고 있습니다.

객체를 켑슐화하기 때문에, 객체에 다른 객체가 접근하는 것으로 허용할지, 말지를 지정할 필요가 있기 때문입니다.

 

패키지

서로 관련 있는 클래스들을 패키지(package)에 저장하여 관리하도록 합니다.

패키지는 디렉터리 혹은 폴더와 같은 개념이며, 개발자는 클래스 파일들을 여러 패키지에 분산 관리하는 것이 일반적입니다.

 

자바의 4가지 접근 지정자

접근 지정자(access specifier)는 클래스나 멤버들을 다른 클래스에서 접근해도 되는지 여부를 선언하는 지시어입니다.

  •  private, proected, public, 접근 지정자 생략(디폴트 접근 지정)

 

클래스 접근 지정

클래스 접근 지정이란 다른 클래스에서 이 클래스를 활용할 수 있는지 허용 여부를 지정하는 것으로 말합니다.

 

public 클래스

클래스 이름 앞에 public으로 선언된 클래스로서, 패키지에 상관없이 다른 어떤 클래스에게도 사용이 허용됩니다.

public class World { // public 클래스
	.........
}

 

디폴트 클래스(접근 지정자 생략)

접근 지정자 없이 클래스를 선언한 경우, 디폴트(default) 접근 지정으로 선언되었다고 합니다.

class Local { // 디폴트 클래스
	.........
}

 

디폴트 클래스같은 패키지 내의 클래스들에게만 사용이 허용됩니다.

클래스를 접근할 수 없으면 당연히 그 클래스 내의 멤버도 접근할 수 없습니다.

public 클래스는 다른 패키지의 접근 사례

 

멤버 접근 지정

이제 클래스 멤버에 대한 접근 지정을 알아봅시다. 멤버에 대한 접근 지정자는 private -> 디폴트 -> protected -> public 순으로 공개의 범위가 넓어집니다.

멤버에 접근하는 클래스 멤버의 접근 지정자
private 디폴트 접근 지정 protected public
같은 패키지의 클래스 X O O O
다른 패키지의 클래스 X X X O
접근 가능 영역 클래스 내 동일 패키지 내  동일 패키지와
자식 클래스
 모든 클래스

 

public 멤버

public 멤버는 패키지를 막론하고 모든 클래스들이 접근 가능합니다.

private 멤버에 대한 접근

private 멤버

private 접근 지정자는 비공개를 지시하는 것으로, prvate 멤버는 클래스 내의 멤버들에게만 접근이 허용됩니다.

private 멤버에 대한 접근

 

protected 맴버

보호된 공개를 지시하는 것으로, 2가지 유형의 클래스에만 접근을 허용합니다.

첫 째, 같은 패키지의 모든 클래스에 접근이 허용됩니다.

둘 째, 다른 패키지에 있더라도 자식 클래스의 경우 접근이 허용됩니다.

protected 멤버에 대한 접근

 

디폴트 맴버(default 또는 package-private)

접근 지정자가 생략된 멤버의 경우, 디폴트(default) 멤버라고 합니다. 동일한 패키지 내에 있는 클래스들만 디폴트 멤버를 자유롭게 접근할 수 있습니다.

디폴트 멤버에 대한 접근

 

멤버의 접근 지정자

class Sample {
    public int a;
    private int b;
    int c; // 디폴트 접근 지정
}

public class AccessEx {
    public static void main(String[] args) {
        Sample sample = new Sample();
        sample.a = 10;
        sample.b = 10;
        sample.c = 10;
    }
}

 

위 소스를 컴파일하면 다음과 같은 오류가 발생합니다.

AccessEx.java:11:15
java: b has private access in Sample

 

Sample 클래스의 필드 b는 private  멤버로서 Sample 클래스 외 다른 어떤 클래스에서도 읽고 쓸 수 없기 때문에 라인 11에서 컴파일 오류가 발생합니다.

 

 

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

final  (0) 2025.02.05
static 멤버  (1) 2025.02.04
객체의 소멸과 가비지 컬렉션  (0) 2025.02.02
메소드 활용  (1) 2025.02.01
객체 배열  (1) 2025.01.31