티스토리 뷰

Java, JavaScript

[Java] enum 클래스

체봄 2019. 6. 14. 19:20

[enum 클래스]

: 연관된 상수들을 열거한 클래스

 

사용법:

enum 클래스명 {

      변수명1, 변수명2, …;

}

 

 

1. 생성자를 가질 수 있고 생성자의 접근 제어자는 private형만 가능하다.

2. 자동으로 생성자가 생성되지만, private형이므로 생성자를 통해 객체를 생성할 수 없다.

3. values 메소드를 호출하여 선언된 모든 상수를 반환할 수 있다.

 

 

ex)

enum Color {
	red, yellow, green, blue;

	Color() {	// private형 생성자
 		System.out.println("생성자 호출");
    }
}

enum 클래스를 이용해 간단하게 나타낸 코드를 풀어보면 다음과 같다.

class Color {
	public static final Color red = new Color();
    public static final Color yellow = new Color();
    public static final Color green = new Color();
    public static final Color blue = new Color();
    
    private Color() {
    	System.out.println("생성자 호출");
    }
}

실행결과>

생성자 호출
생성자 호출
생성자 호출
생성자 호출

 

enum 클래스 안에는 변수명만 적으면 되는데, 이는 실제로는 new를 이용해 객체를 생성하는 동작을 한다.

그러므로 선언한 변수의 개수만큼 생성자가 호출되어 "생성자 호출"이 4번 출력되는 것이다.

enum 클래스 내 변수는 모두 상수여야 하므로 'public static final' 키워드를 붙인다. (변수에 final 키워드를 붙이면 상수가 됨)

 

 

 

values() 메소드

: for-each문과 함께 사용하여 enum 클래스 내 변수들의 모든 상수 값을 저장하는 데에 쓰임

 

ex)

enum memberLevel {
	vip(30), gold(20), silver(10), bronze(5);
    
    int discount;
    
    private memberLevel(int discount) {		// 생성자
    	this.discount = discount;
    }
    
    public int getDiscount() {
    	return discount;
    }
}

public class EnumEx {
	public static void main(String[] args)
    {
      System.out.println("회원 등급 별 할인율");
      System.out.println("==================");

      for(memberLevel ml : memberLevel.values()) {	// for-each문과 함께 values 메소드 사용
          System.out.println(ml + " : " + ml.getDiscount() + "% 할인");
      }
    }
}

실행 결과>

vip : 30% 할인
gold : 20% 할인
silver : 10% 할인
bronze : 5% 할인

 

enum 클래스 변수명을 출력하면 해당 변수가 담고 있는 enum 클래스 내 상수명을 출력한다.

위 예제에서 ml를 출력했을 때 enum 클래스의 상수명 vip, gold, silver, bronze이 출력되었다.

for-each문에 의해 ml는 enum 클래스 내의 첫번째 상수부터 마지막 상수까지를 가리킨다.

 

반응형

'Java, JavaScript' 카테고리의 다른 글

[Java] Collections Framework - Collection(List, Set)  (0) 2019.06.18
[Java] Generic  (0) 2019.06.14
[Java] Wrapper 클래스  (0) 2019.06.14
[Java] Object 클래스의 기본 메소드  (0) 2019.06.14
[Java] 예외 처리 (try~catch, throws)  (0) 2019.06.07

댓글