enum에서의 생성자를 사용하기 위해 lombok의 @AllArgsConstructor을 함께 사용하는 경우가 많다. 프로젝트에서 생성자의 접근제어자를 최대한 좁게 설정하는 중에 enum에서도 @AllArgsConstructor를 생성한 기억이 났다. 근데 문제는
1. enum은 package-private, private 생성자를 허용한다. (아니면 아예 컴파일 에러가 난다.)
2. @AllArgsConstructor의 기본 접근 제어자는 이 둘이 아니라 public이다.
나는 따로 accesslevel을 private, package-private 하게 설정을 안해줬는데 왜 컴파일이 되지?라는 생각을 했다. 그래서 컴파일된 파일을 보니까 값을 따로 지정 안해줬는데 생성자가 private하게 생성되어있었다.
이를 찾아보니 enum 클래스에선 기본적으로 lomok에서 private 생성자를 지원해줘서 이를 지정해줄 필요가 없다고 한다.
(+ public으로 지정해도 컴파일 에러 없이 private으로 자동 설정된다!)
참고
https://projectlombok.org/features/constructor
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
projectlombok.org
'java' 카테고리의 다른 글
[Java] 기본 타입 vs 참조 타입 (0) | 2023.09.05 |
---|