열거형 (Enum)

귀찮Lee·2022년 5월 19일
0

Java

목록 보기
8/15

◎ 열거형(Enum)

  • 몇 가지로 한정된 값을 가지고 사용하는 데이터 타입
enum 열거형이름 { 상수명1, 상수명2, 상수명3, ...}

enum Seasons {SPRING, SUMMER, FALL, WINTER} // Enum 정의
// 상수는 관례적으로 대문자로 작성

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;
        }
    }
}

◎ 열거 객체 메소드

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

◎ Enum 사용 필요성

  • 특정 경우에 특정 값만을 사용하기 위해서, 다양한 방법을 사용 했었음

    1. public static final을 통해 전역변수로 상수를 설정
    • 문제점 : 상수명이 중복하는 경우가 발생
    // 계절
    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 KARINA = 1;
    public static final int GISELLE = 2;
    public static final int WINTER = 3; // 계절의 변수명과 곂침
    public static final int NINGNING = 4;
    1. 인터페이스로 상수를 구분하여 사용
    • 문제점 : 타입 안전성의 문제가 생김 (오직 구분을 위해서 할당한 숫자들을 통해 크기 비교가 가능)
    interface Seasons {
        int SPRING = 1, SUMMER = 2, FALL = 3, WINTER = 4;
    }
    interface Aespa {
        int KARINA = 1, GISELLE = 2, NINGNING = 3, WINTER = 4;
    }
    
    Season.WINTER == Aespa.Winter // true
    1. (타입 비교를 불가능하게 하기 위해) 서로 다른 객체로 만듦
    • 문제점 : 코드가 길어지고, (사용자 정의 타입이기 때문에) swicth문에서 사용할 수 없음
      • switch의 조건으로는 char, byte, short, int, Character, Byte, Short, Integer, String 또는 enum 타입만 가능
    class Seasons {
      public static final Seasons SPRING = new Seasons();
      public static final Seasons SUMMER = new Seasons();
      public static final Seasons FALL   = new Seasons();
      public static final Seasons WINTER = new Seasons();
    }
    
    class Aespa {
        public static final Aespa KARINA = new Aespa();
        public static final Aespa GISELLE = new Aespa();
        public static final Aespa NINGNING = new Aespa();
        public static final Aespa WINTER = new Aespa();
    }

◎ Enum의 장점

  • 상수명의 중복을 피할 수 있다
  • 타입에 대한 안정성을 보장
  • 코드가 단순해지고 가독성이 좋음
  • switch문에 사용할 수 있다.
profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!

0개의 댓글