티스토리 뷰

개발/Java Study

11주차 : Enum

박비버 2021. 2. 21. 21:50

1. enum 정의하는 방법

  • 값 뿐만 아니라 타입 까지 관리한다
  • 열거형 상수간의 비교에는 '==' 사용 가능
  • '<', '>' 비교연산자는 사용할 수 없고, compareTo() 는 사용 가능
enum 열거형이름 { 상수명1, 상수명1, ...}
class Card {
    enum Kind {CLOVER, HEART, DIAMOND, SPADE}
    enum Value {TWO, THREE, FOUR}
    
    final Kind kind;
    final Value value;
}
if(Card.Kind.CLOVER == Card.Value.TWO) // false 같은 값이지만 타입이 다름
  • 열거형 상수의 이름 옆에 원하는 값을 적어주면 됨
  • 열거형 상수를 모두 정의한 다음에 다른 멤버들을 추가해야 함, 상수들 마지막에 ';'
enum Direction { EAST(1), SOUTH(5), WEST(-1), NORTH(10) }
enum Direction {
    EAST(1), SOUTH(5), WEST(-1), NORTH(10);
    
    private final int value;
    Direction(int value) { this.value = value; }
    public int getValue() { return value; }
}
  • 열거형 상수에 여러 값을 지정할 수도 있음
enum Direction {
    EAST(1,">"), SOUTH(2,"V"), WEST(3,"<"), NORTH(4,"^");
    
    private fianl int value;
    private final String symbol;
    
    Direction(int value, String symbol) {
        this.value = value;
        this.symbol = symbol;
    }
    
    public int getValue() { return value; }
    public String getSymbol() { return symbol; }
}
  • 열거형에 추상 메서드를 추가 할 수 있음
enum Transportation { 
	BUS(100)      { int fare(int distance) { return distance*BASIC_FARE;}},
	TRAIN(150)    { int fare(int distance) { return distance*BASIC_FARE;}},
	SHIP(100)     { int fare(int distance) { return distance*BASIC_FARE;}},
	AIRPLANE(300) { int fare(int distance) { return distance*BASIC_FARE;}};

	protected final int BASIC_FARE; // protected로 해야 각 상수에서 접근가능
	
	Transportation(int basicFare) { // private Transportation(int basicFare) {
		BASIC_FARE = basicFare;
	}

	public int getBasicFare() { return BASIC_FARE; }

	abstract int fare(int distance); // 거리에 따른 요금 계산
}

 

2. enum이 제공하는 메소드 (values()와 valueOf())

  • static E values() : 열거형의 모든 상수를 배열에 담아 반환
  • int ordinal() : 열거형 상수가 정의된 순서를 정수로 반환, 0부터 시작
  • String name() : 열거형 상수의 이름을 문자열로 반환
  • T valueOf() : 지정된 열거형에서 name과 일치하는 열거형 상수를 반환
enum Direction {EAST, SOUTH, WEST, NORTH}

Direction[] dArr = Direction.values();

for (Direction d : dArr)
    System.out.printf("%s=%d%n", d.name(), d.ordinal());
    
System.out.println(Direction.valueOf("WEST"));

 

3. java.lang.Enum

  • 모든 열거형의 조상
  • 미리 정의해둔 메서드를 활용할 수 있게함
  • Class<E> getDeclaringClass() : 열거형의 Class 객체를 반환
  • name(), ordinal(), valueOf() 도  Enum 에 정의되어 있음

 

 

4. EnumSet

  • 열거형 타입과 함께 사용하기 위한 Set 구현체
  • 모든 요소는 단일 열거형 타입이어야 함
  • null은 허용되지 않음
public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) 비어있는 enum set을 생성
public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType) 매개변수로 받은 타입의 모든 요소(열거형 상수들)를 포함하는 enum set 생성
public static <E extends Enum<E>> EnumSet<E> copyOf(EnumSet<E> s) 매개변수로 받은 EnumSet과 동일한 타입을 사용하여 동일한 요소를 포함하는 enum set 생성
public static <E extends Enum<E>> EnumSet<E> copyOf(Collection<E> c) 매개변수로 받은 Collection으로 초기화 된 enum set 생성
public static <E extends Enum<E>> EnumSet<E> complementOf(EnumSet<E> s) 매개 변수의 EnumSet<E> s 에 포함되어 있지 않은 요소들을 포함하는(차집합) enum set 생성
public static <E extends Enum<E>> EnumSet<E> of(E e1) 매개변수로 받은 요소를 포함하는 열거형 집합을 만듦
public static <E extneds Enum<E>> EnumSet<E> range(E from, E to) 매개변수 from과 to의 범위의 모든 요소를 포함하는 enum set 생성, from, to 포함

 

출처 :

자바의 정석, 남궁 성 지음 

parkadd.tistory.com/50

 

'개발 > Java Study' 카테고리의 다른 글

13주차 : I/O  (0) 2021.03.03
12주차 : 애노테이션  (0) 2021.02.24
10주차 : 멀티쓰레드 프로그래밍  (0) 2021.02.20
9주차 : 예외 처리  (0) 2021.02.15
8주차 : 인터페이스  (0) 2021.02.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함