romworld

enum 본문

JAVA/개념정리

enum

inderrom 2022. 10. 31. 00:34
package kr.or.ddit.basic.enumtest;

public class ConstTest {
	// 색과 관련된 상수 static final은 순서 바꿔도 상관 x
	public static final int RED =1;
	public static final int GREEN =2;
	public static final int BLUE =3;
	
	// 순서와 관련된 상수
	public final static int ONE = 1;
	public final static int TWO = 2;
	public final static int THREE = 3;
	
}
package kr.or.ddit.basic.enumtest;
/*
	열거형(enum) ==> 서로 관련있는 상수들의 집합을 나타낸다.
				 ==> 클래스처럼 보이게 하는 상수
				 ==> 열거형은 클래스처럼 독립된 java파일에 만들 수 있고,
				     하나의 java파일에 클래스와 같이 만들 수 있고,
				     클래스 안에 내부 클래스처럼 만들 수 있다.
	
	- 열거형의 속성 및 메서드
	 name() ==> 열거형 상수의 이름을 문자열로 반환한다.
	 ordinal() ==> 열거형 상수가 정의된 순서값(index)을 반환한다. (0부터 시작...)
	 열거형이름.valueOf("열거형상수명") ==> 지정된 열거형에서 '열거형상수명'과 일치하는 열거형 상수를 반환한다.
	 열거형이름.상수명 ==> valueof("상수명")와 같다.
	 
	 열거형이름.values() ==> 지정된 열거형에 있는 모든 상수들을 배열로 가져온다.
-------------------------------------------------------------------------------------------------------------	 
	 - 열거형 선언하기
	 방법1)
	 	enum 열거형이름 {상수명1, 상수명2,..., 상수명n}
	 
	 방법2)
	 	enum 열거형이름 {
	 		상수명1(값들1...),
	 		상수명2(값들2...),
	 		~~~
	 		상수명n(값들n...);
	 		
	 		// '값들'이 저장될 변수들 선언한다...
	 		// 선언되는 변수의 개수는 '값들'의 개수와 일치해야 한다. 
	 		 private 자료형이름 변수명;
	 		 ...
	 		 
	 		 // 열거형의 생성자를 만든다.
	 		 // 열거형의 생성자는 '열거형상수'에 '값들'을 셋팅하는 역할을 수행한다.
	 		 // 열거형의 생성자는 묵시적으로 private이다.
	 		  
	 		  // '변수명'은 '값들'의 개수와 같고, 각각의 '값들'과 자료형이 맞아야 한다.
	 		  private 열거형이름(자료형 변수명,...){
	 		  		위에서 선언한 변수들을 초기화 환다.
	 		  }

	 		 //구성할 값을 외부에서 불러서 사용할 수 있는 getter메서드를 작성한다.
	 	}
	
 */	

public class EnumTest {
	public enum Color {RED,GREEN,BLUE} // 끝에 세미콜론 안 붙힘
	
	public enum Count {ONE,TWO,THREE}
	
	public enum Season {
		봄("3월부터 5월까지", 100),		// 상수명(값들...) 형식으로 상수 선언
		여름("6월부터 8월까지",50),
		가을("9월부터 11월까지",200),
		겨울("12월부터 2월까지",75);
		
		//값들이 지정될 변수 선언
		private String span;
		private int score;

		// 생성자
		Season(String months, int num){ // => private Season(String months, int num){ 와 같다.
			span = months;
			score = num;
		}
		
		// 선언된 변수의 값을 가져올 getter메서드 작성
		public String getSpan() {
			return span;
		}
		public int getScore() {
			return score;
			
		}
			
	}	
	
	
	public static void main(String[] args) {
		/*
		System.out.println("Red : " + ConstTest.RED); // 상수를 쓰고 싶으면 ConstTest (클래스 이름써주셈)
		System.out.println("Three : " + ConstTest.THREE);
		
		if(ConstTest.RED == ConstTest.TWO) {
			System.out.println("......");
		}else {
			System.out.println("######");   //실행은 잘 되는데 맞는 방법은 아님 에러메세지가 안나와서 고치기 더 어려움
		}									// 저 상수들은 색깔과 순서로 서로 관련이 없는 상수이니까 . ..
		*/
		
		Color mycol = Color.valueOf("GREEN"); // Color.GREEN과 같다.
		Count mycnt = Count.ONE;			  // Count.valueof("ONE")과 같다.
		
		System.out.println("mycol : " + mycol.name());
		System.out.println("mycnt : " + mycnt.name());
		System.out.println();
		
		System.out.println("mycol의 ordinal : " + mycol.ordinal());
		System.out.println("mycnt의 ordinal : " + mycnt.ordinal());
		
		// 서로 다른 종류의 열거형끼리 비교가 불가능하다.
//		if(Color.RED == Count.THREE) {
//			System.out.println("....");
//		}
		
		if(mycol == Color.GREEN) {
			System.out.println("같다 ...");
		}
		System.out.println("--------------------------------------------");
		
		Season ss = Season.valueOf("봄");
		System.out.println("name : " + ss.name());
		System.out.println("ordinal : " + ss.ordinal());
		System.out.println("span : " + ss.getSpan());
		System.out.println("score : " + ss.getScore());
		System.out.println();
		System.out.println("---------------------------------------------");
		
		for(Season time : Season.values()) {
			System.out.println(time.name() + " ==> " + time + " ==> " + time.getSpan() + "," + time.getScore());
		}
	}
}

'JAVA > 개념정리' 카테고리의 다른 글

Thread  (0) 2022.10.31
Generic  (0) 2022.10.31
Args  (0) 2022.10.28
Properties  (0) 2022.10.28
Map , Set  (0) 2022.10.28
Comments