[JAVA] 접근 제어자(access modifier)

JAVA 접근 제어자(access modifier)

접근제어자를 사용하는 이유는 사용자가 의도하지 않은 방법으로 내부적인 클래스의 상태를 변경하는것을 막고자하기 위함이다.


       같은 클래스  같은 패키지   다른 패키지  모든 클래스
                             (상속)         (서브 클래스)
================================================
private      O              X                X
================================================
default      O              O                X
================================================
protected   O              O               O
================================================
public       O               O               O             O
================================================

접근 제어자가 사용될 수 있는 곳 - 클래스, 멤버변수, 메서드, 생성자

private : 같은 클래스 내에서만 접근이 가능하다.(상속받아도 접근 불가)

default : 같은 패키지 내에서만 접근이 가능하다. (접근제어자를 미작성하면 default로 접근제어자 자동설정)

protected : 같은 패키지 내에서 접근가능, 다른 패키지는 상속시에만 접근가능

public : 접근 제한이 전혀 없다.



접근 범위가 넓은 쪽에서 좁은 쪽의 순으로 왼쪽부터 나열하면 다음과 같다.

public > protected > (default) > private




  대상         ㅣ       사용가능한 접근 제어자
=======================================
 클래스               public, (default)
=======================================
 메서드               public, protected, (default), private
멤버변수     
=======================================
지역변수             없음
=======================================



private을 선언하였더라도 다른 클래스 또는 메서드에서 접근하는방법

















A클래스에 선언된 메서드들을 보면 메서드명 앞에 public과 private이 작성되어있다.
public으로 작성한 y()메서드의 경우 다른 메서드에서도 접근하여 값을 출력할 수 있다.
private으로 작성한 x()메서드의 경우 다른 메서드에서의 접근을 제한하여 error가 발생하며 값을 출력할 수 없다.
하지만 이렇게 private으로 작성된 메서드도 다른 메서드에서 접근이 가능한 방법이 존재한다.
z()메서드 처럼 public으로 작성되어 다른 메서드에서 접근이 가능한 메서드를 통하면 해당 메소드가 같은 클래스에서 private으로 선언된 메서드에 접근하여 값을 출력할 수 있다.


변수 private
메서드 public
생성자 public


클래스 접근제어자

접근 제어자가 public인 클래스는 같은 패키지내에서 그리고 다른 패키지의 클래스에서도 사용할 수 있고,
접근 제어자가 default인 경우는 같은 패키지 내에서만 사용 가능하다.

그리고 한가지 중요한 제약 사항이 있다. public으로 선언된 클래스는 한개만 존재할 수 있으며 클래스명과 소스코드파일명은 동일해야한다.

댓글