Java/java

java :) enum, 열거상수(각각의 객체)를 가지는 이넘(enum) 이놈을 이해하자.. 쉽지 아니하다.

euncheol kim 2022. 5. 19. 11:08

 

 

goal

열거형 (enum)을 이해한다.

 

 

1. enum


enum은 서로 연관된 상수들의 집합을 말한다.

 

[1] enum 정의방법


enum 열거형이름 {상수명1, 상수명2, 상수명3...}
enum 열거형이름 {상수명1(특정값1), 상수명2(특정값2), 상수명3(특정값3)..}

{상수명1, 상수명2, 상수명3}을 열거상수라고 한다.

  • 중요한 것은, 열거상수의 각각은 객체이다.

 

 

[2] enum 사용예시


  • 기본사용법
enum Week {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}

public class When{
    public static void main(String[] args) {
        System.out.println(Week.Monday) // [1번째] Monday

        Week when = Weeek.Friday;
        Systemo.out.println(when); // [2번째] Frideay
    }
}

 

  • enum의 활용(열거상수 + 스위치문)
enum Week {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}


public class Main {
  public static void main(String[] args) {
   Week when = Week.Monday;

    switch(when) {
      case Monday:
        System.out.println("월요일이라니.......");
        break;
      case Tuesday:
         System.out.println("화요일이라니........");
        break;
      case Wednesday:
        System.out.println("수요일이라니........");
        break;
    }
  }
}

 

  • enum의 활용(열거값 뽑아내기)
enum Week {
    Monday(100), Tuesday(200), Wednesday(300), Thursday(400), Friday(500), Saturday(600), Sunday(700);

    int value;
    private Week(int value){
        this.value = value;
    }
    public int getValue(){
        return value;
    }
}


public class Note {
    public static void main(String[] args) {
        Week when = Week.Monday;

        switch(when) {
            case Monday:
                System.out.println("월요일의 적극성 : " + when.getValue());
                break;
            case Tuesday:
                System.out.println("화요의 적극성 : " + when.getValue());
                break;
            case Wednesday:
                System.out.println("수요일의 적극성 : " + when.getValue());
                break;
        }
    }
}

열거형에 값을 넣을 때는 pirvate 생성자를 반드시 만들어줘야한다 -> 만들지 않으면 오류 발생

  • 열거형값이 생성자로 들어가게 되어, 초기화가 되어진다.
  • private 생성자가 아닌 경우 오류가 나게 되는데 이유는 아래와 같다.
    • 열거 객체는 컴파일이 된 시점에 static final으로 번역이 되어진다.
    • static final은 두가지 경우로 초기화가 가능하다 [1] 선언 동시 초기화 [2] 생성자를 통한 초기화
    • 상수는 바뀌지 않는 값을 의미하는데, public이나 기타 접근제어자로 선언한다면 인스턴스 생성마다 값이 바뀌게 될 가능성이 있으므로 java에서는 이를 허용하지 않는다.(이를 방지한다.)

 

[3] 열거 객체 메소드 종류


리턴타입 메소드(매개변수) 설명
String name() 열거 객체가 가지고 있는 문자열을 리턴한다.
리턴되는 문자열은 열거타입을 정의의할 때 사용한 상수 이름과 동일하다.
int ordinal 열거 객체의 순번(0부터 시작)을 리턴한다.
int compartTo(비교값) 주어진 매개값과 비교해서 순번 차이를 리턴한다.
열거타입 valueOf(String name) 주어진 문자열의 열거 객체를 리턴한다.
열거배열 values() 모든 열거 객체들을 배열로 리턴한다.