본문 바로가기
Java

[Java] enum(열거 타입)에 대해서

by 하부루 2024. 8. 18.

1. Enum 이란?

enum은 서로 연관된 상수들의 집합으로 상수를 여러개 정의 할 때 사용한다.

ex) 요일, 계절, 과목 등을 나타낼 때 쓰일 수 있다.

 

2. Enum 구현하기

1. enum 정의

  • enum 클래스로 언어들을 상수화 했다(열거 상수는 대문자로 작성해야 한다.)
  • enum은 클래스처럼 선언해서 사용 가능하다.

 

2. enum 값 출력

  • enum 객체가 출력되는걸 볼 수 있다.

 

실행 결과:

 

3. Enum의 장점

Enum은 코드의 가독성을 높이고 논리적인 오류를 줄일 수 있는 장점이 있다.

 

1) 상수와 리터럴이 논리적 연관이 없는 문제를 해결 가능하다.

  • ENGLISH라는 상수와 1이라는 리터럴은 논리적으로 아무런 연관이 없다.
  • 이러한 문제를 해결 가능하다.

 

2) 서로 다른 개념끼리 이름이 충돌할 수 있는 문제를 해결 가능하다.

  • 예를 들어서 과일의 APPLE과 회사의 APPLE은 같은 APPLE이지만 완전히 다른 의미이다.
  • Fruit.APPLE과 Company.APPLE과 같이 열거형으로 정의할 경우 쉽게 구분할 수 있다.

 

3) 리팩토링 범위의 최소화

  • 내용의 추가나 수정이 필요하다면, enum코드 외에 수정할 필요가 없다.

 

4. Java에서의 Enum 특징

1) enum에 정의된 상수들은 enum 타입의 객체이다.

  • C언어나 다른 언어들과는 달리 Java에서의 enum은 enum 타입의 객체이다.
  • 따라서 메소드 영역에는 클래스와 클래스 변수가 저장되고 힙 영역에는 enum 객체 인스턴스가 저장된다.

 

2) 생성자와 메서드를 추가할 수 있다.

  • 자바에서의 enum 생성자는 private이라서 외부에서 접근할 수 없다.
  • 생성자를 이용해서 상수에 데이터를 추가할 수 있다.

 

3) enum은 switch문의 조건식에서도 활용이 가능하다.

  • enum은 swtich문의 조건식에서도 사용할 수 있다.

 

실행 결과:

 

5. Enum이 제공하는 메서드

1) values()

  • enum 타입의 모든 값들을 배열로 만들어서 리턴해주는 메소드이다.

 

실행 결과:

 

2) ordinal()

  • oridinal() 메소드는 전체 enum중에 현재 값이 몇번째인지 알려준다.
  • 순서의 값은 배열과 마찬가지로 0부터 시작한다.

 

실행 결과:

 

3) valueOf()

  • valueOf 메소드는 열거 객체의 상수명과 동일한 문자열을 입력받아, 일치하는 열거 객체를 반환.

 

실행 결과:

 

4) name()

  • 열거 객체가 가지고 있는 문자열을 반환하는데, 이때 문자열은 열거 객체를 선언할 때 명시한 상수 이름이다.

 

실행 결과:

 

5) compareTo()

  • 두 열거 객체간의 순번을 비교하여 상대적 순번 차이를 반환하는 메소드이다.
  • 상대 열거 객체보다 순번이 빠르다면 음수가, 느리다면 양수가 반환된다.

 

실행 결과: