Enum 정의
- Enum이란 Enumeration의 앞 글자로 열거라는 의미를 갖음
- 관련이 있는 상수들의 집합
- 자바에서는 final로 String과 같은 문자열이나 숫자들을 나타내는 기본 자료형의 값 고정 가능 👉 고정된 값을 상수(constant)라고 함
Enum 특징
- 클래스를 상수 처럼 사용 가능
- Enum 클래스를 구현하는 경우 상수 값과 같이 유일하게 하나의 인스턴스가 생성되어 사용됨 👉 Enum 클래스에서 선언한 상수들은 클래스가 로드될 때 하나의 인스턴스로 생성되어 싱글톤 형태로 어플리케이션 전체에서 사용됨
- 문제점 : 싱글톤으로 사용되기 때문에 각각의 Enum 인스턴스에 변수를 추가하여 사용되는 것은 외부에서도 호출이 가능하기 때문에 Multi Thread 환경에서 위험! ex) plusCount() 메소드 호출
-
서로 관련 있는 상수 값들을 모아 enum으로 구현하는 경우 유용함
👉 서로 관련있는 상수 값 : Cat, Dog, Fox .. 모두 동물 들을 모아서 열거
-
클래스와 같은 문법 체계를 따름
-
상속을 지원하지 않음
Enum의 내부 API : java.lang.Enum 클래스를 기본적으로 상속받음
1. values()
- values()는 Enum 클래스가 가지고 있는 모든 상수 값을 배열의 형태로 리턴함
- 참고로 단순히 String의 형태로 단순 반환하는 것이 아니라, 인스턴스를 반환하는것
- 즉 Enum 클래스가 가지고 있는 모든 인스턴스를 배열에 담아 반환
2. valueOf()
- String을 파라미터로 받는데 인자로 들어온 String과 일치하는 상수 인스턴스가 존재하면 그 인스턴스를 반환
3. ordinal()
- Enum 클래스 내부에 있는 상수들의 Index를 리턴하는 메소드
Enum 사용 및 활용 : 언제 쓰면 좋을지
1. 데이터의 그룹화 및 관리에 용이
- 관련되어 있지만, 관련성을 표시하기 힘든 형태의 데이터를 한 곳에서 관리 가능
예시: 승리한 사람과 패배한 사람을 리스트로 관리
2. Lambda를 활용한 Enum 사용 극대화
Enum 장점
- IDE의 적극적인 지원 👉 자동완성, 오타검증, 텍스트 리팩토링 등등
허용하고자 하는 값으로 제한하기
- 리팩토링시 변경 범위가 최소화 👉 상수를 Enum에서 관리하기 때문에 내용의 추가가 필요하더라도, Enum 코드외에 수정할 필요가 없음
- 다른 언어와 달리 Java 에서는 Enum 이 완전한 기능을 가지고 있는 클래스라서 상수와 관련된 작업들을 추가 가능
참조: 자바 Enum 기본 및 활용 | 2020년 2월 23일 | https://velog.io/@kyle