[Java] 접근제한자의 종류와 실습으로 알아보는 각각의 특성, protected의 이해

    접근제한자
    접근 제한자는 pulbic, procted, default, private와 같이 네 가지 종류가 있다. 이중에서 protected는 상속과 관련이 있다. 

    • public < protected < default < private  접근 제한이 강화


     접근 제한

     적용할 내용 

     접근할 수 없는 클래스 

     public

     클래스, 필드, 생성자, 메소드 

     없음 

     protected 

     필드, 생성자, 메소드 

     자식 클래스가 아닌 다른 패키지에 소속된 클래스 

     defalut 

     클래스, 필드, 생성자, 메소드 

     다른 패키지에 소속된 클래스 

     private 

     필드, 생성자, 메소드 

     모든 외부 클래스


    protected는 public과 default 접근 제한의 중간쯤에 해당한다. 같은 패키지에서는 default와 같이 접근 제한이 없지만 다른 패키지에서는 자식 클래스만 접근을 허용한다.

    protected는 필드와 생성자, 메소드 선언에 사용될 수 있다. 다음 A 클래스를 보면 protected로 선언된 필드, 생성자, 메소드가 있다. 

    package package1;
    public class A {
         protected String field;
         
         protected A() {    
         }
         
         protected void method() {    
         }
    }
    cs

    package package1;
    public class B {
         public void method() {
              A a = new A();
              a.field = "value";
              a.method();
         }
    }
    cs

    B 클래스는 A 클래스와 동일한 패키지에 있다. default 접근 제한과 마찬가지로 B 클래스의 필드, 생성자와 메소드에서는 A 클래스의 protected 필드, 생성자, 메소드에 얼마든지 접근이 가능하다. 


    다음 패키지2에 C 클래스를 만들어서 패키지1에 있는 A클래스를 임포트 시켜보자

    package package2;
    import package1.A;
    public class C {
         public void method() {
              A a = new A();     // 불가
              a.field = "value";  // 불가
              a.method();            // 불가
         }
    }
    cs


    C 클래스는  A 클래스와 다른 패키지에 있다. default 접근 제한과 마찬가지로 C 클래스의 생성자와 메소드에서는 A 클래스의 protected 필드, 생성자, 메소드에 접근할 수 없다.

    package package2;
    import package1.A;
    public class D extends A {
         public D() {
              super();
              this.field = "value";
              this.method();
         }
    }
    cs


    D 클래스는 A 클래스와 다른 패키지에 있다. C클래스와는 달리 D는 A의 자식 클래스이다. 그렇게 때문에 A 클래스의 protected 필드, 생성자, 메소드에 접근이 가능하다. 단 new 연산자를 사용해서 생성자를 직접 호출할 수는 없고, 자식 생성자에서 super()로 A생성자를 호출할 수 있다.


    신용권, 이것이 자바다, 한빛미디어

    댓글

    Designed by JB FACTORY