서로 연관된 상수들의 집합으로, 서로 관련된 상수를 편하게 선언하기 위해 사용하며, 상수를 여러개 정의해야할 때 사용한다.
수 많은 언어에서 이처럼 새로운 열거형을 정의할 수 있게 하고 있지만, 이번에는 자바의 enum 클래스에 대해서 알아보겠다.
상수란?
자바에서는 final로 문자열이나 숫자들을 나타내는 기본 자료형의 값을 고정할 수 있다. 이렇게 고정된 값을 상수라고 한다.
pubilc class EnumExample {
private final static int JANUARY = 1;
private final static int FEBRUARY = 2;
private final static int MARCH = 3;
private final static int APRIL = 4;
private final static int MAY = 5;
private final static int JUNE = 6;
public static void main(String[] args) {
}
}
위 코드처럼 final을 사용하여 한 번 지정하면 바뀌지 않게 설정하면서 동시에 static을 사용하여 메모리에 한 번만 할당 되게 설정하여 변수를 상수로 만들었다.
이렇게 선언하는 방법도 좋지만, 사용해야 하는 상수가 많아지게 된다면 코드 상위에 계속해서 상수를 선언해줘야 하고, 그렇게 되면 상수가 너무 많아지고 상수들이 어떤 것에 관련된 것인지 한 눈에 알기 힘들다.
enum Month {
JANUARY,
FEBRUARY,
MARCH,
APRIL,
MAY,
JUNE
}
위에서 선언했던 상수를 그대로 enum클래스를 사용해서 선언한 것이다.
enum을 사용해 상수를 정의하게 되면, 여러 장점을 얻을 수 있다.
private static final int CAT = 1;
private static final int DOG = 2;
private static final int PANDA = 3;
CAT이라는 상수와 값인 1은 전혀 논리적인 연관이 없다.
서로 다른 개념끼리 이름이 충돌할 수 있는 문제를 해결할 수 있다.
예를 들어, 중학교의 1학년과 고등학교 1학년은 다른 의미를 가진다. middleSchool.FIRST_GRADE highSchool.FIRST_GRADE과 같이 enum으로 정의할 경우 완전히 구분이 가능하다.
리팩토링 변경 범위가 최소화된다.
내용의 추가나 수정이 필요하더라도, enum 코드만 건들면 된다.
여러 메서드를 제공한다.
enum클래스는 위에서 말한 장점 외에도 유용한 옵션을 제공하는데, 바로 열거형 상수에 추가 속성을 부여할 수 있다.
enum Month {
JANUARY("1월"),
FEBRUARY("2월"),
MARCH("3월"),
APRIL("4월"),
MAY("5월"),
JUNE("6월")
private String monthName;
}
여러개의 속성을 부여할 수도 있다.
enum Month {
JANUARY("1월", "겨울"),
FEBRUARY("2월", "겨울"),
MARCH("3월", "봄"),
APRIL("4월", "봄"),
MAY("5월", "봄"),
JUNE("6월", "여름")
private String month;
private String seasons;
}
앞으로는 연관된 상수를 선언할 때 enum을 활용해보자!
이 글을 읽는 모두, 좋은 하루 되세요. 💗
채은님 안녕하세요! 글 잘 읽었습니다!
글에 대한 몇가지 피드백 1주차와 동일하게 노션에 작성해보았어요! 확인부탁드립니다~ 감사합니다.
https://cheddar-liquid-051.notion.site/9219c7bc09b1425a89b8d1e70c8fc5fd?pvs=4