접근 제어자를 접근 지시자라고도 부릅니다. 접근 제어자는 다음 표를 사용할 수 있습니다.


접근 제어자 설 명
public 같은 패키지에 있는 모든 곳에서 접근이 가능
private 클래스 내에서만 접근이 가능
protected 자기 패키지 내 이거나 상속했을 때만 접근이 가능
default 자기 패키지 내에서 접근이 가능

 

// ex.1)
public class Ex01 {
    public static void main(String[] args) {
        AA aa = new AA();
        System.out.println(aa.a);
        // 클래스 내에서만 접근이 가능하므로 오류가 뜹니다.
        System.out.println(aa.b);
    }
}
 
 
class AA{
    public int a = 10;
    private int b = 20;
}


// ex.2)
public class Ex01 {
    Ex01(){
        CC cc = new CC();
         
        // public 이므로 모든 곳에서 접근이 가능합니다.
        System.out.println("CC.a" + cc.a);
         
        // default 는 자기 패키지 내에 접근이 가능합니다.
        System.out.println("CC.b" + cc.b);
         
        // private 는 클래스 내에서만 접근 가능하므로
        // 오류가 발생합니다. 
        System.out.println("CC.c" + cc.c);
         
        // protected 는 패키지 내, 상속 했을 때만 접근이 가능합니다. 
        System.out.println("CC.d" + cc.d);
    }
    public static void main(String[] args) {
        new Ex01();
         
    }
}
 
class CC {
    public int a = 10;
    int b  = 20;
    private int c = 30;
    protected int d = 40;
}


다음은 파일 두 개를 만들고 패키지를 다르게 했을 때의 결과입니다.

// ex.3)
import com.nt.CC;
 
public class Ex01 {
    Ex01(){
        CC cc = new CC();
        // public 
        // 모든 접근이 가능하므로 오류가 없습니다.
        System.out.println("CC.a" + cc.a);
        // default
        // 자기 패키지 내에서만 접근이 가능하므로 오류가 발생합니다.
        System.out.println("CC.b" + cc.b);
        // private
        // 클래스 내에서만 접근이 가능하므로 오류입니다. 
        System.out.println("CC.c" + cc.c);
        // protected
        // 패키지 내이거나 상속했을 때만 접근이 가능하므로 오류입니다.
        System.out.println("CC.d" + cc.d);
    }
    public static void main(String[] args) {
        new Ex01();
         
    }
}

 

package com.nt;
 
public class CC {
    public int a = 10;
    int b  = 20;
    private int c = 30;
    protected int d = 40;
}


다음은 패키지 내 두 개의 파일을 만들어 테스트 해보았습니다.

// ex.4)
public class Ex01 {
    Ex01(){
        DD dd = new DD();
        // public 
        // 모든 접근이 가능하므로 오류가 없습니다.
        System.out.println("dd.a" + dd.a);
        // default
        // 자기 패키지 내에서만 접근이 가능하므로 오류가 없습니다.
        System.out.println("dd.b" + dd.b);
        // private
        // 클래스 내에서만 접근이 가능하므로 오류입니다. 
        System.out.println("dd.c" + dd.c);
        // protected
        // 자기 패키지 내이거나 상속했을 때만 접근이 가능하므로 오류가 없습니다.
        System.out.println("dd.d" + dd.d);
    }
    public static void main(String[] args) {
        new Ex01();
    }
}

 

public class DD {
    public int a = 10;
    int b  = 20;
    private int c = 30;
    protected int d = 40;
}


0 댓글