BackEnd/Java

Enum(μ—΄κ±°ν˜•)

ejyoovV 2021. 3. 8. 20:40

πŸ’‘ Enum μ΄λž€?

enum type은 μƒμˆ˜(Constant)둜 μ‚¬μš©ν•  값듀을 미리 μ„ μ–Έν•˜μ—¬ μ‚¬μš©ν•  λ•Œ μ‚¬μš©ν•˜λŠ” νŠΉλ³„ν•œ 데이터 νƒ€μž…μ΄λ‹€.

 

πŸ’‘ Enum μ‚¬μš© μ‹œ μž₯점

  • κΈ°μ‘΄ static final ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•œ μƒμˆ˜ μ„ μ–Έ λ°©μ‹μ—μ„œλŠ” ν•΄λ‹Ή μƒμˆ˜μ˜ κ°’λ§Œ λΉ„κ΅ν•˜κ²Œ λ˜λŠ” 반면, enum을 μ΄μš©ν•˜μ—¬ μƒμˆ˜λ₯Ό μ •μ˜ν•˜κ²Œ 되면 κ°’ 뿐만 μ•„λ‹ˆλΌ νƒ€μž…κΉŒμ§€λ„ μ²΄ν¬ν•˜κΈ° λ•Œλ¬Έμ— νƒ€μž…μ˜ μ•ˆμ „ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•  μˆ˜μžˆλ‹€.
  • κΈ°μ‘΄ μƒμˆ˜ μ„ μ–Έ 방식을 μ‚¬μš©ν•˜λŠ” μ½”λ“œμ—μ„œλŠ” μƒμˆ˜κ°’μ΄ λ³€κ²½λ˜λŠ” 경우 ν•΄λ‹Ή μƒμˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” μ†ŒμŠ€μ½”λ“œλ„ λͺ¨λ‘ 재컴파일 ν•΄μ€˜μ•Ό ν•˜λŠ”λ° enum μƒμˆ˜λ₯Ό μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” 그럴 ν•„μš”κ°€ μ—†λ‹€.

πŸ’‘ κΈ°μ‘΄ μƒμˆ˜ μ„ μ–Έ 방법과 enum μƒμˆ˜ μ„ μ–Έ 방법 비ꡐ

//μ—΄κ±°ν˜• => μƒμˆ˜κ°’λ“€μ„ μ„ μ–Έν•˜λŠ” 방법
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}

πŸ’‘ μ—΄κ±°ν˜•μ—μ„œ μ‚¬μš©ν•˜λŠ” λ©”μ„œλ“œ

1) name() => μ—΄κ±°ν˜• μƒμˆ˜μ˜ 이름을 λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•œλ‹€.

2) ordinal() => μ—΄κ±°ν˜• μƒμˆ˜κ°€ μ •μ˜λœ μˆœμ„œκ°’μ„ λ°˜ν™˜ν•œλ‹€. (기본적으둜 0λΆ€ν„° μ‹œμž‘)

3) valueOf("μ—΄κ±°ν˜• μƒμˆ˜μ΄λ¦„"); => μ§€μ •λœ μ—΄κ±°ν˜•μ—μ„œ 'μ—΄κ±°ν˜•μƒμˆ˜μ΄λ¦„'κ³Ό μΌμΉ˜ν•˜λŠ” μ—΄κ±°ν˜• μƒμˆ˜λ₯Ό λ°˜ν™˜ν•œλ‹€.

 

πŸ’‘ CityλΌλŠ” μ—΄κ±°ν˜• 객체 μ‚¬μš©(기본값을 μ΄μš©ν•˜λŠ” μ—΄κ±°ν˜•)

- name() 을 μ‚¬μš©ν•˜μ—¬ μƒμˆ˜ 좜λ ₯κ³Ό

- ordinal() 을 μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜• μƒμˆ˜ μœ„μΉ˜κ°’μ„ λ°˜ν™˜ν•˜μ—¬  좜λ ₯ν•œλ‹€.

public class Main {
	public enum City { μ„œμšΈ, λΆ€μ‚°, λŒ€κ΅¬, κ΄‘μ£Ό, λŒ€μ „ };
	
	public static void main(String[] args) {
		City myCity1;//μ—΄κ±°ν˜• μƒμˆ˜ 객체 λ³€μˆ˜ μ„ μ–Έ
		City myCity2;
		
//		City enumμ—μ„œ 'μ„œμšΈ' 데이터λ₯Ό κ°€μ Έμ˜¨λ‹€.
		myCity1 = City.valueOf("μ„œμšΈ");
//		μ—΄κ±°ν˜• 객체 λ³€μˆ˜μ— κ°’ μ €μž₯ν•˜κΈ°
		myCity2 = City.λΆ€μ‚°;
		
		
		System.out.println("myCity1 : " + myCity1.name());
		System.out.println("myCity1의 oardinal : " + myCity1.ordinal());
		System.out.println();
		
		System.out.println("myCity2 : " + myCity2.name());
		System.out.println("myCity2의 oardinal : " + myCity2.ordinal());
		System.out.println();
	}
}

πŸ’‘ μ—΄κ±°ν˜• 객체 κ°„ 비ꡐ

public class Main {
	public enum City { μ„œμšΈ, λΆ€μ‚°, λŒ€κ΅¬, κ΄‘μ£Ό, λŒ€μ „ };
	
	public static void main(String[] args) {
		City city = City.λŒ€κ΅¬;
		
		System.out.println("λŒ€κ΅¬μ™€ λŒ€μ „μ΄ 같은가? true/false : " + (city == City.λŒ€μ „));
		System.out.println("λŒ€κ΅¬μ™€ λŒ€κ΅¬κ°€ 같은가? true/false : " + (city == City.λŒ€κ΅¬));
		
		System.out.println("λŒ€κ΅¬μ™€ λŒ€κ΅¬ 비ꡐ => " + city.compareTo(City.λŒ€κ΅¬));
		System.out.println("λŒ€κ΅¬μ™€ μ„œμšΈ 비ꡐ => " + city.compareTo(City.μ„œμšΈ));
		System.out.println("λŒ€κ΅¬μ™€ λŒ€μ „ 비ꡐ => " + city.compareTo(City.λŒ€μ „));
	}
}

 

 

πŸ’‘ 데이터 값을 μž„μ˜λ‘œ μ§€μ •ν•œ μ—΄κ±°ν˜• Season 객체 μ„ μ–Έ

데이터 값을 정해쀄 κ²½μš°μ—λŠ” μƒμ„±μžλ₯Ό λ§Œλ“€μ–΄μ„œ κ΄„ν˜Έμ†μ˜ 값이 λ³€μˆ˜μ— μ €μž₯λ˜λ„λ‘ ν•œλ‹€.

- valueOf λ₯Ό μ¨μ„œ κ°€μ Έμ˜€λŠ” 방법과 직접 μ—΄κ±°ν˜• μƒμˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 μΆ”μΆœν•˜λŠ” 방법이 μžˆλ‹€.

public class Main {
	public enum Season {
		λ΄„("3μ›”λΆ€ν„° 5μ›”κΉŒμ§€"),
		여름("6μ›”λΆ€ν„° 8μ›”κΉŒμ§€"),
		가을("9μ›”λΆ€ν„° 11μ›”κΉŒμ§€"),
		겨울("12μ›”λΆ€ν„° 2μ›”κΉŒμ§€");
		
//		κ΄„ν˜Έμ†μ˜ 값이 μ €μž₯될 λ³€μˆ˜ μ„ μ–Έ
		private String str;
		
//		μƒμ„±μž λ§Œλ“€κΈ°(μ—΄κ±°ν˜•μ˜ μƒμ„±μžλŠ” μ œμ–΄μžκ°€ λ¬΅μ‹œμ μœΌλ‘œ 'private'이닀.)
		Season(String data){//private Season(String data){ 와 κ°™λ‹€.
			str = data;
		}
		
//		값을 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œ μž‘μ„±
		public String getStr() {
			return str;
		}
	}
	
	public static void main(String[] args) {
		Season ss1 = Season.valueOf("여름");
		Season ss2 = Season.가을;
		
		System.out.println("Season ss1 is name() : " + ss1.name());
		System.out.println("Season ss1 is ordinal() : " + ss1.ordinal());
		System.out.println("Season ss1 is get() : " + ss1.getStr());
		System.out.println("β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– ");
		System.out.println("Season ss2 is name() : " + ss2.name());
		System.out.println("Season ss2 is ordinal() : " + ss2.ordinal());
		System.out.println("Season ss2 is get() : " + ss2.getStr());
		
	}
}

 

πŸ’‘ μ—΄κ±°ν˜• Season 객체 λ‚΄ μ—΄κ±°ν˜• μƒμˆ˜ 데이터듀을 λ°°μ—΄λ‘œ 가져와 좜λ ₯

public class Main {
	public enum Season {
		λ΄„("3μ›”λΆ€ν„° 5μ›”κΉŒμ§€"),
		여름("6μ›”λΆ€ν„° 8μ›”κΉŒμ§€"),
		가을("9μ›”λΆ€ν„° 11μ›”κΉŒμ§€"),
		겨울("12μ›”λΆ€ν„° 2μ›”κΉŒμ§€");
		
//		κ΄„ν˜Έμ†μ˜ 값이 μ €μž₯될 λ³€μˆ˜ μ„ μ–Έ
		private String str;
		
//		μƒμ„±μž λ§Œλ“€κΈ°(μ—΄κ±°ν˜•μ˜ μƒμ„±μžλŠ” μ œμ–΄μžκ°€ λ¬΅μ‹œμ μœΌλ‘œ 'private'이닀.)
		Season(String data){//private Season(String data){ 와 κ°™λ‹€.
			str = data;
		}
		
//		값을 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œ μž‘μ„±
		public String getStr() {
			return str;
		}
	}
	
	public static void main(String[] args) {
		Season[] enumArr = Season.values();
		
		for(int i = 0 ; i < enumArr.length ; i++) {
			System.out.println(enumArr[i].name() + " : " + enumArr[i].getStr());
		}
		System.out.println();
	}
}