Skip to main content

자바의 Enum 대하여 (간단 예제 포함)

C/C++에서 존재했던 Enum이 이전 자바에 존재하지 않아서 아래와 같은 형태로 사용했었습니다.

하지만 여기에는 몇가지 한계가 존재합니다.

  1. 타입에 대한 안전성을 보장하지 않습니다. START의 값이 0이 될 수도 있고 1이 될 수도 있고 무엇하나 START를 대표하는 값이 될 수 없습니다.
  2. 이름에 대한 값을 보장하지 않습니다. START를 출력하려고 한다면 0이 반환되어 이름대신 숫자를 출력하게 될 것 입니다.
  3. Namespace를 보장하지 않습니다.

결국 JDK1.5부터 Enum을 지원해주기 시작했습니다. 기본적인 형태는 C/C++에서와 같습니다.

자바에서 Enum은 키워드이며, 클래스나 인터페이스와 같은 타입 입니다. 또한 static과 final이 내장되어 있어서 한번 정의된 값을 바꿀 수 없으며 int형 변수처럼 switch문에서 사용할 수 있습니다.

자바에서 Enum 사용시 아래와 같은 장점이 있습니다.

  1. 타입에 대한 안전성을 보장합니다. Enum 변수에 미리 정의된 상수를 제외한 다른 값을 할당 할 수 없습니다.
  2. Namespace를 보장합니다.
  3. Int형, char형 변수처럼 switch문에서 사용이 가능 합니다.
  4. 추가적인 상수를 추가하는게 매우 쉽고 단순 합니다.

 

자바 Enum의 중요한 점

  1. Namespace를 보장하기 때문에 Enum 변수에는 정의된 상수를 제외한 다른 값을 할당 할 수 없습니다.
  2. Enum은 자바의 참자유형이기 때문에 클래스나 인터페이스 같이 생성자, 함수나 변수 등을 만들어 C/C++보다 더욱 파워풀하게 사용할 수 있습니다.
  3. 필요하다면 Enum 상수에 특정 값을 명시 할 수 있습니다. 다만 이 경우 생성자와 멤버변수를 작성해주어야 합니다. 생성자는 private으로 작성해주어야 합니다.
  4. Enum 상수는 처음 정의된 후 변경할 수 없습니다.
  5. switch문에서 int형, char형 변수처럼 사용할 수 있습니다.
  6. Enum 변수를 비교 할 때는 “==”를 사용합니다.
  7. 자바 컴파일러가 Enum 상수들에 대한 “values()” 함수를 제공합니다.
  8. Enum은 함수를 오버라이드 하거나 생성 할 수 있습니다.
  9. Enum에 대한 EnumMap, EnumSet 컬렉션 클래스가 있어 더욱 다양하게 활용할 수 있습니다.
  10. Enum은 new를 사용하여 생성 할 수 없습니다.
  11. Enum 인스턴스는 코드 상에서 처음 호출되거나 참조 될 때 생성된다.
  12. Enum은 클래스처럼 인터페이스를 구현 할 수 있다.
  13. Enum 안에 추상함수를 정의 할 수 있다.

 

출처: http://javarevisited.blogspot.kr/2011/08/enum-in-java-example-tutorial.html

One thought to “자바의 Enum 대하여 (간단 예제 포함)”

댓글 남기기