자바/자바 입문 공부일지

자바 기초 공부 일지 44. 열거형

Tomitom 2022. 11. 3. 14:40
반응형

 

● 자료형의 부여를 돕는 열거형 

 

enum Scale {     // 열거 자료형 Scale 의 정의입니다. enm 은 열거형 키워드. 열거형 값 (Enumerated Values)

   DO, RE, MI, FA, SO, RA, TI

 

스케일형 인스턴스의 도 데이터, 레 데이터...  이렇게 이름에 의미를 부여합니다. 

아래는 열거형의 예제입니다.

 


public static void main(String[] args) {

   Scale sc = Scale.DO;

   System.out.println(sc);

   switch(sc) {

   case DO:   //Scale. <-을 붙이지 않고 case 문에서는 간결함을 위해
   //Do와 같이 열거형 값의 이름만 명시하기로 약속되어 있습니다. 

  System.out.println("도~ ");

      break;

   case RE:

      System.out.println("레~ ");

      break;

   case MI:

      System.out.println("미~ ");

      break;

   case FA:

      System.out.println("파~ ");

      break;

   default:

      System.out.println("솔~ 라~ 시~ ");

   }

}

 


 

열거형은 클래스 내에 정의 가능합니다. 

클래스 내에 열거형이 정의되면 해당 클래스 내에서만 사용 가능한 열거형이 됩니다. 

 

class Customer {

   enum Gender {      // 클래스 내에 정의된 열거형 Gender

      MALE, FEMALE

   }

   private String name;

   private Gender gen;  // 참조타입으로 들어갈 수도 있습니다. 

   Customer(String n, String g) {

      name = n;

      if(g.equals("man"))

         gen = Gender.MALE;

      else

         gen = Gender.FEMALE;

   }

   . . .

}

 


 

자바에서의 열거형은 클래스의 역할과 비슷합니다.

즉, 인스턴스를 생성할 수 있는 설계의 역할을 합니다. 

class Person {
   public static final Person MAN = new Person();
   public static final Person WOMAN = new Person();

   @Override
   public String toString() {
      return "I am a dog person";   // "나는 개를 사랑하는 사람입니다.“
   }
}

class InClassInst {
   public static void main(String[] args) {
      System.out.println(Person.MAN);
      System.out.println(Person.WOMAN);
   }
}

 

모든 열거형은 메소드를 포함할 수 있습니다. 

모든 열거형은 java.lang.Enum<E> 클래스를 상속합니다. 그리고 Enum<E>Object 클래스를 상속하기 때문에,
열거형은 클래스처럼 인스턴스를 생성할 수 있는 설계도 입니다. 

 

열거형은 상수화 된 이름을 저장해두기 위한 목적을 가지고 있습니다.

모든 열거형에는 반드시 생성자가 있습니다.

그러므로 열거형의 정의에도 생성자가 없으면 디폴트 생성자가 삽입됩니다. 
다만 이 생성자는 private으로 선언이 되어 직접 인스턴스를 생성하는 것이 불가능합니다. 

 

 

enum Person {
   MAN, WOMAN;	//객체 생성의 필요가 없음 

   private Person() {	// 생성자가 없음 
      System.out.println("Person constructor called");
   }

   @Override
   public String toString() { return "I am a dog person"; }
}

class EnumConstructor {
   public static void main(String[] args) {
      System.out.println(Person.MAN);
      System.out.println(Person.WOMAN);
   }
}

 

열거형에 들어간 값은 그 자체의 값으로 사용하면 됩니다. 마치 클래스처럼요. 

 


이제 간단한 예제를 작성해볼게요. 

 

package day19;

//상수는 주로 대문자료 표기하며, 단어 사이를 언더바로 구분한다. 

enum Animal{ 
	DOG, CAT, MOUSE, TURTLE
}



public class Enum01 {

	public static void main(String[] args) {
		
		Animal dog = Animal.DOG; // 열거형(Animal형) 참조변수 dog를 만듦.
		
		//스위치에 열거형을 주면, 상수명만으로 case 작성 가능
		
		switch(dog){
			
			case DOG:
				System.out.println("멍멍,.");
			
			case MOUSE:
				System.out.println("찍찍..");
			
			case TURTLE:
				System.out.println("와아앙..");
			
		
		}
	}
}

반응형