Java

[Java] 상수집합 enum 의 활용

Rachel_ 2022. 1. 7. 15:34

자바에서 상수의 의미는 변하지 않는 값, 절대 고정의 값이라는 의미다.

그렇기 때문에 변수 선언 시 상수로써 선언 할 때에는

public static final String MALE = "Male";
public static final String FAMALE = "Famale";

과 같이 필드에 final 를 함께 적어주면서 선언하게 된다.

하지만 이런 식의 상수 선언에는 단점이 있는데, 그것은 바로 데이터 유효성 검사의 불가능, 즉 오류의 탐색이 어렵다는 것이다.

public class ENUM{
	static final String MALE = "Male";
	static final String FEMALE = "Female";

	public static void main(String[] args){
		String genderEx1;
		genderEx01 = ENUM.MALE;
		genderEx01 = ENUM.FAMALE;
		gerderEx01 = "girl"; // 과연 컴파일 오류가 날까? 오류가 안난다.
        
        Gender genderEx2; // Gender 가 String 과 같이 하나의 자료형 타입이 되는 것이다.
        genderEx2 = Gender.Male; // "남성" 출력
        genderEx2 = Gender.Female; // "여성" 출력
        genderEx2 = "boy"; // error 왜냐하면 genderEx2 의 자료형인 Gender에는 boy가 없기 때문
	}
}
public Gender {
	Male("남성"),
	Female("여성");
}

위의 ENUM  클래스에서 String gexderEx01 이라는 객체에 gender 만을 담는 상수를 담고 싶었다.

그런데 실수로 "girl" 이라는 것을 선언했다. 그럴 경우, genderEx01는 또다른 girl 이라는 변수를 담은 String 객체를 생성할 뿐이다. 

 

하지만 enum을 통해 상수 타입!을 정의한 뒤 변수를 할당하면 달라진다.

genderEx2 객체는 Gender라는 자료형을 입력받는다.

그리고 Gender 자료형은 우리가 원하는 상수값만을 입력하여 정의한 자료형이다.

따라서 Male과 Female 이외의 다른 값을 입력하게 되면 컴파일 오류가 발생한다. 왜냐하면 나머지 값은 Gender 자료형이 아니기 때문이다. 일종의 데이터 유효성 검사와 같은 것이다.

 

Jump to Java에서는 enum의 장점으로 아래와 같이 설명해주고 있다.

 

  • 매직넘버(1과 같은 숫자 상수값)를 사용할 때보다 코드가 명확해 진다.
  • 잘못된 값을 사용함으로 인해 발생할수 있는 위험성이 사라진다.

※ 프로그래밍에서 상수로 선언하지 않은 숫자를 매직넘버라고 한다.

 

참고출처 : 

https://limkydev.tistory.com/50

https://wikidocs.net/157271