Java Enum Static Field

KimJinkYU·2022년 10월 18일

개발 기록

목록 보기
8/8

얼마전 업무를 진행하다 enum field에

private final List<String> labels;

다음과 같이 추가하고

EMPTY(
            999,
            "",
            new ArrayList<>()
    );

이런 enum을 추가하였다.

특정 조건에 맞는 label List를 상황에 따라 내려주고 싶어서 if 문과 add method로 enum field에 직접 넣었는데 계속적으로 List에 항목이 더해지는 현상이 발생했다.

List<String> labels = TestEnum.EMPTY.getLabels();
labels.add("테스트")

TestEnum.EMPTY.getLabels() = ["테스트", "테스트", 테스트", ...]

원인을 알아본 결과 enum은 언제나 항상 field에 static이 암묵적으로 선언된 상태였고 코드를 다음과 같이 선언한 결과 원하는 결과를 얻을 수 있었다.

		List<String> labels = TestEnum.EMPTY.getLabels();
        this.labels = new ArrayList<>(labels);
        this.labels.add("테스트);

아마 생각하건데 Enum 또한 Class의 한 종류기 때문에 로딩될 때 Method Area에 올라가고, Enum의 인스턴스를 생성해서 호출하는 것이 아닌 직접 Enum에서 항목을 불러오기 때문에 field가 static인 것 같다.

참고 문서

https://stackoverflow.com/questions/23127926/static-enum-vs-non-static-enum
스택 오버플로우는 언제나 옳다!

profile
I'll do my best

0개의 댓글