반응형

 

enum (열거형)

 

: 상수를 대체하기 위해 나온 문법으로, 상수로 사용할 값을 미리 선언하여 사용할때 쓰는 데이터 타입이다.

데이터값을 정해 줄 경우에는 생성자를 만들어서 괄호속의 값이 변수에 저장되도록 해야한다.

 

  • 선언 방법
enum 열거형이름 {상수값1, 상수값2, 상수값3, ..., 상수값n};

 

 

  • 주요 사용 메소드
사용법
name() 열거형 상수객체의 이름을 문자열로 반환한다.
ordinal() 열거형 상수가 정의된 순서값을 반환한다. (기본적으로 0부터 시작함)
valueOf("열거형상수이름") 지정된 열거형에서 '열거형상수이름'과 일치하는 열거형 상수객체를 반환한다.

 

 

 

ex)

  • enum 사용 전

장미가 아닌데도 장미로 출력되는 문제가 존재함

package kr.or.ddit.basic;

class Flower {
	static final int ROSE = 1;
	static final int TULIP = 2;
}

class Animal {
	static final int LION = 1;
	static final int TIGER = 2;
}

public class T07EnumTest {
	public static void main(String[] args) {
		int a = Animal.LION;
		
		if(a == Flower.ROSE) {
			System.out.println("이것은 장미가 확실합니다.");
		}
	}
}

 

결과 화면1

 

 

  • enum 사용
package kr.or.ddit.basic;

/*
 * 열거형 => 상수값들을 선언하는 방법
 * 
 *  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};
 *  
 *  열거형 선언하는 방법
 *  enum 열거형이름 {상수값1, 상수값2, 상수값3, ..., 상수값n};
 *  
 */

public class T07EnumTest {
	
	// City 열거형 객체 선언(기본값을 이용하는 열거형)
	public enum City {서울, 부산, 대구, 광주, 대전};
	
	// 데이터값을 임의로 지정한 열거형 객체 선언
	// 데이터값을 정해 줄 경우에는 생성자를 만들어서 괄호속의 값이 변수에 저장되도록 해야한다.
	public enum Season{
		봄("3월부터 5월까지"), 여름("6월부터 8월까지"), 가을("9월부터 11월까지"), 겨울("12월부터 2월까지");
		
		// 괄호속의 값이 저장될 변수 선언
		private String data;
		
		// 생성자 만들기(열거형의 생성자는 제어자가 묵시적으로 'private'이다.)
		// private으로 class에서만 접근이 가능하여 다른 것을 추가하는 걸 방지한다.
		Season(String data) {
			this.data = data;
		}

		// getter메서드
		public String getData() {
			return data;
		}
	}
	
	public static void main(String[] args) {
		/*
		 * 열거형에서 사용되는 주요 메서드
		 * 
		 * 1. name() => 열거형 상수객체의 이름을 문자열로 반환한다.
		 * 2. ordinal() => 열거형 상수가 정의된 순서값을 반환한다. (기본적으로 0부터 시작함)
		 * 3. valueOf("열거형상수이름") => 지정된 열거형에서 '열거형상수이름'과 일치하는 열거형 상수객체를 반환한다.
		 */
		
		City myCity1; // 열거형 객체변수 선언
		City myCity2; // 열거형 객체변수 선언
		
		myCity1 = City.서울;
		myCity2 = City.valueOf("서울");
		
		System.out.println("myCity1 : " + myCity1.name());
		System.out.println("myCity1의 ordinal : " + myCity1.ordinal());
		System.out.println();
		
		System.out.println("myCity2 : " + myCity2.name());
		System.out.println("myCity2의 ordinal : " + myCity2.ordinal());
		System.out.println("===========================================");
		
		Season ss = Season.valueOf("여름");
		System.out.println("name => " + ss.name());
		System.out.println("ordinal => " + ss.ordinal());
		System.out.println("getter메서드 호출 => " + ss.getData());
		System.out.println("--------------------------------------------");
		
		// 열거형이름.values() => 열거형 상수 배열로 가져온다.
		Season[] enumArr = Season.values();
		for (Season s : enumArr) {
			System.out.println(s.name() + " : " + s.getData());
		}
		System.out.println();
		
		for (City city : City.values()) {
			System.out.println(city + " : " + city.ordinal());
		}
		System.out.println("===========================================");
		
		City city = City.대구;
		System.out.println(city == City.대전);
		System.out.println(city == City.대구);
		System.out.println();
		
		System.out.println("대구 => " + city.compareTo(City.대구)); // index 값을 비교하여 뻄
		System.out.println("서울 => " + city.compareTo(City.서울));
		System.out.println("대전 => " + city.compareTo(City.대전));
	}
}

 

결과 화면2

 

 

반응형