네이버 클라우드 캠프/Java

[Java] enum 열거형 정리

graph-dev 2023. 3. 29. 20:46
728x90

Enum 열거형?

1) 이넘(enum)은 열거형을 의미합니다.

상수를 모아서 클래스같이 만들어주는 멋진 기능입니다. 상수가 가지는 특징이 값이 한번 정해지면 변하지 않는 것입니다. 따라서, 열거형에 있는 상수도 값의 변경이 불가능합니다.

 

2) 인터페이스와 클래스의 중간 단계 형태를 가집니다.

  • 인터페이스 : 추상자료형으로 구현할 동작을 지정합니다.
  • 클래스 : 객체들을 모은 설계도이고, 실제 구현이 이루어집니다.

3) 객체처럼 선언하고 사용가능합니다.

4) 열거형을 사용하지 않는다면?

- 관련된 상수를 하나씩 모두 정의해야하고, 사용하더라도 Value로서 역할만 합니다.

- 가령 1년에 속한 월 이름에 대해 상수로 값을 넣어준다고 하면, 아래와 같이 코드를 작성합니다.

- 번거롭고 불편합니다.

public class NoEnum {
	public static final int JAN = 1; //이런 상수를 하나하나 입력해야함. 불편.
	public static final int FEB = 2;
    //...
	public static final int DEC = 12;
	
	public static void main(String[] args) {
		System.out.println("January는 " + JAN +  " 월 입니다.");
	}
}

 

열거형 장점

  • 여러 상수들을 집합으로 모아서 선언할 수 있습니다.
  • 값도 여러개를 할당 가능합니다.
  • 기능을 가지는 메소드도 선언해서 사용할 수 있습니다.

열거형 선언 및 사용

1) 열거형을 선언하려면, enum 상수의 공통 이름을 만듭니다.

공통 이름 { 상수1, 상수2, 상수3 ... }

이렇게 나열해서 사용할 수 있습니다.

상수는 모두 대문자로 만들고, enum 내부에서 이러한 상수와 메소드를 선언하고 정의합니다.

 

2) 열거형을 사용한다면?

  • enum의 상수에 접근 : 공통 이름.상수명
  • enum의 객체 형태로 사용 가능합니다.
공통 이름 변수명 = 공통 이름.상수명;
  • enum의 상수에 값을 정하지 않으면 0부터 차례대로 지정됩니다.
    • ex) 자동으로 0부터 1,2,3 순으로 정해집니다.

 

열거형의 메소드

  • 일반 메소드와 추상메소드를 선언할 수 있습니다.
  • 종류
values() (하나) 열거형에 선언되어 있는 상수의 값을 배열로 반환
enum의 객체가 담긴 배열을 반환.
valueOf(String 상수명) 해당 상수명에 속한 상수를 enum의 객체형으로 반환.
ordinal() 해당 상수의 인덱스를 반환. 몇번째로 선언된 상수.
name() 상수명을 반환합니다.
  • Enum의 추상메소드
    • 자식에게 상속되어 구현되지 않습니다. 즉,  enum 내부에서 선언과 구현되어야 합니다.
    • 추상메소드 선언 : 멤버변수와 메소드 부분에서 진행하고, 구현은 상수별로 각각 수행합니다.

예를 들어, RGB 값을 출력하는 enum 추상메소드는 아래와 같습니다.

//추상메소드의 선언과 구현
abstract void printRgbValue();
	RED("red", 255,0,0) { 
		void printRgbValue() {
		System.out.println(RED.getRed()); } 
	};

상수명과 매개변수를 정하고, 중괄호 내에 메소드를 구현하게 됩니다.

 

열거형의 name과 value

name Enum 안에 정의된 상수의 이름입니다.
관례상 대문자로 작성하고, enum 안에서 유일해야 합니다.
value name에 정의된 상수의 값입니다.
enum에 선언된 상수에 접근할 때, 생성자에서 상수 값을 담을 변수에 해당 상수 값을 대입합니다.

 

열거형(enum)은 다양하게 사용되므로, 하나씩 구체적으로 정리해보면 좋습니다.

'네이버 클라우드 캠프 > Java' 카테고리의 다른 글

[Java] 멀티스레드  (0) 2023.04.06
[Java] 상수의 할당  (0) 2023.03.29
[Java] Collections  (0) 2023.03.29
[Java] 인스턴스화  (0) 2023.03.23
[Java] 클래스와 상속  (0) 2023.03.20