java

[java] enum 클래스에서의 @AllArgsConstructor

kidmillionaire1998 2024. 6. 27. 10:51

enum에서의 생성자를 사용하기 위해 lombok의 @AllArgsConstructor을 함께 사용하는 경우가 많다. 프로젝트에서 생성자의 접근제어자를 최대한 좁게 설정하는 중에 enum에서도 @AllArgsConstructor를 생성한 기억이 났다. 근데 문제는 

 

1. enum은 package-private, private 생성자를 허용한다. (아니면 아예 컴파일 에러가 난다.) 

2. @AllArgsConstructor의 기본 접근 제어자는 이 둘이 아니라 public이다. 

@AllArgsConstructor의 access level은 어노테이션에 아무 값도 지정해주지 않는다면 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