티스토리 뷰

Programming Language/JAVA

enum 에 관한 정의

광식'S Story 2009. 1. 7. 13:37

enum 은 열거형으로, 클래스와같이 선언하여 내부에 필요한 요소들을 상수처럼 열거해놓고 사용한다.

enum의 사용방법은

enum EnumTest {

  A, B, C, D;

}

와 같이 선언하여

EnumTest et = EnumTest.A; 와 같이 열거된 A형의 객체를 생성할수도있다.

그리고 주 클래스의 외부에 선언된것이 아니라면 static 과 같이 적용되어

EnumTest.A 또는 EnumTest.B 와 같이 상수로 사용할수도 있다.

 

그리고 enum은 클래스와 마찬가지로 생성자를 만들어 사용할수도 있으며 맴버 메소드및 맴버 변수를 사용할수도 있다. 기본적으로 생성자를 만들지 않을경우 default 생성자가 자동으로 생성된다.(클래스와 같다.)

생성자는

enum EnumTest {

   A(10,20), B(20,30);

   private int a,b;

   EnumTest(int a, int b) {

      this.a = a;

      this.b = b;

   }

}

와 같이 선언한후

EnumTest et = EnumTest.A;

와 같이 선언하면 생성자에 10 과 20이 들어가게 된다. B의 경우는 20과 30이들어가게 된다.

그리고 enum에 열거된 A와 B는 그것 자체가 하나의 객체이므로 Object 클래스를 상속받게 된다.

System.out.println(et) 라고 할경우는 A가 할당되어있으므로 출력값도 A이다. 즉 A형객체이다.

Object oe = new EnumTest.A 와 같은격이다.

하지만 et 와 oe는 엄연히 다르다.

et 는 Object를 상속 받는 EnumTest 형이고 oe 는 단순히 Object형이다.

그러므로 oe는 EnumTest 내부에 선언된 맴버 들에게 직접 접근하지 못한다.

다시 본론으로 들어가서 et는 Object 를 상속하므로 Object 에 정의된 toString 을 오버라이딩할수있다.

System.out.println(et);

는 A 라는 출력 결과가 나오지만

열거된 A가 A{public String toString() { return "A이다.";}} 라고 선언되어있을경우

System.out.println(et); 의 결과는 A이다 가 출력이 된다.

다시말해 Object 를 상속하므로 Object의 메소드를 오버라이딩이 가능하다.

생성자와 열거의 내부에 메소드를 선언하는 방법은

A(10,20){public String toString() {return "A이다";}} 와 같이 하면된다.

이외에 내부에 변수나 다른 메소드를 선언할수는 있으나 직접적으로 접근하지는 못한다.

이는 무명내부클래스처럼 어떠한 클래스의 메소드에 대한 오버라이딩만이 가능하다.

여기서 는 Object 에 한해서만 가능하다.

다른 메소드를 정의해서 사용하고 자 한다면 메소드 오버라이딩의 특징을 이용하면 된다.

A(10,20){

   int varA = 10;

   void methodA() {

      System.out.println(varA);

   }

   public String toString() {

      methodA();

      return "A이다";

   }

}

와 같이 선언하면

EnumTest.A.toString();

을 실행하게 되면 열거 내부에 선언된 varA변수와 methodA 메소드도 실행이 가능하다.

이에대한 참고내용은 메소드 오버라이딩에 대한 재정의 부분을 참고하기 바란다.

enum 에는 values 라는 메소드를 제공한다.

values 는 열거된 값들을 모두 String 형의 배열로 반환한다.

valueOf(String str) 라는 메소드도 제공하는데 이것은

주어진 문자열과 같은 이름으로 열거된 것을 실행하게된다.

즉 valueOf("A") 라고 줄경우 EnumTest.A를 한것과 마찬가지다.

values 와 valueOf는 모두 static 메소드 이다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함