Enum(열거형)

박윤택·2022년 5월 19일
3

JAVA

목록 보기
8/14

정의

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

  • 봄, 여름, 가을 겨울
  • 호랑이, 고양이, 퓨마, 삵
  • 체육, 미술, 음악

예제

enum 열거형 이름 { 상수명1, 상수명2, ... }
public enum Subject {
	PE, MUSIC, ART
}

public class Main {
	public static void main(String[] args) {
    	Subject subject = Subject.PE;
        System.out.println(subject); // PE
        
        switch(subject) {
        	case PE:
            	System.out.println("PE");
                break;
           	case MUSIC:
            	System.out.println("MUSIC");
                break;
            case ART:
            	System.out.println("ART");
                break;
        }
    }
}

enum을 사용하면 상수들을 저장하게 되는데 변수에 값을 할당할 수도 있고 이를 이용하여 switch문에도 사용할 수 있다.


메서드

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

static final과의 차이

static final 키워드를 사용하면 상수를 지정할 수 있지만 여기에 몇가지 불편한 점이 있다.

  • 같은 상수명 중복 안됨
  • 타입 안정성의 문제 발생

같은 상수명 중복 안됨

static final int SPRING = 1;
static final int SUMMAR = 1;
static final int FALL = 1;
static final int WINTER = 1;

static final int DJANGO = 1;
static final int NEST = 1;
static final int SPRING = 3;

SPRING의 경우 중복 정의가 되어 있어 에러가 발생한다

타입 안정성의 문제 발생

class Seasons {
  static final int SPRING = 1;
  static final int SUMMAR = 1;
  static final int FALL = 1;
  static final int WINTER = 1;
}

class BackEndFrameWork {
  static final int DJANGO = 1;
  static final int NEST = 1;
  static final int SPRING = 3;
}

SPRING이라는 상수는 Seasons class, BackEndFrameWork class에 각각 같은 이름으로 상수로 사용되고 있다. 타입은 int형이기 때문에 예를 들어 다음과 같은 구문이 있다고 하자.
if(Seasons.SPRING == BackEndFrameWork.SPRING) {...} 이 둘을 비교하면 int 타입을 비교하는 것이기 때문에 에러가 발생하지 않아 타입 안정성이 떨어진다.


0개의 댓글