Enum(열거형)

이은수·2023년 4월 3일

열거형은 정수형 상수에 이름을 붙여서 코드를 이해하기 쉽게 해준다.

#enum의 장점
	1. Enum을 사용하면 코드가 단순해지며 가독성이 좋아진다.
	2. 인스턴스 생성과 상속을 방지하여 상수값의 타입안정성이 보장된다.
	3. enum class를 사용해 새로운 상수들의 타입을 정의한 타입4. 이외의 타입을 가진 데이터 값을 컴파일 시 체크한다.
	4. 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 알 수 있다.

예제

public class EnumExample {
	// 기존에 상수를 정의하는 방법
	public static final String MALE = "MALE";
	public static final String FEMALE = "FEMALE";

	public static void main(String[] args) {
		String gender1;
		gender1 = EnumExample.MALE;
		gender1 = EnumExample.FEMALE;
		// MALE, FEMALE이 아닌 상수 값이 할당 될 때 //컴파일시 에러가 나지 않음. -> 문제점 발생.
		gender1 = "boy";
		Gender gender2;
		gender2 = Gender.MALE;
		gender2 = Gender.FEMAL;
		// 컴파일 시 의도하지 않는 상수 값을 체크할 수 있음.
		// Enum으로 정의한 상수값만 할당 받을 수 있음.
		gender2 = "boy";
	}
}

// enum class를 이용해 Gender라는 새로운 상수들의 타입을 정의한다.
enum Gender { 
	MALE,
	FEMAL; 
}
  • 자바 컴파일시 문제점을 발견할 수 없기 때문에 enum을 사용해 문제점을 발견할 수 있도록 해보자.
enum Gender{  
	MALE,
	FEMAL;    
}

Gender 타입으로 gender2라는 변수를 선언

Gender gender2;

gender2가 Gender타입이기 때문에 다음과 같이 Gender타입인 MALE, FEMALE을 할당할 수 있다.

gender2 = Gender.MALE;

gender2 = Gender.FEMAL;

여기서 enum class의 인스턴스를 따로 생성하지 않고 바로 MALE, FEMALE로 접근하였는데 내부적으로 생략되었을 뿐 다음 class와 같다.

class Gender{

	public static final Gender MALE = new Gender();
	public static final Gender FEMALE = new Gender();

}

static이 생략되었을 뿐 엄연히 enum class 안에 정의된 상수들은 static 변수 효과를 나타낸다.
아까와 같은 실수로 값을 잘못 할당했을 경우

gender2 = "boy";

gender2라는 타입은 Gender라는 상수타입인데 String 타입인 boy를 할당하려고하니 컴파일에러가 발생된다.

즉 컴파일시 우리가 기대하지 않는 상수값의 할당을 사전에 체크할 수 있다.

0개의 댓글