[java] 자바 enum이란?

이채은·2023년 11월 8일
0

자바

목록 보기
3/4
post-thumbnail

enum이란?

서로 연관된 상수들의 집합으로, 서로 관련된 상수를 편하게 선언하기 위해 사용하며, 상수를 여러개 정의해야할 때 사용한다.

수 많은 언어에서 이처럼 새로운 열거형을 정의할 수 있게 하고 있지만, 이번에는 자바의 enum 클래스에 대해서 알아보겠다.

상수란?

자바에서는 final로 문자열이나 숫자들을 나타내는 기본 자료형의 값을 고정할 수 있다. 이렇게 고정된 값을 상수라고 한다.


enum을 사용하지 않고 상수를 선언하는 법

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을 사용하여 상수를 선언하는 법

enum Month {
	JANUARY,
    FEBRUARY,
    MARCH,
    APRIL,
    MAY,
    JUNE
}

위에서 선언했던 상수를 그대로 enum클래스를 사용해서 선언한 것이다.
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 코드만 건들면 된다.

  • 여러 메서드를 제공한다.

    • values() : 해당 enum 타입에 정의된 상수 배열을 반환하는 메서드
    • valueOf() : 지정된 열거형에서 name과 일치하는 열거형 상수를 반환하는 메서드
    • ordinal() : 열거형 상수가 정의된 순서를 반환하는 메서드
    • name() : 열거형 상수의 이름을 문자열로 반환하는 메서드
    • getDeclaringClass() : 열거형의 클래스 객체를 반환하는 메서드

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개의 댓글

comment-user-thumbnail
2023년 11월 8일

채은님 안녕하세요! 글 잘 읽었습니다!
글에 대한 몇가지 피드백 1주차와 동일하게 노션에 작성해보았어요! 확인부탁드립니다~ 감사합니다.
https://cheddar-liquid-051.notion.site/9219c7bc09b1425a89b8d1e70c8fc5fd?pvs=4

답글 달기