Enum

최승아·2021년 11월 3일
0

Enum 정의

  • Enum이란 Enumeration의 앞 글자로 열거라는 의미를 갖음
  • 관련이 있는 상수들의 집합
  • 자바에서는 final로 String과 같은 문자열이나 숫자들을 나타내는 기본 자료형의 값 고정 가능 👉 고정된 값을 상수(constant)라고 함

Enum 특징

  1. 클래스를 상수 처럼 사용 가능
  2. Enum 클래스를 구현하는 경우 상수 값과 같이 유일하게 하나의 인스턴스가 생성되어 사용됨 👉 Enum 클래스에서 선언한 상수들은 클래스가 로드될 때 하나의 인스턴스로 생성되어 싱글톤 형태로 어플리케이션 전체에서 사용됨
  • 문제점 : 싱글톤으로 사용되기 때문에 각각의 Enum 인스턴스에 변수를 추가하여 사용되는 것은 외부에서도 호출이 가능하기 때문에 Multi Thread 환경에서 위험! ex) plusCount() 메소드 호출
  1. 서로 관련 있는 상수 값들을 모아 enum으로 구현하는 경우 유용함

    👉 서로 관련있는 상수 값 : Cat, Dog, Fox .. 모두 동물 들을 모아서 열거

  2. 클래스와 같은 문법 체계를 따름

  3. 상속을 지원하지 않음

Enum의 내부 API : java.lang.Enum 클래스를 기본적으로 상속받음

1. values()

  • values()는 Enum 클래스가 가지고 있는 모든 상수 값을 배열의 형태로 리턴함
  • 참고로 단순히 String의 형태로 단순 반환하는 것이 아니라, 인스턴스를 반환하는것
  • 즉 Enum 클래스가 가지고 있는 모든 인스턴스를 배열에 담아 반환

2. valueOf()

  • String을 파라미터로 받는데 인자로 들어온 String과 일치하는 상수 인스턴스가 존재하면 그 인스턴스를 반환

3. ordinal()

  • Enum 클래스 내부에 있는 상수들의 Index를 리턴하는 메소드

Enum 사용 및 활용 : 언제 쓰면 좋을지

1. 데이터의 그룹화 및 관리에 용이

  • 관련되어 있지만, 관련성을 표시하기 힘든 형태의 데이터를 한 곳에서 관리 가능

    예시: 승리한 사람과 패배한 사람을 리스트로 관리

2. Lambda를 활용한 Enum 사용 극대화

  • BiFunction

Enum 장점

  • IDE의 적극적인 지원 👉 자동완성, 오타검증, 텍스트 리팩토링 등등
    허용하고자 하는 값으로 제한하기
  • 리팩토링시 변경 범위가 최소화 👉 상수를 Enum에서 관리하기 때문에 내용의 추가가 필요하더라도, Enum 코드외에 수정할 필요가 없음
  • 다른 언어와 달리 Java 에서는 Enum 이 완전한 기능을 가지고 있는 클래스라서 상수와 관련된 작업들을 추가 가능

참조: 자바 Enum 기본 및 활용 | 2020년 2월 23일 | https://velog.io/@kyle

profile
⭐ 개발 정리 공간 ⭐

0개의 댓글