Java/enum

enum 메서드 (values , orinal, valueOf ..생성자)

고인돌개발자 2021. 5. 29. 23:18

Blog 에서 배우다. ( https://www.opentutorials.org/module/1226/8025 )


표 참고 Blog - ( https://limkydev.tistory.com/66 )

Static
Methods
valueOf(String arg)  String 값을 enum에서 가져옴. 값이 없으면 예외 발생 
valueOf(Class<T> class, String arg)   넘겨받은 class에서 String찾아, enum에 가져옴. 
 valueOf(String arg)는 내부적으로 자기자신 Class를 가져옴.
 values()  eum의 요소들을 순서대로 enum타입의 배열로 리턴. 
 (ENUM$VALUES)의 카피임으로 자주 호출하지 않길 
Static이 아닌 
Methods 
name()   호출된 값의 이름을 String으로 리턴. 
ordinal()   해당 값이 enum에 정의된 순서를 리턴. 
compareTo(E o)   enum과 지정된 객체의 순서를 비교. 지정된 객체보다 작은 경우 
 음의 정수, 동일하면 0, 크면 양의 정수 리
equals(Object other)   지정된 객체가 enum 정수와 같은경우, true를 리턴. 

 

| 1. Values 

package self._enum.blog1;

public class Sample_values {
	
	public String name;
    public int size;
    public Type4 type;
     
    public static void main(String[] args) {
    	
    	/*
    	 *  eum의 요소들을 순서대로 enum타입의 배열로 리턴. 
    	 *  열거된 모든 원소를 배열에 담아 순서대로 반환
    	 */
    	
        for(Type4 type : Type4.values()) {
            System.out.println(type);
        }
        
        /*
         * length 사용 가능 
         */
        System.out.println(Type4.values().length);
       
    }

}

enum Type4 {
    WALKING4, RUNNING4, TRACKING4, HIKING4;
}

| 2. ordinal 

package self._enum.blog1;

public class Sample_ordinal {
	
	public String name;
    public int size;
    public Type5 type;
     
    public static void main(String[] args) {
    	Sample_ordinal shoes = new Sample_ordinal();
         
        shoes.name = "나이키";
        shoes.size = 230;
        shoes.type = Type5.WALKING;
         
        /*
         * ordinal(). 원소에 열거된 순서를 정수 값으로 반환 (0부터 반환
         */
        System.out.println(shoes.type.ordinal());
         
        Type5 tp = Type5.HIKING;
         
        System.out.println(tp.ordinal());
    }

}


enum Type5 {
    WALKING, RUNNING, TRACKING, HIKING;
}

| 3. valueOf

package self._enum.blog1;

public class Sample_valueOf {
	
	 public static void main(String[] args) {
	        Type6 tp1 = Type6.WALKING;
	        
	        /*
	         * valueOf() : 매개변수로 주어진 String과 열거형에서 일치하는 이름을 갖는 원소를 반환
			 *    	       (주어진 String과 일치하는 원소가 없는 경우 IllegalArgumentException 예외 발생)
	         */
	        
	        Type6 tp2 = Type6.valueOf("WALKING");
	         
	        System.out.println(tp1);
	        System.out.println(tp2);
	    }

}


enum Type6 {
    WALKING, RUNNING, TRACKING, HIKING;
}

| 4.  enum  열거형 상수에 속성 부여하기 

package self._enum.blog1;

public class Sample_Get {
	
	public static void main(String[] args) {
        
				
		for(Type7 type : Type7.values()){
			System.out.printf("Shoes %s , Shoes Size %s , Shoes Size %d \n",type, type.getName(), type.getSize()); 
			
			
			System.out.println(type.name); // public(defalut) 선언으로 사용 가능
			//System.out.println(type.size); // private 으로 접근 불가 
        }    
		
		
    }

}

enum Type7 {
    // 상수("연결할 문자")
    WALKING("나이키",240), RUNNING("아디다스",250) , TRACKING("프로스펙스",260), HIKING("블랙야크",270);
     
	/* 아래를 public 으로 사용하여 외부에서 직접 접근할 수 있으나, 
	 * 아래와 같이 public 함수를 사용하는것이 바람직해 보임	 
	 * 아래 public String name 은 위 구문에서 type.name 으로도 접근이 가능함
	 */
    String name;
    final private int size;
     
    private Type7(String name, int size) { //enum에서 생성자 같은 역할
        this.name = name;
        this.size = size;
    }   
    
    public String getName() { // 
        return name;
    }
    
    public int getSize() { // 문자를 받아오는 함수
        return size;
    }
    
}