우아한 테크코스 프리코스에서 ENUM을 이용하여 코드를 구현하라는 미션이 있었다. 당시 나는 ENUM이라는 것에 대해서 알지도 못했고 필요성을 느끼지도 못하였다.
그 후 최종코딩테스트에서 메뉴 관련된 코드를 구현하다가 ENUM을 사용한다면 조금 더 효율적으로 코드 작성을 할 수 있지 않을까 라는 생각이 들었다. 물론 나의 최종 코드는 ENUM 같은 것은 사용되지 않은 코드였다 ..
ENUM 이란 JDK 1.5부터 사용 가능한 서로 연관된 상수들의 집합 이다.
자바의 열거체는 실제 값뿐만 아니라 타입을 체크하며 열거체의 상숫값이 재정의되더라도 다시 컴파일할 필요가 없습니다.
아래는 사용했던 방법이다.
enum 열거체이름 { 상수1이름, 상수2이름, ... }
public enum Score {
zero(0, 0), six(6, 2_000_000_000), fifth(5, 1_500_000), fifthBonus(55, 30_000_000), fourth(4, 50_000), third(3, 5_000);
final int value;
final int money;
Score(int value, int money) {
this.value = value;
this.money = money;
}
public static Score getWinValue(int num) {
for (Score winValue : Score.values()) {
if (winValue.value == num) {
return winValue;
}
}
return null;
}
public int getMoney() {
return money;
}
}
ENUM을 사용한다면 ENUM CLASS 의 인스턴스를 따로 생성하지 않고도 ZERO,SIX,FIFTH 등에 접근할 수 있습니다. 이는 ENUM CLASS 안에 정의된 상수들은 STATIC 변수 효과를 나타내기 때문입니다.
ENUM CLASS 의 장점은 Score에 zero,six,fifth,fifthbonus,fourth,third 등 제가 정의한 상수들외의 값이 들어간다면 컴파일 에러가 발생합니다. 정해진 상수값의 할당을 사전에 체크 할 수 있습니다.
ENUM의 메소드예시로 getMoney 는
Score score = Score.valueOf("5");
System.out.println(score.getMoney());
를 하게 될 경우 1500000 이 출력 되어 진다.
score가 fifth(5, 1_500_000) 값을 가지고 있기에 getMoney할 경우 1_500_000 값이 출력되는 것이다.
ENUM 사용 이유 정리
- 코드가 단순해지며 가독성이 좋다.
- 인스턴스의 생성과 상속을 방지한다.
- 정의한 타입 이외의 타입을 가진 데이터값을 컴파일 할 시 체크할 수 있다.
- 구현의 의도가 열거임을 분명하게 알 수 있다.
'코코코딩공부 > JAVA' 카테고리의 다른 글
[JAVA] 일급 컬렉션 (0) | 2023.02.25 |
---|---|
[JAVA] 원시값 포장 (0) | 2023.02.25 |
[JAVA] equals와 hashCode를 Override 해야하는 이유 (0) | 2023.02.25 |
[JAVA] 정규표현식 (0) | 2023.02.14 |
[JAVA] static, final, static final 이란 ? (0) | 2023.02.12 |