level up 과정 [JAVA]

63. enum 클래스의 사용과 이해

enum : 열거형 (JDK 1.5 ↑)

 
  • 클래스처럼 보이게 하는 상수
  • 서로 관련 있는 상수들을 모아 심볼릭한 명칭의 집합으로 정의한 것
  • Enum 클래스형을 기반으로 한 클래스형 선언
  • 새로운 열거형을 선언하면, 내부적으로 Enum 클래스형 기반의 새로우누 클래스형이 만들어짐.
1. 열거형 선언하기

1) 하나의 java파일로 만들어서 선언하기

<Type.java>
public enum Type {
    WALKING, RUNNING, TRACKING, HIKING
}
<Shoes.java>
public class Shoes {
    public String name;
    public int size;
    public Type type;
}

2) 클래스 안에서 선언하기

<Shoes.java>
public class Shoes {
    public String name;
    public int size;
    public enum Type {
        WALKING, RUNNING, TRACKING, HIKING   
    }
}

3) 클래스 밖에서 선언하기

<Shoes.java>
enum Type {
    WALKING, RUNNING, TRACKING, HIKING
}
public class Shoes {
    public String name;
    public int size;
    public Type type;
}
열거된 순서에 따라 0 부터 순서값을 가짐. 차례대로 증가함.
enum 열거형으로 지정된 상수는 대문자 사용.
마지막 끝에 세미콜론(;)을 붙이지 않음.
2. 사용하기
<Shoes.java>
enum Type {
    WALKING, RUNNING, TRACKING, HIKING
}
public class Shoes {
    public String name;
    public int size;
    public Type type;
    
    public static void main(String[] qrgs) {
        Shoes shoes = new Shoes();
        
        shoes.name = "나이키";
        shoes.size = 230;
        shoes.type = Type.RUNNING;
        
        System.out.plintln("신발 이름 = " + shoes.name);
        System.out.plintln("신발 사이즈 = " + shoes.size);
        System.out.plintln("신발 종류 = " + shoes.type);
    }
}
# 결과
신발 이름 = 나이키
신발 사이즈 = 230
신발 종류 = RUNNING
3. 메소드

1) values() : 열거된 모든 원소를 배열에 담아 순서대로 반환

enum Type {
    WALKING, RUNNING, TRACKING, HIKING
}
public class Shoes {
    public String name;
    public int size;
    public Type type;
    
    public static void main(String[] args) {
        for(Type type : Type.values()) {
            System.out.println(type);
        }
    }
}
 # 결과
WALKING
UNNING
TRACKING
HIKING

2) ordinal() : 원소에 열거된 순서를 정수 값으로 반환

enum Type {
    WALKING, RUNNING, TRACKING, HIKING
}
public class Shoes {
    public String name;
    public int size;
    public Type type;
    
    public static void main(String[] args) {
        Shoes shoes = new Shoes();
        
        shoes.name = "나이키";
        shoes.size = 230;
        shoes.type = Type.RUNNING;
        
        System.out.println(shoes.type.ordinal());
        
        Type tp = Type.HIKING;
        
        System.out.println(tp.ordinal());
    }
}
 # 결과
1
3

3) valueOf() : 매개변수로 주어진 String과 열거형에서 일치하는 이름을 갖는 원소를 반환
(주어진 String과 일치하는 원소가 없는 경우 IllegalArgumentException 예외 발생)

enum Type {
    WALKING, RUNNING, TRACKING, HIKING
}
public class Shoes {
    
    public static void main(String[] args) {
        Type tp1 = Type.WALKING;
        Type tp2 = Type.valueOf("WALKING");
        
        System.out.println(tp1);
        System.out.println(tp2);
    }
}
 # 결과
WALKING
WALKING
<값 가져오는 방법>

* enum 형 객체를 만들어서 값 가져오기
ex) Type.WALKING
* valueOf() 메소드를 이용해서 가져오기
ex) Type.valueOf("WALKING");
4. 열거형 상수를 다른 값과 연결하기
enum Type {
    // 상수("연결할 문자")
    WALKING("워킹화"), RUNNING("러닝화")
    , TRACKING("트래킹화"), HIKING("등산화")
    
    final private String name;
    
    private Type(Stirng name) { //enum에서 생성자 같은 역할
        this.name = name;
    }
    public String getName() { // 문자를 받아오는 함수
        return name;
    }
}
public class Shoes {
    public static void main(String[] args) {
        for(Type type : Type.values()){
            System.out.println(type.getName());
        }
    }
}
# 결과
워킹화
러닝화
트래킹화

등산화
5. 클래스의 static final 이용해서 열거형 선언하기
class Type {
    static final String WALKING = "워킹화";
    static final String RUNNING = "러닝화";
    static final String TRACKING = "트래킹화";
    static final String HIKING = "등산화";
}

public class Shoes {
    public static void main(String[] args) {
        String w = Type.WALKING;
        System.out.println(w);
    }
}
# 결과
워킹화

댓글

댓글 본문
  1. 감사합니다. 도움이 되었어요!
    대화보기
    • 열거형으로 연결하기에서
      Stirng -> String 오타 있어요.
    • jwkim
      예제에 오류가 있습니다

      [4. 열거형 상수를 다른 값과 연결하기] 이 예제에서
      열거형 상수관련 값을 생성자를 통해서 연결시키려면 열거한 상수 끝에 ; 을 붙여야 합니다
      ~~ , HIKING("등산화");
      이렇게요
    • 열정하나
      와우 감사합니다!
    • Brad Lee
      enum을 배우면서 부족한 부분은 여기서 많이 배웠습니다. 감사합니다.
    • 본질
      Enum에 관해 많이 배웠습니다. 감사합니다.

      아 그리고 4. 열거형 상수를 다른 값과 연결하기 부분에서

      세미콜론 뒤에 끝에 안붙이면 컴파일 오류가 납니다.

      세미콜론 붙이니까 잘됩니다.

      상수를 다른 값과 연결할 때는 세미콜론을 붙이는 것으로 이해하겠습니다.

      (무명님 그리 중요한 오타도 아니고만ㅋㅋ)
      대화보기
      • 무명
        새로운 열거형을 선언하면, 내부적으로 Enum 클래스형 기반의 새로우누 클래스형이 만들어짐
        => 오타 있어서 올립니다.
        => 새로운 열거형을 선언하면, 내부적으로 Enum 클래스형 기반의 새로운 클래스형이 만들어짐
      • asdasd