접근제한자

액세스 한정자는 클래스 내에서 멤버의 액세스를 제한하는 역할을 합니다.

접근 제한 유형

  • 공공의
    • 이는 모든 클래스가 액세스할 수 있음을 의미합니다.
  • 보호
    • 이것은 그 자체로, 같은 패키지에 있든, 다른 패키지에 있든 상속된 자식 클래스에서 액세스할 수 있음을 의미합니다.
  • 사적인
    • 즉, 사용자만 액세스할 수 있습니다.
  • 액세스 수정자가 지정되지 않은 경우 기본 액세스 식별자
    • 이는 자신과 동일한 패키지에서만 호출할 수 있음을 의미합니다.
    public class AccessObj{
    
  		public int p = 3;
    	protected int p2 = 4;
        int k = 2; // default접근 제한자
        private int i = 1;
    }
  • AccessObj를 사용한 AccessObjExam
    • AccessObj의 필드 i에 대한 액세스 수정자는 비공개이므로 다른 클래스인 AccessObjExam에서 액세스할 수 없습니다.
    public class AccessObjExam{
        public static void main(String args()){
            AccessObj po = new AccessObj();

            System.out.println(po.p);
            System.out.println(po.p2);
            System.out.println(po.k);
            System.out.println(po.i); // 컴파일 오류가 발생합니다.
        }
    }
  • AccessObj 및 기타 패키지 사용해 보기
    • 패키지가 변경되었기 때문에 기본 액세스 한정자라고 하는 k 필드와 보호된 액세스 한정자라고 하는 p2 필드에 액세스할 수 없습니다.
    public class AccessObjExam{
        public static void main(String args()){
            AccessObj po = new AccessObj();

            System.lout.println(po.p);
            System.lout.println(po.p2);// 컴파일 오류가 발생합니다.
            System.lout.println(po.k);// 컴파일 오류가 발생합니다.
            System.out.println(po.i); // 컴파일 오류가 발생합니다.
        }
    }
  • AccessObjExam을 AccesObj에서 상속하도록 변경 후 사용해보세요.
    • 패키지는 다르지만 상속 관계로 인해 보호 액세스 수정자로 표시된 p2 필드에 액세스할 수 있습니다.
    public class AccessObjExam extends AccessObj{
        public static void main(String() args) {
            AccessObjExam obj = new AccessObjExam();
            System.out.println(obj.p);
            System.out.println(obj.p2);
            System.out.println(obj.k);// 컴파일 오류가 발생합니다.
            System.out.println(obj.i);// 컴파일 오류가 발생합니다.
        }
    }