본문 바로가기

자바(java)

Enum(Enumeration)

정의: 상수 선언 시 입력하는 값에 대한 범위를 제역하기 위한 자료형

 - 어떤 클래스가 상수로만 이루어져 있을 땐 반드시 클래스로 선언할 필요는 없다.

    -> 이럴 때, class를 enum이라고 선언하면 이 객체는 상수의 집합이다.

 

 - 생성방법

접근제한자 enum enum명{
        대문자enum상수명1, 대문자enum상수명2, ...;
}

 - 예제

public enum Animals {
	TIGER, LION, CAT, DOG;
}

valueOf( ), name( )

- valueOf( ): 문자열을 enum으로 전환

 - name( ): enum을 문자형으로 전환

public class MainEx {

	public static void main(String[] args) {
		// valueOf(): 문자열을 enum으로 만들어 줌.
		Animals tiger= Animals.valueOf("TIGER");
		System.out.println(tiger);
		
		// tiger -> eunm 자료형
		// Animals.TIGER -> enum 자료형
		System.out.println(Animals.TIGER.equals(tiger));
		
		// TIGER -> String 자료형
		System.out.println(tiger.equals("TIGER"));
		
		// name(): eunm을 문자형으로 만들어 줌.
		String name_tiger= tiger.name();
		System.out.println(name_tiger.equals("TIGER"));
	}
}
--------------Console----------------------------------
TIGER
true
false
true

 

ordinal( ): 전체 중에 해당 열거 객체가 몇 번째인지 알려준다.

import kr.co.tj.Animals;

public class MainEx {

	public static void main(String[] args) {

		int idx = Animals.CAT.ordinal();
		System.out.println(idx);

	}
}
------------------Console--------------------
2

 - 하지만 enum 상수 사이에 값을 추가하거나 이미 사용한 정수에 대응되는 새로운 enum 상수값을 사용할 수가 없는 단점이 있다

 

생성 예제(객체필드에 따로 저장)

 

public enum Numbers {
	TEN(10), TWENTY(20), THIRTY(30);
	
	private final int num;
	
    // 생성자를 만든 후 아래와 같이 설정
	private Numbers(int num) { // 접근제한자가 private!!   매개변수는 위의 값의 자료형
		this.num = num;  
	}

	public int getNum() {  // get메서드
		return num;
	}

}

활용 예제

public interface HeroSpec {
	// public static final은 생략(복습)
	int HERO_LEV_1_ATTACK_POWER = Numbers.TEN.getNum(); //Numbers enum의 Ten의 값을 가져온다.
	int HERO_LEV_2_ATTACK_POWER = Numbers.TWENTY.getNum();
	int HERO_LEV_3_ATTACK_POWER = Numbers.THIRTY.getNum();

}

 

메인메서드에 적용

public class Hero {
	
	private int attackPower;
	
	public Hero(int attackPower) {
		this.attackPower = attackPower;
	}
}
---------------------------------------------------------
public class MainEx {

	public static void main(String[] args) {
		
		// 자료형 주의!!
		int what = Numbers.TEN.getNum();
		System.out.println(what);
		
		String what1 = Numbers.TEN.name(); 
		System.out.println(what1);
        
		Hero hero = new Hero(HeroSpec.HERO_LEV_1_ATTACK_POWER);  // hero객체에 파워 부과
	}
}
------------------Console-------------------------------
10
TEN

 

 

Scanner, nextLine( )

 - 선언공식

Scanner 변수명 = new Scanner(System.in);
~~~~
sc.close();

 -  예제 (switch~case에서 enum 사용)

import kr.co.tj.Animals;

public class Test2 {
	
	public static void me1(String likeAnimal) {
		
		Animals what = Animals.valueOf(likeAnimal); 	// 문자열을 enum으로 바꿈
		
		switch (what) {
		case TIGER:
			System.out.println("호랑이 기운");
			break;
			
		case LION:
			System.out.println("사자의 눈물");
			break;
			
		case CAT:
			System.out.println("장화 신은 고양이");
			break;
			
		default:
			System.out.println("몰라");
			break;
		}
	}
}
--------------------------------------------------
import java.util.Scanner;

import kr.co.tj.Animals;

public class MainEx {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("좋아하는 동물을 대문자로 적으시오.");
		String likeAnimal = sc.nextLine();
		
		Test2.me1(likeAnimal);
		
		sc.close();
	}
}
----------------Console------------------------------------------
좋아하는 동물을 대문자로 적으시오.
CAT
장화 신은 고양이

 - Scanner(System.in): 콘솔 창 내에서 값을 입력받겠다

 - next() : 띄어쓰기(공백) 기준으로 데이터를 입력받는다.

 - nextLine() : 라인(한 줄) 기준으로 데이터를 입력받는다.

 - sc.close(): Scanner를 닫는다.

 

 

 

연습

1.

public class Test {
	enum Weapon{
		BOW("활"), SWORD("검"), GUN("총");
		
		private final String name;
		
		// 생성자 만든 후 아래같이 설정
		// 매개변수->위의 자료형
		// this.name = name;
		private Weapon(String name) {
			this.name = name;
		}
		
		// get메서드
		public String getName(){
			return name;
		}
	}
}
------------------------------------------------------------------------
public class MainEx {

	public static void main(String[] args) {
		
		// BOW 출력
		String what = Weapon.BOW.name(); //name -> enum안의 자료 가져오기
		System.out.println(what);
		
		// 검 출력
		what = Weapon.SWORD.getName();  //get메서드 -> enum안의 자료의 값 가져오기
		System.out.println(what);
	}
}
------------------Console------------------------------------------
BOW
검

 

2.

public enum Testa {
	PORK("돼기고기", "갈매기살"), BEEF("소고기", "소갈비살");
	
	private final String name1;
	private final String name2;
	
	private Testa(String name1, String name2) {
		this.name1 = name1;
		this.name2 = name2;
	}

	public String getName() {
		return name1+name2;
	}
}
----------------------------------------------------------------
public interface Meat {
	
	String KIND_OF_MEAT1 = Testa.PORK.getName();
	String KIND_OF_MEAT2 = Testa.BEEF.getName();
}
-----------------------------------------------------------------
public class MainEx {

	public static void main(String[] args) {
		
		String what = Testa.PORK.name();
		System.out.println(what);
		
		what = Testa.BEEF.getName();
		System.out.println(what);
	}
}
--------------------------Console----------------------------------
PORK
소고기소갈비살

 

 

'자바(java)' 카테고리의 다른 글

예외처리(Exception)  (1) 2023.03.13
내부클래스(Inner Class)  (0) 2023.03.13
람다식(Lambda)  (0) 2023.03.10
DTO(Data Transfer Object) 클래스  (0) 2023.03.09
인터페이스(Interface)  (0) 2023.03.09