Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

luke

[자바/Java] - 접근 제어자(private,default,protected,public) 본문

Study/Java

[자바/Java] - 접근 제어자(private,default,protected,public)

luke-king 2024. 1. 8. 18:15

접근 제어자

자바는 'public', 'private' 같은 접근 제어자를 제공한다. 접근 제어자를 사용하면 해당 클래스 외부에서 특정 필드나 메서드에 접근하는 것을 허용하거나 제한할 수 있다.

 

접근 제어자의 종류

  • private: 모든 외부 호출을 막는다.
  • default(package-private): 같은 패키지안에서 호출은 허용한다.
  • protected: 같은 패키지안에서 호출은 허용한다. 패키지가 달라도 상속 관계의 호출은 허용한다.
  • public: 모든 외부 호출을 허용한다.

순서대로 'private'이 가장 많이 차단하고, 'public'이 가장 많이 허용한다.

private -> default -> protected -> public

 

privat

'private' 접근 제어자는 모든 외부 호출을 막는다. 따라서 'private'이 붙은 경우 해당클래스 내부에서만 호출할 수 있다.

예시 코드를 확인해 보겠다.

 

public class Private {
	private int volume; //private 접근 제어자 사용
   	 int apple; //접근 제어자 사용x
     
    Private(int volume){
    	this.volume = volume;
    }
    
    Private(int apple){
    	this.apple = apple
    }
    
    void volumeUp(){
    volume += 10;
    }
    
    void show(){
    System.out.println(volume);
    }
}

위 코드는 'private'을 사용한 변수와 사용하지않은 변수가 있다. main 클래스에서 인스턴스를 생성해 값을 지정한후 수정한다면 volume 변수는 불가능 하다. 왜냐 앞서 설명한것 처럼 'private'이 붙은 경우 해당클래스 내부에서만 호출할수 있기 때문에 해당클래스에서만 변경이 가능하다.

보기 쉽게 Main 클래스 코드를 확인해 보겠다.

 

<Main class>

public class PirvateMain {

    public static void main(String[] args) {
    	Private private = new Private(90);
        private.volumeUp(); //volume 10증가
        private.show(); // volume의 결과 값은 100이 나온다.
        
        //private.volume = 150; // private 접근 제어자를 사용했기 때문에 수정 불가.
        private.apple = 100; //private 접근 제어자가 아니기 때문에 수정 가능
	}
}

 

 

<public, default, private 사용 코드>

 

<기본 클래스>

public class AccessData {

    public int publicField;
    int defaultField;
    private int privateField;

    public void publicMethod() {
        System.out.println("publicMethod Call " + publicField);
    }

    void defaultMethod() {
        System.out.println("defaultMethod Call " + defaultField);
    }

    private void privateMethod() {
        System.out.println("privateMethod Call " + privateField);
    }

    public void innerAccess() {
        System.out.println("inner Call");
        publicField = 100;
        defaultField = 200;
        privateField = 300;
        publicMethod();
        defaultMethod();
        privateMethod();
    }
}

 

 

<Main class>

 public static void main(String[] args) {
        
        AccessData data = new AccessData();
        //public 호출 가능
        data.publicField = 1;
        data.publicMethod();

        //같은 패키지 default 호출 가능
        data.defaultField = 2;
        data.defaultMethod();

        //private 호출 불가
//        data.privateField = 3;
//        data.privateMethod();

        data.innerAccess();
    }

 

 

 

 

※ 출처: Inflearn 김영한-Java 강의 중