3-2. enums(열거형)

zhyun·2020년 9월 18일
0

HighJava

목록 보기
14/67
post-custom-banner

enum

enum(열거형)이란?

  • enum type상수(Constant)사용할 값들을 미리 선언하여
    사용할 때 사용하는 특별한 데이터 타입이다.
  • JDK1.5부터 지원됨.

enum 사용시 장점

  • 기존 static final키워드를 이용한 상수선언 방식에서는
    해당 상수의 값만을 비교!!
  • But enum을 이용하여 상수를 정의하게 되면 값 뿐만 아니라 타입까지도
    체크하기 때문에 타입 안전(Type Safe)한 코드를 작성할 수 있다.

enum 상수 선언하는 방법

enum 열거형이름 { 상수값1, 상수값2,..., 상수값n};

열거형 => 상수값들을 선언하는 방법

        static final int A=0;
        static final int B=1;
        static final int C=2;
        static final int D=3;
        => enum Data(A,B,C,D);
        

실습예제

public class T08_EnumTest {
	private static final int 피자 = 1;
	private static final int 햄버거 = 1;

	//City 열거형 객체 선언 (기본값을 이용하는 열거형), 열거형 타입 City => 
    	//생략된 괄호는 아래 생성자에서 담아준다.
//	public enum City { 서울(), 부산(), 대구(), 광주(), 대전()}; // 괄호 생략됨 
	public enum City { 서울, 부산, 대구, 광주, 대전}; 
   	// City라는 이름 상수들 => 하나하나 다 타입으로 쓰인다. 서울 Type, 부산 Type..
	// 각각의 city타입 객체를 5개 (서울, 부산, 대구, 광주, 대전)											
	
	//데이터값을 임의로 지정한 열거형 객체 선언
	//데이터 값을 정해 줄 경우에는 생성자를 만들어서 괄호속의 값이 변수에 저장되도록 해야 한다.
	public enum Season{("3월부터 5월까지"), 여름("6월부터 8월까지"), 
        	가을("9월부터 11월까지"), 겨울("12월부터 2월까지");
		
		//괄호속의 값이 저장될 변수선언  
		private String str; 
        	
		
		//생성자 만들기(열거형의 생성자는 제어자가 묵시적으로 'private'이다.) 
              	//-> 생성자를 private하면 접근제어 -> 클래스안에서만 사용가능
		Season(String data){//=> private Season(String data) -> Season타입 객체 4개
			str = data;
		}
		//값을 반환하는 메서드
		public String getStr() {
			return str;
		}
	}
	public static void main(String[] args) {
		/**
		 * 열거형에서 사용되는 메서드
		 * 1. name() => 열거형 상수의 이름을 문자열로 반환한다. 
		 * 2. ordinal() => 열거형 상수 정의된 순서값을 반환한다.(기본적으로 0부터 시작)
		 * 3. valueOf("열거형상수이름") 
         	=> 지정된 열거형에서 '열거형상수이름'과 일치하는 열거형 상수를 반환한다.
		 */
		City myCity1; //열거형 객체변수 선언
		City myCity2; 
		
		//열거형 객체변수에 값 저장하기
		myCity2 = City.서울; //City의 서울 상수
		myCity1 = City.valueOf("서울"); //City enum에서 '서울' 데이터 가져옴.
		
		System.out.println("myCity1 : "+myCity1.name());//서울
		System.out.println("myCity1의 ordinal : "+ myCity1.ordinal());//0
		System.out.println();
		
		
		System.out.println("myCity2 : "+myCity2.name());//서울
		System.out.println("myCity2의 ordinal : "+ myCity2.ordinal());//0
		System.out.println("---------------------------------------------");
		
		Season ss = Season.valueOf("여름"); // 여름이라는 enum 객체를 얻어와서 생성
		System.out.println("name => "+ss.name());//여름
		System.out.println("ordinal => "+ss.ordinal());//1
		System.out.println("get메서드 => "+ ss.getStr());//6월부터 8월까지
		System.out.println("---------------------------------------------");
		
		//열거형이름.values() => 데이터를 배열로 가져온다.
		Season[] enumArr = Season.values();
		for(int i=0; i<enumArr.length; i++) {
			System.out.println(enumArr[i].name() + 
            					" : "+ enumArr[i].getStr());
		}
		System.out.println();
		
		for(City city : City.values()) {
			System.out.println(city+ " : "+ city.ordinal());
		} // 서울:0 부산:1 대구:2 광주:3 대전:4

		// 타입 비교
		City city = City.대구; // 대구라는 enum 상수
		
		System.out.println(city == City.대전); // 대구 == 대전 ; false
		System.out.println(city == City.대구); // 대구 == 대구; true
		
		//오름차순 데이터
		System.out.println("대구 => "+city.compareTo(City.대구)); 
        				   // 대구.compareTo(대구) => 0
		System.out.println("서울 => "+city.compareTo(City.서울)); 
         				   // 대구.compareTo(서울) => 2
		System.out.println("대전 => "+city.compareTo(City.대전)); 
        				  // 대구.eompareTo(대전) => -2
		
	}
}








profile
HI :)
post-custom-banner

0개의 댓글