Ocean_
꾸준한 프로그래밍
Ocean_
전체 방문자
오늘
어제
  • 분류 전체보기 (174)
    • About Me (4)
    • 우아한테크코스 (27)
    • C & LINUX (50)
    • Operating System (12)
    • Database (25)
    • Computer Vision (0)
    • Problem Solving (0)
      • Programmers (0)
      • BOJ (0)
    • 코코코딩공부 (44)
      • Spring (12)
      • JAVA (14)
      • 디자인 패턴 (4)
      • 책 읽기 (4)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • Spring
  • DB
  • Operating System
  • 리눅스
  • C
  • 원시값 포장
  • 자바
  • signal
  • 데이터 조작어
  • 우테코 체스
  • C++
  • 1259
  • 운영체제
  • Linux
  • 우아한테크코스
  • OS
  • 우아한형제들
  • 우테코
  • bean
  • 트랜잭션
  • OperatingSystem
  • BOJ
  • 우테코5기
  • 정규화
  • 블랙잭
  • 백준
  • 프로세스
  • 인덱스
  • 우아한테크코스5기
  • SIGINT

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Ocean_

꾸준한 프로그래밍

코코코딩공부/JAVA

[JAVA] ENUM

2023. 2. 6. 12:03

우아한 테크코스 프리코스에서 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
    '코코코딩공부/JAVA' 카테고리의 다른 글
    • [JAVA] 원시값 포장
    • [JAVA] equals와 hashCode를 Override 해야하는 이유
    • [JAVA] 정규표현식
    • [JAVA] static, final, static final 이란 ?
    Ocean_
    Ocean_
    dongVeloper

    티스토리툴바