접근제어자는 클래스 내에서 멤버의 접근을 어디부터 어디까지 허용할지 제한하는 역할을 한다. 그리고 제한 범위에 따라 public
, protected
, default
, private
4가지가 존재한다.
public
: 모든 접근을 허용하여 외부 클래스에서도 자유롭게 사용할 수 있다.protected
: 같은 클래스나 이를 상속받은 자식클래스에서만 접근할 수 있다.default
: 자신과 같은 패키지에 소속된 클래스에서만 접근할 수 있다.private
: 같은 클래스 내에서만 접근 가능하며 외부에서는 접근할 수 없다.좀 더 보기 편하게 정리하면, 다음과 같다.
public
> protected
> default
> private
순으로 갈수록 접근영역이 좁아지고, 접근권한이 강화된다.
다른 패키지(상속X)에서는 public
에만 접근 가능
다른 패키지이더라도 클래스 상속을 받으면 public
, protected
까지 접근 가능
❗생성자 호출 때 부모클래스가 아니라 자식클래스 본인을 불러야함
같은 패키지 안에서는 public
, protected
, default
까지 접근 가능
private
은 같은 클래스내에서만 접근 가능하므로 다른 곳에서 접근하려면 아래처럼 따로 메소드를 만들어서 사용한다.
프로젝트를 하다가 이런 코드를 짰었는데
@Getter
@RequiredArgsConstructor
public enum ResponseMsgList {
EXAMPLE_MESSAGE("예시 메세지");
private final String msg;
public static final String notnullMessage = "필수 입력 항목입니다."; // <- 여기!
}
public static class Create {
@NotNull(message = ResponseMsgList.notnullMessage)
private Long tutoringId;
// ... 생략 ...
}
어노테이션 안에서는 원래 메세지를 받아오던 코드인 ResponseMsgList.EXAMPLE_MESSAGE.getMsg()
으로 쓸수가 없었고, 상수(즉, final
로 선언된 변수)만이 가능하다고 에러가 났었다.
그래서 기존 코드에 private final
이라고 되어 있길래 똑같이 private final
로 했더니 직접 접근할 수가 없었고, 따로 접근 메소드를 써줘야해서 귀찮아서 public
으로 바꿔서 해결했다.
JAVA 기본 접근제어자 - public 이란? / 접근 범위 / 예제
JAVA 기본 접근제어자 - protected 이란? / 접근 범위 / 예제
JAVA 기본 접근제어자 - default 이란? / 접근 권한 / 예제
JAVA 기본 접근제어자 - private 이란 / 접근 권한 / 예제
자바(Java) public, private, protected, default 접근 제어자 차이점은