Java Enum

2023. 4. 1. 11:20·📘 Backend/Java

📘 Enum (열거형)

  • 서로 연관된 상수들의 집합 (상수 = final 키워드를 통한 변하지 않는 값 선언)
  • 상수명은 대문자로 하는것이 관례
  • 상수 하나하나는 객체로 간주함
  • 따로 값을 지정해주지 않으면 0부터 시작하는 int형 값 자동할당

기본 형식

  • enum 열거형이름 {상수명1, 상수명2 ...}
  • enum Seasons {SPRING, SUMMER, FALL, WINTER}
  • JDK1.5 이전버전에서는 Enum을 지원하지 않아 아래와 같은 전역변수를 상수로 선언하는 방식을 사용했다.
public static final int SPRING = 1;
public static final int SUMMER = 2;
public static final int FALL   = 3;
public static final int WINTER = 4;

public static final int DJANGO  = 1;
public static final int SPRING  = 2; // 계절의 SPRING과 중복 발생!
public static final int NEST    = 3;
public static final int EXPRESS = 4;

위와 같이 상수를 선언하고, 상수명이 중복이 되면 컴파일 에러가 발생함

interface Seasons {
    int SPRING = 1, SUMMER = 2, FALL = 3, WINTER = 4;
}

interface Frameworks {
    int DJANGO = 1, SPRING = 2, NEST = 3, EXPRESS = 4;
}

1차적인 해결법으로 위와 같이 인터페이스를 사용하여 상수구분을 함으로써 해결이 가능하지만,

타입 안정성이라는 새로운 문제가 생김

이외에도, 객체 생성을 통한 방법 외 여러가지가 있지만 switch문에 활용할 수 없는 등 여러 문제가 있다.

(switch 문은 사용자정의 타입이 호환이 안됨)


Enum을 활용한 상수 정의

enum Seasons { SPRING, SUMMER, FALL, WINTER }
enum Frameworks { DJANGO, SPRING, NEST, EXPRESS }

위와 같이 enum을 활용해 코드작성을 하면 앞선 문제들의 해결과 코드의 간결을 동시에 챙길수 있다

또한, switch문에서도 활용이 가능하다


switch문을 활용한 enum의 상수 정의

enum Seasons {SPRING, SUMMER, FALL, WINTER}

public class Main {
    public static void main(String[] args) {
        Seasons seasons = Seasons.SPRING;
        switch (seasons) {
            case SPRING:
                System.out.println("봄");
                break;
            case SUMMER:
                System.out.println("여름");
                break;
            case FALL:
                System.out.println("가을");
                break;
            case WINTER:
                System.out.println("겨울");
                break;
        }
    }
}

//출력값 
봄

Enum에서 사용할 수 있는 Method

img


enum Level {
  LOW, // 0
  MEDIUM, // 1
  HIGH // 2
}

public class EnumTest {
    public static void main(String[] args) {
        Level level = Level.MEDIUM;

        Level[] allLevels = Level.values();
        for(Level x : allLevels) {
            System.out.printf("%s=%d%n", x.name(), x.ordinal());
        }

        Level findLevel = Level.valueOf("LOW");
        System.out.println(findLevel);
        System.out.println(Level.LOW == Level.valueOf("LOW"));

        switch(level) {
            case LOW:
                System.out.println("낮은 레벨");
                break;
            case MEDIUM:
                System.out.println("중간 레벨");
                break;
            case HIGH:
                System.out.println("높은 레벨");
                break;
        }
    }
}

//출력값
LOW=0
MEDIUM=1
HIGH=2
LOW
true
중간 레벨

위의 코드에서

values() = level에 정의된 모든 상수를 배열로 반환함

name() , ordinal() = values로 받은 배열의 각각 이름과 순서를 출력값으로 반환

valueOf() = 지정된 열거형에서 이름과 일치하는 열거형의 상수를 반환

ordinal = 객체의 순번(인덱스 번호) 리턴


Java에서 열거형은 상수명의 중복,타입의 안정성, 보다 편리한 상수선언을 보장하며 switch문에서 동작가능

저작자표시 (새창열림)

'📘 Backend > Java' 카테고리의 다른 글

Java Exception  (0) 2023.04.01
Java Generic & Wildcard & Wrapper  (0) 2023.04.01
Java 객체 지향 프로그래밍 - 2  (0) 2023.04.01
Java 객체 지향 프로그래밍 - 1  (0) 2023.04.01
Java This & Inner Class  (0) 2023.04.01
'📘 Backend/Java' 카테고리의 다른 글
  • Java Exception
  • Java Generic & Wildcard & Wrapper
  • Java 객체 지향 프로그래밍 - 2
  • Java 객체 지향 프로그래밍 - 1
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      GStreamer #Pipeline
      React #Markdown
      Lock #Thread #Concurrency
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Java Enum
    상단으로

    티스토리툴바