enum Class (열거형)

Codren·2021년 9월 17일
0

Spring Boot 쇼핑몰 프로젝트_ 상품 판매 상태

  • Spring Boot 쇼핑몰 프로젝트 진행 중 상품 Entity 를 구현할 때, 상품 판매 상태를 지정하기 위한 상수값들을 담는 enum 클래스에 대한 궁금증



enum 클래스

연관된 상수들을 원소로 갖는 집합 개념의 클래스

// enum 클래스의 예

public enum ItemSellStatus {
    SELL, SOLD_OUT
}

public enum Week {
   	MONDAY, TUSEDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

public enum Gender {
	MALE, FEMALE
}



enum 클래스 필요 상황


1. enum 클래스 사용 전

  • gender1 이라는 변수에는 "MALE", "FEMALE" 값만 저장되도록 설계했다고 가정
public class EnumExam {
        public static final String MALE = "MALE";
        public static final String FEMALE = "FEMALE";

        public static void main(String[] args) {
            String gender1;

            gender1 = EnumExam.MALE;
            gender1 = EnumExam.FEMALE;                  
        }
    }

  • gender1 변수는 String 타입이기 때문에 아래 코드도 정상적으로 수행됨 (의도와 벗어남)
gender1 = "Boy";




2. enum 클래스 사용

  • Gender 타입 (enum)의 변수에는 MALE 또는 FEMALE만 대입가능 (컴파일 시 체크)
  • 한정된 값만을 사용하기 위함
enum Gender{
        MALE, FEMALE;
    }

Gender gender2;

gender2 = Gender.MALE;
gender2 = Gender.FEMALE;

    //Gender타입의 변수에는 MALE이나 FEMALE만 대입이 가능. 다른 값은 저장할 수가 없다.  



enum 클래스 여러 사용법


1. enum 클래스 생성자 및 메소드

  • 생성자 메소드 및 기본 메소드 구현 가능
  • enum 상수에 추가 속성을 부여하여 생성자의 인자값으로 순서대로 지정
public enum Color {

    RED("빨강",100), GREEN("초록",10), BLUE("파랑",30); 
    
    private String ColorName;
    private int pay;

    // 빨강, 100 순서대로 할당된다.
    private Color(String ColorName, int pay){ 
        this.ColorName = ColorName;
        this.pay = pay;
    } 

    public void colorInfo(){ 
        System.out.println(ColorName +"의 비용은 " + pay +"입니다."); 
    } 
}

Color.BLUE.colorInfo();




2. enum 클래스 정수 반환 1

  • 생성자와 멤버변수를 이용하여 정수형을 반환
public enum Tax {
    NONE(0), SALES(10), IMPORT(5);

    private final int value;
    private Tax(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

...

Tax.SALES.getValue();	// 정수형 반환




3. enum 클래스 정수 반환 2

  • ordinal() 메소드를 이용하여 상수의 index 번호를 정수형으로 반환
public enum Week {
   	MONDAY, TUSEDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

...

Week.MONDAY.ordinal();	// 0 반환

0개의 댓글