본문 바로가기

old/Programming

자바의 enum class란

반응형

개념

이넘enum은 프로그램이 실행되는 동안 고정되어 있는 값을 정의하기 위해 사용하는 클래스
이를 다른말로 상수Constant를 정의한다 라고 합니다.

생겨난 이유

프로그래밍에서는 어떤상황에서든 반드시 필요한 값이 종종 필요할때가 있습니다.
이 값이 변해서는 안되지요. 이런경우, 보통 상수를 정의해서 사용합니다.

역사

이는 C언어부터 사용되어온 기술중 하나인 #define 전처리기와 const 키워드 입니다.

C 코드 예제


#include <stdio.h>

#define MALE 1

int main()
{
    const int FEMALE = 2;

    int input = 2;

    if(input==MALE){
        printf("I am male");
    }else{
        printf("I am Female");
    }

    return 0;
}

결과

I am Female

위 코드는 input변수에 3을 넣더라도 "I am Female"이 출력됩니다. 추가적으로 if문등을 사용해서 체크하는 수밖에 없었지요.

그대로 자바로 넘어오면서 final이라는 개념이 생겨나게 됩니다.
final은 엄밀하게 말하면 상수와 완벽하게 똑같지는 않지만, 이를 포함하는 개념이고. 이를 상수처럼 사용하게 되었습니다.
static final 키워드가 자바에서 사용하는 키워드 입니다.

자바 코드 예제


public class Main {

    public static final String MALE = "MALE";
    public static final String FEMALE = "FEMALE";

    public static void main(String[] args) {
        String gender;
        gender = Main.MALE;
        gender = "male"; //실수

        if(gender.equals(Main.MALE)){
            System.out.println("I am male");
        }else{
            System.out.println("I am female");
        }        

    }
} 

결과

I am female

여전히 똑같은 문제가 발생합니다. 위와 같은 예제에서 "male"가 들어가도 String type이므로 프로그래밍상에서는 문제가 되지 않지만 실제 프로그램은 원하는대로 되지 않는 경우가 발생합니다.

그래서 생겨난 기능이 enum class입니다.
이를 열거형이라고 부르며, 상수를 잘못할당하는것을 피할수 있습니다.

enum 자바 예제

public class Main {

    public static void main(String[] args) {
        Gender gender;
        gender = Gender.MALE;
        gender = "male"; //실수+ 에러가 남

        if(gender==Gender.MALE){
            System.out.println("I am male");
        }else{
            System.out.println("I am female");
        }

    }
}

enum Gender {MALE, FEMALE;}
반응형