Enums

μ—΄κ±°ν˜•(Enums)은 μ„œλ‘œ μ—°κ΄€λœ μƒμˆ˜λ“€μ˜ 집합을 μ •μ˜ν•  λ•Œ μ‚¬μš©ν•˜λŠ” 데이터 νƒ€μž…μœΌλ‘œ, νƒ€μž… μ•ˆμ „μ„±μ„ 보μž₯ν•˜κ³  μ½”λ“œμ˜ 가독성을 λ†’μ΄λŠ” 데 λͺ©μ μ΄ μžˆλ‹€.

Enum μ •μ˜μ™€ μ‚¬μš©

enum ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜•μ„ μ •μ˜ν•˜λ©°, 각 μƒμˆ˜λŠ” κ΄€λ‘€μ μœΌλ‘œ λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜λ©° μ‰Όν‘œλ‘œ κ΅¬λΆ„ν•œλ‹€.

enum Direction {
    EAST, SOUTH, WEST, NORTH
}

μ—΄κ±°ν˜• 비ꡐ와 ν™œμš©

μ—΄κ±°ν˜• μƒμˆ˜λŠ” JVM λ‚΄μ—μ„œ μœ μΌν•œ μΈμŠ€ν„΄μŠ€(μ‹±κΈ€ν„΄)μž„μ΄ 보μž₯λœλ‹€.

  • == μ—°μ‚°μž: μ°Έμ‘°κ°€ λ™μΌν•˜λ―€λ‘œ == μ—°μ‚°μžλ‘œ 비ꡐ κ°€λŠ₯

  • equals() λ©”μ„œλ“œ: Object의 equals()λ₯Ό μ˜€λ²„λΌμ΄λ“œν•˜λ©°, == 비ꡐ와 λ™μΌν•˜κ²Œ λ™μž‘

  • compareTo() λ©”μ„œλ“œ: Comparable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ©°, μ—΄κ±°ν˜• μƒμˆ˜κ°€ μ„ μ–Έλœ μˆœμ„œ(ordinal)λ₯Ό κΈ°μ€€μœΌλ‘œ 비ꡐ

  • 비ꡐ μ—°μ‚°μž: <, >와 같은 μ •μˆ˜ 비ꡐ μ—°μ‚°μžλŠ” μ‚¬μš© λΆˆκ°€λŠ₯

class Unit {

    int x, y;
    Direction direction;

    void moveIf(Direction direction) {
        if (direction == Direction.EAST) { // '==' μ—°μ‚°μž 비ꡐ ꢌμž₯
            x++;
        } else if (direction.equals(Direction.SOUTH)) { // equals()도 κ°€λŠ₯
            y--;
        } else if (direction.compareTo(Direction.NORTH) == 0) { // compareTo()도 μ‚¬μš© κ°€λŠ₯
            y++;
        }
    }

    void moveSwitch(Direction direction) {
        // switch λ¬Έμ—μ„œ case λ ˆμ΄λΈ”μ— 'Direction.EAST'κ°€ μ•„λ‹Œ 'EAST' μ‚¬μš©
        switch (direction) {
            case EAST:
                x++;
                break;
            case SOUTH:
                y--;
                break;
            case WEST:
                x--;
                break;
            case NORTH:
                y++;
                break;
        }
    }
}

μ—΄κ±°ν˜•κ³Ό 멀버 λ³€μˆ˜, λ©”μ„œλ“œ

μ—΄κ±°ν˜•μ€ 클래슀의 νŠΉμ„±μ„ κ°€μ§€λ―€λ‘œ, 멀버 λ³€μˆ˜, λ©”μ„œλ“œ, μƒμ„±μžλ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

  • μ—΄κ±°ν˜•μ˜ μƒμ„±μžλŠ” λ¬΅μ‹œμ μœΌλ‘œ private

    • publicμ΄λ‚˜ protected둜 μ„ μ–Έ λΆˆκ°€λŠ₯

    • μ—΄κ±°ν˜• μΈμŠ€ν„΄μŠ€λ₯Ό μž„μ˜λ‘œ μƒμ„±ν•˜λŠ” 것을 막기 μœ„ν•΄ μ œν•œ

  • μƒμˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ κ΄„ν˜Έ ()λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜κ³  κ°’ μ „λ‹¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ„ μ–Έ

μ—΄κ±°ν˜•κ³Ό λ‹€ν˜•μ„±

좔상 λ©”μ„œλ“œ ν™œμš©

μ—΄κ±°ν˜• 내뢀에 좔상 λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•˜κ³ , 각 μƒμˆ˜κ°€ 읡λͺ… 클래슀처럼 ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆλ‹€.

μΈν„°νŽ˜μ΄μŠ€μ™€ λžŒλ‹€ ν™œμš©

μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ³ , λžŒλ‹€ ν‘œν˜„μ‹μ„ μƒμ„±μžλ‘œ λ°›μ•„ μƒμˆ˜λ³„ λ™μž‘μ„ μ •μ˜ν•  μˆ˜λ„ μžˆλ‹€.

java.lang.Enum λ©”μ„œλ“œ

Java의 λͺ¨λ“  μ—΄κ±°ν˜•μ€ java.lang.Enum 클래슀λ₯Ό μƒμ†λ°›λŠ”λ‹€. 이 ν΄λž˜μŠ€λŠ” μ—΄κ±°ν˜•μ„ 닀루기 μœ„ν•œ μ—¬λŸ¬ μœ μš©ν•œ λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

λ©”μ„œλ“œ
μ„€λͺ…

T[] values()

λͺ¨λ“  μ—΄κ±°ν˜• μƒμˆ˜λ₯Ό λ°°μ—΄λ‘œ λ°˜ν™˜

int ordinal()

μ—΄κ±°ν˜• μƒμˆ˜μ˜ μˆœμ„œλ₯Ό λ°˜ν™˜

String name()

μ—΄κ±°ν˜• μƒμˆ˜μ˜ 이름을 λ¬Έμžμ—΄λ‘œ λ°˜ν™˜

Class getDeclaringClass()

μ—΄κ±°ν˜• μƒμˆ˜κ°€ μ •μ˜λœ μ—΄κ±°ν˜•μ˜ Class 객체λ₯Ό λ°˜ν™˜

String toString()

μ—΄κ±°ν˜• μƒμˆ˜μ˜ λ¬Έμžμ—΄ ν‘œν˜„μ„ λ°˜ν™˜(기본적으둜 name() λ°˜ν™˜)

μ—΄κ±°ν˜•μ˜ λ‚΄λΆ€ κ΅¬ν˜„

enum Direction { EAST, SOUTH }λŠ” λ‚΄λΆ€μ μœΌλ‘œ λ‹€μŒκ³Ό μœ μ‚¬ν•œ 클래슀둜 λ³€ν™˜λœλ‹€.

각 μ—΄κ±°ν˜• μƒμˆ˜λŠ” public static final둜 μ„ μ–Έλœ 자기 μžμ‹ μ˜ μΈμŠ€ν„΄μŠ€κ°€ λ˜μ–΄ JVM λ‚΄μ—μ„œ 각 μƒμˆ˜μ˜ μœ μΌμ„±(μ‹±κΈ€ν„΄)을 보μž₯ν•˜λ©°, == 비ꡐ가 κ°€λŠ₯ν•œ κ·Όκ±°κ°€ λœλ‹€.


EnumSetκ³Ό EnumMap

μžλ°” μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬λŠ” μ—΄κ±°ν˜•μ„ μœ„ν•΄ νŠΉλ³„νžˆ μ΅œμ ν™”λœ Setκ³Ό Map κ΅¬ν˜„μ²΄λ₯Ό μ œκ³΅ν•œλ‹€.

  • EnumSet

    • λ‚΄λΆ€μ μœΌλ‘œ λΉ„νŠΈ 벑터(bit vector) μ‚¬μš©

    • λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ 맀우 적고, HashSet보닀 μ›”λ“±νžˆ λΉ λ₯Έ μ„±λŠ₯을 제곡

  • EnumMap

    • λ‚΄λΆ€μ μœΌλ‘œ λ‹¨μˆœ 배열을 μ‚¬μš©ν•˜λ©°, μƒμˆ˜μ˜ ordinal() 값을 인덱슀둜 ν™œμš©

    • HashMap보닀 훨씬 λΉ λ₯΄κ³  νš¨μœ¨μ μ΄λ‹€.

참고자료

Last updated

Was this helpful?