Access Level 을 protected 로 설정하는데 왜 protected 로 설정하는지 protected 로 설정했을 때의 접근 영역이 어딘지 헷갈려 정리를 해보려한다.
Access Level 의 필요성
접근 레벨을 가장 흔하게 적용하는 예는 아래와 같이 기본생성자를 만들 때이다.
보안상의 문제로 public 을 쓰지 않는다면 왜 private 을 사용하지 않는가에 대한 의문을 하지 못했던 것 같다.
@NoArgsConstructor(access = AccessLevel.PROTECTED) // ★ 접근 레벨 설정
public class Member {
..
}
우선, public 이 아닌 이유는 외부에서의 무분별한 생성을 막기위해서이고 private 이 아닌 이유는 JPA의 프록시 객체를 생성해야 하기 때문인데 해당 내용은 따로 정리를 하면 좋을 것 같다.
오늘은 각 Access Level 에 따른 접근 영역을 정리할 것이다.
Access Modifier in Java
- public
: 어디서든 접근 가능.
- private
: 클래스 내부에서만 접근 가능하고 클래스 외부에서는 접근 불가.
- protected
: 동일한 패키지 내의 모든 클래스와 다른 패키지 내의 하위 클래스(서브 클래스) 에서만 접근 가능.
- package
: 동일 패키지에서는 접근 가능하나 다른 패키지에서는 접근 불가.
Access Level in Lombok
굳이 Lombok 의 Access Level 을 확인한 이유는 MODULE 때문이다.
PACKAGE 와 동일한 영역을 갖지않느냐는 의문과 그 이후 Deprecate 되었다는 내용이 있기 때문에 참고 바란다.
참고
https://web.mit.edu/javadev/doc/tutorial/java/javaOO/accesscontrol.html
https://www.javatpoint.com/access-modifiers
https://www.geeksforgeeks.org/public-vs-protected-vs-package-vs-private-access-modifier-in-java/
https://github.com/projectlombok/lombok/issues/2758
'JAVA' 카테고리의 다른 글
[JAVA] 체크 예외와 언체크 예외 (2) | 2023.10.29 |
---|---|
[이펙티브자바] Item1. 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2023.10.15 |
[Java] stream.map() 동작 및 예제 (0) | 2023.08.20 |
[Java] record 사용방법 및 예제 (0) | 2023.08.06 |
[Java] stream.filter() 동작 및 예제 (0) | 2023.07.19 |