본문 바로가기

Java

JAVA 제어자 접근 제어자, 기타 제어자

제어자는 

크게 접근 제어자와 기타 제어자로 나뉜다.

 

1. 접근 제어자

클래스에서 객체 생성 후 접근자(.)를 사용하여 접근했을 경우 접근을 제어하는 키워드이다.

필드와 메소드 선언분에 명시한다. 명시되어 있지 않은 경우 자동으로  default 접근 제어자로 선언 된다.

 

default 키워드를 보면 같은 클래스와 같은 패키지에서 접근이 가능하다고 나와있다.

여기서 같은 패키지의 의미는 같은 패키지 안에 하위 클래스와 외부 클래스를 포함하는 것을 말한다.

 

접근 제어 수식어 같은 클래스 같은 패키지 하위 클래스 외부 클래스
public(공공의) 접근 O 접근 O 접근 O 접근 O
protected(보호되는) 접근 O 접근 O 접근 O 접근 X
default(디폴트) 접근 O 접근 O 접근 X 접근 X
private(사적인) 접근 O 접근 X 접근 X 접근 X

 

 

  아래의 예시를 확인해 보면 Bread 클래스의 count필드는 private 접근 제어자를 가지고 있다.

  그래서 같은 클래스 안에서는 접근 가능하지만 다른 클래스에서는 접근이 불가능하다.

  다른 클래스에서 접근을 하기 위해선 default이상의 접근 제어자가 선언되어 있는 메소드가 필요하다.

  아래 코드에선 그 메소드가 getCount()이다.

 

  private 필드 접근 순서

  다른 클래스에서 Bread 객체 생성 -> default메소드 접근 -> default메소드에서 private 필드 접근

 

  위의 순서를 통해 private 필드를 선언하고 메소드로 접근하는 이유는

  메소드를 통해 간접적으로 접근하게 되면 메소드에서 값을 제한할 수 있기 때문입니다.

  아래의 setCount()메소드를 통해 count값은 100이하의 값을 가질 수 밖에 없습니다.

 

 

class Bread {
    private count;           // 접근 제어자가 private
    
    int getCount(){          // 접근 제어자가 default
    	return count;
    }
    void setCount(count){
    	if(count >= 100){        // count가 100이상의 숫자이면 100값을 넣는다.
        	this.count = 100;
        }else{
        	this.count = count;  // 같은 클래스에서 접근 가능
        }
    }
}



public class A0220 {
	public static void main(String[] args) {
    
		Bread s=new Bread();
		//int count = s.count; 클래스 A0220(즉, 다른 클래스)접근 불가능
                s.setCount(5);
                int count = s.getCount(); //getCount 메소드 접근 가능
        
                System.out.println(count);

	}

}

 

  일반적으로 private는 필드 앞에 붙여 사용하고, public은 메소드 앞에 붙여 사용한다.

 

2. 기타 제어자