Enum

๊ธฐ๋ณธ์ ์œผ๋กœ c๋‚˜ c++์˜ enum๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํด๋ž˜์Šค๋กœ JDK 1.5์ดํ›„์— ์ƒ๊ธด ํด๋ž˜์Šค์ด๋‹ค.

c์–ธ์–ด์˜ C99 ์ด์ „์—๋Š” booleanํƒ€์ž…์„ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ณ ๋Š” ํ–ˆ์—ˆ๋‹ค.

typedef enum _boolean {
    FALSE,
    TRUE
} boolean;

#define FALSE 0
#define TRUE 1

Java์—์„œ์˜ Enum ํŠน์ง•

Enum ๋น„๊ต์‹œ์— ๊ฐ’์ด ์•„๋‹Œ ํƒ€์ž…๊นŒ์ง€๋„ ์ฒดํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  Enum์˜ ์ƒ์ˆ˜๊ฐ’์ด ์žฌ์ •์˜ ๋˜์–ด๋„ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๋Š”๋‹ค.

enum ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

enum Money { DOLLAR, WON, POUND, EURO, YEN, YUAN }

enum ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •์˜๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ณ  ์ •์˜๋ฅผ ์–ด๋””์— ํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜๋ฅผ ํ•ด๋ณด์ž๋ฉด 3๊ฐ€์ง€์ •๋„๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

1. ๋ณ„๋„์˜ Java ํŒŒ์ผ๋กœ ์ •์˜

[Money.java]

public enum Money {
    DOLLAR, WON, POUND, EURO, YEN, YUAN
}

[example.java]

public class example {
    public static void main(String[] args) {
        Money dollar = Money.DOLLAR;
        System.out.println(dollar);
    }
}
enum

2. ํด๋ž˜์Šค ์•ˆ์— ์ •์˜

public class example {
    public enum Money {
        DOLLAR, WON, POUND, EURO, YEN, YUAN
    }
    public static void main(String[] args) {
        Money dollar = Money.DOLLAR;
        System.out.println(dollar);
    }
}
in

3. ํด๋ž˜์Šค ๋ฐ–์— ์ •์˜

enum Money {DOLLAR, WON, POUND, EURO, YEN, YUAN}

public class example {
    public static void main(String[] args) {
        Money dollar = Money.DOLLAR;
        System.out.println(dollar);
    }
}
out

์ •์˜ ์œ„์น˜์— ๋”ฐ๋ผ enum๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ์œ„์น˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

enum ์‚ฌ์šฉ

Money.DOLLAR์™€ ๊ฐ™์ด Enum์ด๋ฆ„.์ƒ์ˆ˜๋ช…์œผ๋กœ ์‚ฌ์šฉ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Money money = Money.DOLLAR์™€ ๊ฐ™์ด ๋ณ€์ˆ˜์— ํ• ๋‹น ํ•ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

#include <stdio.h>

enum Money { DOLLAR, WON, POUND, EURO, YEN, YUAN }

int main() {
    enum Money dollar = DOLLAR;
    enum Money won = WON;

    if (dollar == 0) {
        printf("์ถœ๋ ฅ1");        //์ถœ๋ ฅ
    }
    if (won > dollar) {
        printf("์ถœ๋ ฅ2");        //์ถœ๋ ฅ
    }
    return 0;
}

C์˜ enum์€ ๊ฐ ์ƒ์ˆ˜๊ฐ€ intํ˜•์œผ๋กœ ์ €์žฅ๋˜์–ด ์‚ฐ์ˆ ์—ฐ์‚ฐ๋„ ๊ฐ€๋Šฅํ•˜๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ์ˆ˜๋ฆฌํ„ฐ๋Ÿด๊ณผ ๋น„๊ตํ•ด๋„ ๊ฐ™๊ฒŒ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ๋„ ์ƒ๊ธด๋‹ค.

 public class example {
        private final static int DOLLAR = 0;
        private final static int WON = 1;
        private final static int POUND = 2;
        private final static int EURO = 3;
        private final static int YEN = 4;

        public static void main(String[] args) {
            System.out.println(DOLLAR == 0);
        }
    }

Enum์ด ์—†์„ ๋•Œ Java์—์„œ๋„ ์ด์™€ ๋น„์Šทํ•˜๊ฒŒ class์— private final static int๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์ˆ˜๊ฐ’์„ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์€ ๊ฐ€๋…์„ฑ์—๋„ ์ข‹์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜๋ช…์ด ๊ฒน์น  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์ƒ์ˆ˜๋ฆฌํ„ฐ๋Ÿด๊ณผ ๋น„๊ต๊ฐ€ ๋œ๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.

public class example {

    public static void main(String[] args) {
        Money dollar = Money.DOLLAR;
        Money won = Money.WON;

        System.out.println(dollar > won);   //error
        System.out.println(dollar == 0);    //error
    }
}

Java์˜ Enum์€ ๊ฐ ์ƒ์ˆ˜๊ฐ€ ์ƒ์ˆ˜ ๊ทธ ์ž์ฒด๋กœ์จ ์ž‘๋™์„ ํ•˜๊ณ  ์ž๋ฃŒํ˜•์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๋น„๊ตํ•˜๋ ค๊ณ  ํ•˜๋ฉด compile error๊ฐ€ ๋œฌ๋‹ค.

์ƒ์ˆ˜์— ๋‹ค๋ฅธ ๊ฐ’ ์ถ”๊ฐ€

enum Money {
    DOLLAR("๋‹ฌ๋Ÿฌ"),
    WON("์›"),
    POUND("ํŒŒ์šด๋“œ"),
    EURO("์œ ๋กœ"),
    YEN("์—”"),
    YUAN("์œ„์•ˆ");

    private String hanguelName;

    private Money(){}
    private Money(String hanguelName){this.hanguelName = hanguelName;}

    public String getHanguelName(){
        return hanguelName;
    }
}

public class example {

    public static void main(String[] args) {
        Money dollar = Money.DOLLAR;
        Money won = Money.WON;

        System.out.println(dollar.getHanguelName());
        System.out.println(won.getHanguelName());

    }
}

ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ’์„ ํ• ๋‹น ํ•ด์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, getter๋ฅผ ์ •์˜ํ•ด์„œ ๊ฐ’์„ ์ฐธ์กฐ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด๋•Œ ์ƒ์„ฑ์ž๋Š” PRIVATE ์†์„ฑ์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

enumํƒ€์ž…์€ ๊ณ ์ •๋œ ์ƒ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์ด๋ฏ€๋กœ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ชจ๋“  ๊ฐ’์„ ์•Œ๊ณ  ์žˆ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ๋™์ ์œผ๋กœ ๊ฐ’์„ ์ •ํ•ด์ค„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ์ž๋ฅผ private๋กœ ์„ค์ •ํ•ด์•ผ ํ•˜๊ณ  final๊ณผ ๋‹ค๋ฆ„์ด ์—†์–ด์ง„๋‹ค.

enum์ด ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ

values()

Enum์˜ ๋ชจ๋“  ์ƒ์ˆ˜๋ฅผ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜

 public class example {
    public static void main(String[] args) {
        for(Money money : Money.values()){
            System.out.println(money);      //์ฐจ๋ก€๋Œ€๋กœ ์ถœ๋ ฅ
        }
        System.out.println(Money.values()[1]); //WON ์ถœ๋ ฅ
        System.out.println(Money.values() instanceof Object); //true
    }
 }

Money[]ํ˜•ํƒœ์˜ ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜์ด ๋œ๋‹ค.

valuesOf()

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Stringํ˜•์ด ์˜ค๋ฉฐ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์ƒ์ˆ˜๋ฅผ ์ฐพ์•„ ์ƒ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ ํ•˜๊ณ  ์—†๋‹ค๋ฉด IllegalArgumentException ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

 public class example {
    public static void main(String[] args) {
        System.out.println(Money.valueOf("WON"));   //WON ์ถœ๋ ฅ
        System.out.println(Money.valueOf("Rupee")); //IllegalArgumentException error
    }
 }

ordianal()

enum ์ƒ์ˆ˜๊ฐ€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ •์˜๋œ ์ˆœ์„œ๋ฅผ ๋ฐ˜ํ™˜(int)ํ•˜๋Š” ํ•จ์ˆ˜

public class example {
    public static void main(String[] args) {
        Money dollar = Money.DOLLAR;

        System.out.println(dollar.ordinal()); //0
    }
 }

ordinal์€ Enum์„ ์ •์˜ํ•œ ์ˆœ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— c๋•Œ์ฒ˜๋Ÿผ ์ƒ์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž.

ordinal์€ EnumSet์ด๋‚˜ EnumMap, JPA์—์„œ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด๋ถ€ ํ•จ์ˆ˜๋กœ ๊ฐœ๋ฐœ์ž๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉํ• ์ผ์ด ์—†๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

์ •์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ๊ฐ’์ด ์ถ”๊ฐ€ ๋˜๋ฉด ์ „ํ˜€ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋Ÿฐ ์ด์œ ๋กœ Spring Data JPA์—์„œ default๋Š” ordinal์ด๊ธฐ ๋•Œ๋ฌธ์— Enum์ˆœ์„œ๊ฐ€ ๋ฐ”๋€๋‹ค๋ฉด ๊ฐ’์ด ์•„์˜ˆ ๋‹ฌ๋ผ์ง„๋‹ค. ์ปฌ๋Ÿผ์œผ๋กœ Enum์„ ์‚ฌ์šฉํ•˜๋ฉด @Enumerated๋ฅผ ์ด์šฉํ•ด String์œผ๋กœ ์‚ฌ์šฉํ•˜์ž.

java.lang.Enum

enum ํด๋ž˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ java.lang.Enum๋ผ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›๊ณ  ์žˆ๊ณ  ์ด๋Š” Object๋ฅผ ์ƒ์†๋ฐ›๊ณ  Comparable๊ณผ Serializable๋ฅผ implementsํ•˜๊ณ  ์žˆ๋‹ค.

protected Enum(String name, int ordinal) {
        this.name = name;
        this.ordinal = ordinal;
}

protectedํ˜•์œผ๋กœ ์ƒ์„ฑ์ž๋ฅผ ํ•˜๋‚˜ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ์ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด enum ํ‚ค์›Œ๋“œ์— ๋ฐ˜์‘ํ•˜์—ฌ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

public String toString() {
    return name;
}

์ด ํด๋ž˜์Šค ๋‚ด์— ์žˆ๋Š” public ๋ฉ”์†Œ๋“œ ์ค‘ Overrideํ•ด์„œ ์‚ฌ์šฉํ• ๋งŒํ•œ ๋ฉ”์„œ๋“œ๋กœ ๊ธฐ๋ณธ์€ ์ƒ์ˆ˜ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, enum์„ ์ƒ์„ฑ์‹œ ์ถ”๊ฐ€ ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด ์ด๋ฅผ Overrideํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

์ปดํŒŒ์ผ ์‹œ์˜ ๊ฐ์ฒด ์ƒ์„ฑ

final class Money extends Enum<Money> {
	private Money(String name, int ordinal) {
		super(name, ordinal);
	}

	public static final Status DOLLAR = new Status("DOLLAR", 0);
	public static final Status WON = new Status("WON", 1);
	public static final Status POUND = new Status("POUND", 2);
    public static final Status EURO = new Status("EURO", 3);
    public static final Status YEN = new Status("YEN", 4);


	private static final Status ENUM$VALUES[] = { DOLLAR, WON, POUND, EURO, YEN };
}

enum ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ด๊ฑฐํ˜•์„ ์ƒ์„ฑํ•˜๋ฉด ์ปดํŒŒ์ผ ์‹œ์— ์œ„์™€ ๊ฐ™์ด ์ •์˜๊ฐ€ ๋œ๋‹ค.

EnumSet

Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„

EnumSet์€ abstractํ‚ค์›Œ๋“œ๊ฐ€ ์•ž์— ๋ถ™์–ด ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  of()์™€ ๊ฐ™์€ ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” noneOf(class<E> elementType) ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜์—ฌ ์ด๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {
        Enum<?>[] universe = getUniverse(elementType);
        if (universe == null)
            throw new ClassCastException(elementType + " not an enum");

        if (universe.length <= 64)
            return new RegularEnumSet<>(elementType, universe);
        else
            return new JumboEnumSet<>(elementType, universe);
    }

noneOf() ๋ฉ”์„œ๋“œ๋ฅผ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ EnumSet ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ด๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋“ค์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ๋‹ค.

์ด ๋‘˜ ํด๋ž˜์Šค ๋ชจ๋‘ private์†์„ฑ์ด๋ฏ€๋กœ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

  • ์‚ฌ์šฉํ•  ํฌ๊ธฐ์— ๋งž๊ฒŒ ์ ํ•ฉํ•œ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๊ณจ๋ผ ์ค€๋‹ค.

  • Enum์˜ ์ƒ์ˆ˜๋“ค์„ ํ•˜๋‚˜ํ•˜๋‚˜ Set์— ๋‹ด๋Š” ํ–‰์œ„๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

  • EnumSet ๋‚ด๋ถ€ ํ‘œํ˜„์€ ๋น„ํŠธ ๋ฒกํ„ฐ๋กœ ํ‘œํ˜„๋œ๋‹ค. (์ƒ์ˆ˜ ๊ฐœ์ˆ˜๊ฐ€ 64๊ฐœ ์ดํ•˜๋ผ๋ฉด long๋ณ€์ˆ˜ ํ•˜๋‚˜๋กœ ํ‘œํ˜„ํ•œ๋‹ค.)

  • Enum ์ƒ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์ˆœ์„œ, ์ฆ‰ ordinal() ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜๋œ ์ˆœ์„œ๋กœ ์ˆœํšŒํ•œ๋‹ค.

  • EnumSet iterator๋Š” ์•ฝํ•œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜์—ฌ ConcurrentModificationException์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

  • null ์š”์†Œ๋Š” ์‚ฝ์ž…์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋™๊ธฐํ™”๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋ฉ”์„œ๋“œ

  • EnumSet.allOf(Class elementType) : ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํฌํ•จํ•œ EnumSet์„ ๋ฐ˜ํ™˜

  • EnumSet.noneOf(Class elementType) : ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์˜ ๋น„์–ด์žˆ๋Š” EnumSet๋ฐ˜ํ™˜

  • EnumSet.of(E e1, E e2 ...) : ์ง€์ •ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•œ EnumSet์„ ๋ฐ˜ํ™˜

  • ๊ทธ ์™ธ java.util.AbstractSet, java.util.AbstractCollection, java.lang.Object, java.util.Set์œผ๋กœ ๋ถ€ํ„ฐ ๋ฉ”์„œ๋“œ๋“ค์„ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋‹ค.

    • ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ equals(),hashCode() ,add(),remove(),size(), toArray() => Object[] ๋ฐ˜ํ™˜, iterator()๋“ฑ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

EnumMap

Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„

  • Enum์„ Key๋กœ ์ด์šฉํ•˜๋Š” Map์ด๋‹ค.

  • Enum ์ƒ์ˆ˜๋กœ null์„ ๊ฐ–์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— null์„ key๋กœ ๊ฐ–์ง€ ๋ชปํ•œ๋‹ค.

  • Enum์€ ์ •ํ•ด์ง„ ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹จ์ผ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹ฑํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ์žˆ์–ด ์„ฑ๋Šฅ์ด ์ข‹๋‹ค.

  • key์™€ value๊ฐ€ ๋ฐฐ์—ด๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.

  • EnumMap์˜ key๋Š” ordianl๋กœ ๊ด€๋ฆฌ ๋˜๊ธฐ ๋•Œ๋ฌธ์— iterator๋Š” ์•ฝํ•œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜์—ฌ ConcurrentModificationException์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

  • ๋™๊ธฐํ™”๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋ฉ”์„œ๋“œ

  • ์ƒ์„ฑ์ž : newํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  ์ผ๋ฐ˜ Map๋“ค๊ณผ ๋‹ค๋ฅด๊ฒŒ enum ํƒ€์ž…์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

    • Map<Money,Integer> map = new EnumMap<>(Money.class);

  • clear() : ๋ชจ๋“  ์š”์†Œ ์‚ญ์ œ

  • get(Object key) : key์— ํ•ด๋‹นํ•˜๋Š” value ๋ฆฌํ„ด

  • put(K key, V value) : map์— ๋ฐ์ดํ„ฐ ์ž…๋ ฅ

  • remove(Object key) : ํ•ด๋‹นํ•˜๋Š” key๊ฐ€ ์žˆ๋‹ค๋ฉด ์‚ญ์ œ

  • equals(Object object) : ๊ธฐ์ค€ Map๊ณผ ๊ฐ™์€์ง€ ๋น„๊ต

  • containsKey(Object key) / containsValue(Object value) : ํ•ด๋‹นํ•˜๋Š” key์™€ value ๊ฐ€ ์žˆ๋‹ค๋ฉด true ๋ฐ˜ํ™˜

  • size() : Map์˜ ์š”์†Œ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜

  • keySet() : Map์— ์žˆ๋Š” ๋ชจ๋“  key๋“ค์˜ Set view๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (๋ชจ๋“  key๋“ค์„ ๋ณด์—ฌ์ค€๋‹ค.)

  • values() : Map์— ์žˆ๋Š” value๋“ค์˜ Collection view๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (๋ชจ๋“  ๊ฐ’๋“ค์„ ๋ณด์—ฌ์ค€๋‹ค.)

์ถ”๊ฐ€ ๋‚ด์šฉ

type safety

Runtime์ด ์•„๋‹Œ Complieํƒ€์ž„์— ๋ฌธ์ œ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ JVM์€ ์ปดํŒŒ์ผํ• ๋•Œ, ํŠน์ • ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์•Œ ์ˆ˜ ์žˆ์œผ๋‚˜ RUN์‹œ์— ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌ ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

Enum์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜คํƒ€๋ฐฉ์ง€๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ณ , ์ปดํŒŒ์ผํƒ€์ž„์— ์—๋Ÿฌ๋ฅผ ์žก์•„์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋””๋ฒ„๊น…๋„ ์‰ฌ์›Œ์ง„๋‹ค.

Enum์—์„œ ๊ฐ’ ์…‹ํŒ… ํŒ

Enum์˜ ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์ค„ ๋•Œ 1,2,3๊ฐ™์ด ์ข์€ ์ˆซ์ž์˜ ๋ฒ”์œ„๊ฐ€ ์•„๋‹Œ 10,20,30 ๊ฐ™์ด ๋ฒ”์œ„๋ฅผ ๋‘๊ณ  ์„ ์–ธํ•ด์ฃผ์ž.

์–ธ์ œ ์–ด๋–ค์ด์œ ์—์„œ Enum์— ๊ฐ’์„ ์‚ฌ์ด์— ์ถ”๊ฐ€ ํ•ด์ค„์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


Reference

https://www.nextree.co.kr/p11686/

http://cris.joongbu.ac.kr/course/java/api/java/lang/Enum.html

https://javarevisited.blogspot.com/2014/03/how-to-use-enumset-in-java-with-example.html#axzz6kSbFjAwM

Last updated