자바 열거형 Enum, 오늘은 이번에 볼 내용은 자바5로 추가된 열거형 Enum입니다.
열거형 Enum 은 “의미가 부여된 이름”을 가진 “정수” 선언을 목적으로 합니다.
Enum의 특징은 다음과 같습니다.● 클래스처럼 보이는 정수 ● 서로 관련 있는 정수를 모아 상징적인 명칭 집합으로 정의 ● Enum 클래스형을 기반으로 한 클래스형 선언 ● 새로운 열거형(Enum)을 선언하면 Enum 클래스형 기반의 새로운 클래스형이 만들어진다.
Enum의 장점은 다음과 같습니다.● 코드가 단순해져, 가독성이 좋습니다.● 인스턴스 생성과 상속을 방지하고 정수치의 유형 안정성이 보장됩니다.● Enum Class 를 사용하여 새로운 상수의 유형을 정의함으로써 유형 이외의 유형을 가진 데이터 값을 컴파일 시 체크합니다.●키워드 Enum을 사용하므로 실장 의도가 열거형임을 명백히 알 수 있습니다.(= 가독성)
■ 인터페이스 기반의 정수 정의 열거형을 공부하기 전에 이전에 어떤 방식으로 사용되었으며 어떤 문제점이 있었는지 살펴보겠습니다!
인터페이스 내에서 선언된 변수는 public, static, final이 선언된 것으로 간주합니다.따라서 스케일 인터페이스의 정의에 의해 총 7개의 정수가 정의되어 있습니다.인터페이스 스케일에는 “음계”를 표현한 정수가 포함되어 있습니다. 여기서 중요한 것은 정수 이름인데 정수 값이 바뀌어도 이름이 바뀌지 않으면 코드에 아무런 영향이 없습니다.스위치문에서 정수값이 아닌 정수이름으로 분기처리했기때문입니다.
위와 같은 방식이 자바5 이전에 사용되었던 방식인데 여기서는 문제점이 한 가지 있습니다.다음 예제를 통해 문제점이 무엇인지 살펴보겠습니다.
위 예제에서는 다음과 같은 두 인터페이스가 존재합니다.위의 인터페이스에서는 DOG와 MAN은 상수 값이 1이고, CAT와 WOMAN의 상수 값은 2입니다.위와 같이 선언하는 경우 다음 문장에서 문제가 발생할 수 있습니다.Person.MAN도 값이 1이고 Animal.DOG의 값도 1이기 때문에 이런 실수를 해도 컴파일 에러는 물론 실행 에러도 발생하지 않습니다.
■ 자료형 부여를 돕는 열거형위와 같은 문제점을 해결하기 위해 Java5에서 열거형 Enum이 소개되었는데 열거형 Enum 다음과 같이 정의합니다.위와 같이 Enum을 정의하여 아래와 같이 호출하여 사용할 수 있습니다.결과값은 각각 DO, DOG가 됩니다.
아까 인터페이스 기반의 정수 정의에서 발생한 문제점을 바탕으로 열거형 Enum을 보겠습니다.
기존 코드와 달리 A nimal을 인자로 받으면 컴파일 오류가 발생합니다.Person형 값을 전달해야 하는 상황에서 Animal형 값이 전달되어 컴파일 오류가 발생합니다.그리고 이것은 먼저 문제라고 지적한 부분이 해결되었음을 의미합니다.
■ 클래스 내에서 정의가 가능한 열거형 클래스 내에 클래스 정의가 가능하도록 클래스 내에서 정의할 수도 있습니다.
열거형 Enum에 대한 설명은 여기서 마치며, 다음은 Enum의 다양한 예제를 통해서 자세히 살펴보도록 하겠습니다.
References https://limkydev.tistory.com/66
http://www.yes24.com/Cooperate/Naver/welcomeNaver.aspx?pageNo=1&goodsNo=43755519