지금까지는 클래스 맴버에 대한 접근 제어자를 살펴봤다. 이번에 살펴볼 것은 클래스의 접근 제어자다. 클래스도 접근 제어자가 있다. 클래스의 접근 제어자는 총 2개로 public과 default이다. default는 접근 제어자를 붙이지 않은 경우 default가 된다. 클래스의 접근 제어자는 패키지와 관련된 개념이다. 즉 접근 제어자가 public인 클래스는 다른 패키지의 클래스에서도 사용할 수 있고, default인 경우는 같은 패키지에서만 사용 가능하다.
두개의 클래스를 만들자. 각각의 클래스의 접근 지시자는 이름에 이미 암시되어 있다.
package org.opentutorials.javatutorials.accessmodifier.inner; public class PublicClass {}
package org.opentutorials.javatutorials.accessmodifier.inner; class DefaultClass {}
위의 클래스들과 같은 패키지에서 이 클래스들을 사용해보자. 문제 없다.
package org.opentutorials.javatutorials.accessmodifier.inner; public class ClassAccessModifierInnerPackage { PublicClass publicClass = new PublicClass(); DefaultClass defaultClass = new DefaultClass(); }
이번에는 다른 패키지에 있는 클래스에서 사용해보자.
package org.opentutorials.javatutorials.accessmodifier.outter; import org.opentutorials.javatutorials.accessmodifier.inner.*; public class ClassAccessModifierOuterPackage { PublicClass publicClass = new PublicClass(); //DefaultClass defaultClass = new DefaultClass(); }
주석으로 처리한 부분은 오류가 발생한다. DefaultClass의 접근 제어자가 default이기 때문이다.
한가지 중요한 제약 사항이 있다. public 클래스가 포함된 소소코드는 public 클래스의 클래스 명과 소스코드의 파일명이 같아야 한다. 코드를 보자. 이 코드의 이름은 PublicNameDemo.java이다.
package org.opentutorials.javatutorials.accessmodifier.inner; //public class PublicName {} public class PublicNameDemo {}
주석처리된 부분은 오류가 발생한다. 퍼블릭 클래스의 이름과 소스코드의 이름이 일치하지 않기 때문이다. 그 말은 하나의 소스 코드에는 하나의 public 클래스가 존재 할 수 있다는 의미다.