JAVA/패키지

패키지(2) - 접근 제어자(= 접근제한자 = 접근 수준 지시자)(access modifier)

jjhim531 2024. 7. 29. 12:31
반응형

* 자바는 4가지 종류의 접근제어자를 제공한다.

* 접근제어자의 핵심은 "정보은닉"이다!!(속성과 기능을 외부로부터 숨기는 것!!)

 

<접근제어자의 종류>

private 모든 외부 호출을 막는다. 클래스 내부에서만 접근 가능.
default
(package-private)
같은 패키지 안에서 호출은 허용한다.
protected 같은 패키지 안에서 호출은 허용한다. 패키지가 달라도 상속관계의 호출은 허용한다.
public 모든 외부 호출을 허용한다.

 

* 허용범위 : private < default < protected < public

 

 

<default>

* 접근 제어자를 명시하지 않으면 같은 패키지 안에서 호출을 허용하는 default 접근 제어자가 적용된다.

정확히는 동일한 패키지 내의 다른 클래스에서만 접근이 가능하다.

 

<접근 제어자 사용 위치>

* 필드(인스턴스 변수), 메서드, 생성자에 사용된다.

* 클래스 레벨의 접근제어자도 일부 사용가능하다

 

<클래스 레벨의 접근 제어자 규칙>

* 클래스 레벨의 접근 제어자는 public, default만 사용할 수 있다.* public 클래스는 반드시 파일명과 이름이 같아야 한다.- 하나의 자바 파일에 public 클래스는 하나만 등장할 수 있다.- 하나의 자바 파일에 default 접근제어자를 사용하는 클래스는 무한정 만들 수 있다.

//PublicClass.java 파일

package access.a;
public class PublicClass {
     public static void main(String[] args) {
     PublicClass publicClass = new PublicClass();
     DefaultClass1 class1 = new DefaultClass1();
     DefaultClass2 class2 = new DefaultClass2();
  }
}

class DefaultClass1 {
}

class DefaultClass2 {
}

 

package access.a;
public class PublicClassInnerMain {
    public static void main(String[] args) {
    PublicClass publicClass = new PublicClass();
    DefaultClass1 class1 = new DefaultClass1();
    DefaultClass2 class2 = new DefaultClass2();
  }
}
package access.b;
//import access.a.DefaultClass1;
import access.a.PublicClass;
public class PublicClassOuterMain {
   public static void main(String[] args) {
   PublicClass publicClass = new PublicClass();
   //다른 패키지 접근 불가
   //DefaultClass1 class1 = new DefaultClass1();
   //DefaultClass2 class2 = new DefaultClass2();
  }
}

 

728x90
반응형