[Java] 접근제어자 - public, protected, default, private

김재연·2023년 4월 26일
0

수숙관

목록 보기
9/17
post-thumbnail

접근제어자

접근제어자는 클래스 내에서 멤버의 접근을 어디부터 어디까지 허용할지 제한하는 역할을 한다. 그리고 제한 범위에 따라 public, protected, default, private 4가지가 존재한다.

  • public : 모든 접근을 허용하여 외부 클래스에서도 자유롭게 사용할 수 있다.
  • protected : 같은 클래스나 이를 상속받은 자식클래스에서만 접근할 수 있다.
  • default : 자신과 같은 패키지에 소속된 클래스에서만 접근할 수 있다.
  • private : 같은 클래스 내에서만 접근 가능하며 외부에서는 접근할 수 없다.

좀 더 보기 편하게 정리하면, 다음과 같다.

표 ver.

그림 ver.

public > protected > default > private 순으로 갈수록 접근영역이 좁아지고, 접근권한이 강화된다.

코드 예시

  1. 다른 패키지(상속X)에서는 public에만 접근 가능

  2. 다른 패키지이더라도 클래스 상속을 받으면 public, protected까지 접근 가능

    ❗생성자 호출 때 부모클래스가 아니라 자식클래스 본인을 불러야함

  3. 같은 패키지 안에서는 public, protected, default까지 접근 가능

  4. 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으로 바꿔서 해결했다.


Reference

JAVA 기본 접근제어자 - public 이란? / 접근 범위 / 예제
JAVA 기본 접근제어자 - protected 이란? / 접근 범위 / 예제
JAVA 기본 접근제어자 - default 이란? / 접근 권한 / 예제
JAVA 기본 접근제어자 - private 이란 / 접근 권한 / 예제
자바(Java) public, private, protected, default 접근 제어자 차이점은

profile
일기장같은 공부기록📝

0개의 댓글