Java 접근 제어자 - 클래스
클래스 레벨에서의 접근 제어자
public class Main { ... }
Main 클래스 앞의 접근 제어자가 있다는 것을 확인할 수 있다.
클래스 접근 제어자는 변수와 메소드와 다르다.
클래스 접근 제어자 규칙
- 클래스 레벨의 접근 제어자는
public
,default
두 개만 사용한다.- private, protected 사용 불가
- public 클래스는 반드시 파일 명과 일치해야 한다.
- 하나의 자바 파일은 public 하나의 클래스만 선언할 수 있다.
- 하나의 자바 파일은 default 접근 제어자를 선언한 클래스는 여러 개 생성할 수 있다.
access
└foo
└Public.java (+)
Public.java
package access.foo;
public class Public {
public static void main(String[] args) {
Public public1 = new Public();
Default1 default1 = new Default1();
Default2 default2 = new Default2();
}
}
class Default1 {
}
class Default2 {
}
- 위치는 access.foo; 패키지명으로 access 아래의 foo 안에서
Public
클래스를 파일을 만들었다. - public 접근 제어자 사용으로
Public
클래스 파일명과 클래스명을 동일하게 맞추었다. Default1
,Default2
클래스는 default 접근 제어자로 만들어진 클래스다. 같은 패키지에 있는 클래스는 이Default1
,Default2
클래스를접근할 수 있다.Public
클래스의main()
함수에서 각각의 클래스를 호출할 뿐 아니라 자기 자신도 호출한다.
같은 패키지에서 호출하기
PublicInner 신규 패키지를 생성하였다. 같은 "access.foo" 패키지 범위에 있기 때문에 문제 없이 Public, Default1, Default2 클래스를 불려올 수 있는 것을 확인할 수 있다.
access
└foo
├PublicInner.java (+)
└Public.java
PublicInner.java
package access.foo;
public class PublicInner {
public static void main(String[] args) {
Public p = new Public();
Default1 d1 = new Default1();
Default2 d2 = new Default2();
}
}
- 같은 패키지 access.foo 패키지 범위에서 새 PublicInner 클래스 생성
- Public 클래스는 public 으로 접근 제어자로 선언한 클래스이다. 외부에서 접근 가능
PublicInner
패키지와Default1
,Default2
같은 패키지 범위에 있어서 호출이 가능하다.
다른 패키지에서 호출하기
다음 경로에서 access.bar 에서 클래스를 새로 생성하였다.
그리고 Public, Default1, Default2 호출되는지 확인해보도록 한다.
access
├bar
│ └PublicOuter.java (+)
└foo
├PublicInner.java
└Public.java
PublicOuter.java
package access.bar;
import access.foo.Public;
public class PublicOuter {
Public p = new Public();
// access.foo is Default1, Default2
// Default1 d1 = new Default1();
// Default2 d2 = new Default2();
}
- 패키지는 access.bar 에서 PublicOuter 클래스를 생성하였다.
- Public 클래스는 public 으로 접근 제어자로 선언한 클래스이다. 외부에서 접근 가능
PublicOuter
패키지와Default1
,Default2
클래스와 다른 패키지 범위에 있어서 호출이 불가능하다.