YYYEJI

[JAVA] Enum 클래스란? 본문

Java

[JAVA] Enum 클래스란?

YEJI ⍢ 2022. 12. 25. 16:05
728x90

Enum class 란?

클래스는 아니지만 클래스처럼 보이며, 관련있는 값이 모인 상수입니다.

 

 

 

↓↓↓       Enum 의 특징    ↓↓↓

- index 값을 가짐.

- 상수들은 모두 대문자로 지정.

- 세미콜론(;)을 찍지 않음.

- 상수와 특정 값을 연결시킬 때는 세미콜론(;)을 찍음.

 

 

Enum은 언제 사용되나요?

한정된 데이터들을 갖는 경우에 사용하면 편리합니다.

요일 같은 경우에 총 7개의 데이터만을 갖기 때문에 Enum으로 데이터를 묶어줄 수 있습니다.

Week = { MON, TUE, WED, THU, FRI, SAT, SUN}

 

 

기본 예제입니다.


package practice;

public class EnumTest {
	enum School {KINDERGARTEN, ELEMENTARYSCHOOL, MIDDLESCHOOL, HIGHSCHOOL, UNIVERSITY}
	public static void main(String[] args) {
		School s;
		
		s = School.UNIVERSITY;
		
		switch(s) {
			case KINDERGARTEN : System.out.println("You are a kindergarten student.");
				break;
			case ELEMENTARYSCHOOL : System.out.println("You are an elementary school student.");
				break;
			case  MIDDLESCHOOL : System.out.println("You are a middle school student.");
				break;
			case HIGHSCHOOL : System.out.println("You are a high school student.");
				break;
			case UNIVERSITY  : System.out.println("You are a college student.");
				break;
			
			default:System.out.println("Then are you an office worker?");
		}
	}
}

School type으로  변수를 선언하고 그 안에 enum 상수를 하나 넣어줍니다.

그 이후에 switch 문에서 값이 일치하는 case의 action을 수행하게 됩니다.

 

 

values() 함수


package practice;

public class EnumTest {
	enum School {KINDERGARTEN, ELEMENTARYSCHOOL, MIDDLESCHOOL, HIGHSCHOOL, UNIVERSITY}
	public static void main(String[] args) {
		School[] s = School.values();
		
		for(int i = 0; i<s.length; i++) {
			System.out.println(s[i]);
		}
	}
}

values() 함수는 enum의 있는 상수들이 array로 변수에 들어가게 됩니다.

array 변수의 값을 하나씩 출력했을 때 enum의 모든 상수 값이 출력된 것을 확인할 수 있습니다.

 

 

valueOf() 함수


package practice;

public class EnumTest {
	enum School {KINDERGARTEN, ELEMENTARYSCHOOL, MIDDLESCHOOL, HIGHSCHOOL, UNIVERSITY}
	public static void main(String[] args) {
		System.out.println(School.valueOf("UNIVERSITY"));
		
	}
}

valueOf() 함수는 enum의 상수를 출력해줍니다.

즉, 아무 문자열이나 반환하는 것이 아니라 인자로 들어온 문자열과 일치하는 인스턴트를 반환하게 되기 때문에,

enum 안에 존재하지 않는다면 문자열이 출력되지 않고 error가 뜨게 됩니다.

 

 

ordinal() 함수


package practice;

public class EnumTest {
	enum School {KINDERGARTEN, ELEMENTARYSCHOOL, MIDDLESCHOOL, HIGHSCHOOL, UNIVERSITY}
	public static void main(String[] args) {
		School[] s = School.values();
		
		for(int i = 0; i<s.length; i++) {
			System.out.println("Index of " + s[i] + ": " + s[i].ordinal());
		}
		
	}
}

ordinal() 함수는 enum 상수의 index를 반환해 줍니다.

 

 

name() & getValue() 함수


package practice;

public class EnumTest {
	enum Month { 
        	JANUARAY(1), 
        	FEBRUARY(2), 
        	MARCH(3), 
        	APRIL(4), 
        	MAY(5), 
        	JUNE(6), 
        	JULY(7), 
        	AUGUST(8),
        	SEPTEMBER(9),
        	OCTOBER(10),
        	NOVEMBER(11),
        	DECEMBER(12);
            
            private final int value;
            
            private Month(int value){
                this.value=value;
            }
            
            public int getValue(){
                return value;
            }
            
            
    }
    
    public static void main(String[] args){
        Month[] month = Month.values();
        for(Month m : month){
            System.out.print(m.name()+", ");
            System.out.print(m.getValue()+", "); 
            System.out.println();
        }

    }
}

enum의 상수를 값을 가지고 있는 변수인 것처럼 생성하였고, method까지 만들어 enum을 class처럼 생성해줬습니다.

Ex) JANUARAY(1),    JANUARAY = 1

이때 name() 이라는 함수는 상수 그 자체를 출력을 하는 method이고,

getValue() 함수는 상수 안에 값을 출력하는 method입니다.

 

 

getDeclaringClass() 함수


package practice;

public class EnumTest {
	enum Month { 
        	JANUARAY(1), 
        	FEBRUARY(2), 
        	MARCH(3), 
        	APRIL(4), 
        	MAY(5), 
        	JUNE(6), 
        	JULY(7), 
        	AUGUST(8),
        	SEPTEMBER(9),
        	OCTOBER(10),
        	NOVEMBER(11),
        	DECEMBER(12);
            
            private final int value;
            
            private Month(int value){
                this.value=value;
            }
            
            public int getValue(){
                return value;
            }
            
            
    }
    
    public static void main(String[] args){
        
        Month[] month = Month.values();
        for(Month m : month){
            System.out.println(m.getDeclaringClass());
        }

    }
}

getDeclaringCalss() 함수는 해당 enum의 참조를 출력해줍니다.

 

 

 

compareTo() 함수


package practice;

public class EnumTest {
	enum Month { 
        	JANUARAY(1), 
        	FEBRUARY(2), 
        	MARCH(3), 
        	APRIL(4), 
        	MAY(5), 
        	JUNE(6), 
        	JULY(7), 
        	AUGUST(8),
        	SEPTEMBER(9),
        	OCTOBER(10),
        	NOVEMBER(11),
        	DECEMBER(12);
            
            private final int value;
            
            private Month(int value){
                this.value=value;
            }
            
            public int getValue(){
                return value;
            }           
    }
    
    public static void main(String[] args){
        
        Month[] month = Month.values();
        
        System.out.println((month[3].APRIL).compareTo(month[11].DECEMBER));
    }
}

compareTo() 함수는 두 상수의 index를 비교해줍니다.

 

 

 

◡̈

'Java' 카테고리의 다른 글

[JAVA] 클래스(Class)와 메소드(Method)란?  (0) 2022.12.26
[JAVA] 트레이싱(Tracing) 개념 알아보기  (0) 2022.12.26
[JAVA] 객체 주소값 확인하기  (0) 2022.12.24
[JAVA] do-while문이란?  (0) 2022.12.24
[JAVA] While문이란?  (0) 2022.12.24