๐Ÿ’ก ๋ชฉํ‘œ : ์ž๋ฐ”์˜ ์—ด๊ฑฐํ˜•์— ๋Œ€ํ•ด ํ•™์Šตํ•ด๋ณด์ž.

โšก๏ธ ๋ชฉ์ฐจ

  • enum ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • enum์ด ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ
  • java.lang.Enum
  • EnumSet

์‚ฌ์ „์— ์•Œ๋ฉด ์ข‹์€ ๊ฒƒ๋“ค

  1. ์—ด๊ฑฐ ํƒ€์ž…์ด๋ž€ ?
    ์ผ์ • ๊ฐœ์ˆ˜์˜ ์ƒ์ˆ˜ ๊ฐ’์„ ์ •์˜ํ•œ ๋‹ค์Œ, ๊ทธ ์™ธ์˜ ๊ฐ’์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ํƒ€์ž…์ด๋‹ค.
  2. ์—ด๊ฑฐ ํƒ€์ž…์ด ๋“ฑ์žฅํ•œ ๋ฐฐ๊ฒฝ โ†’ ๊ณผ๊ฑฐ ๋ฐฉ์‹์˜ ๋‹จ์ ์„ ๋ณด์™„
    JDK 5 ์ด์ „์— ๋“ฑ์žฅํ•œ ์—ด๊ฑฐ ๋ฐฉ๋ฒ• โ†’ "์ •์ˆ˜ ์—ด๊ฑฐ ํƒ€์ž…"
    : public static final์„ ํ†ตํ•ด ๋Œ€ํ‘œํ•˜๋Š” ๋ฌธ์ž๋ฅผ ์ •์ˆ˜ ํƒ€์ž…์˜ ์ƒ์ˆ˜๋กœ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‚ฌ์šฉ์˜ˆ์‹œ

public class Card {
	public static final int CLOVER = 0;
    public static final int HEART = 1;
    public static final int DIAMOND = 2;
    public static final int SPADE = 3;
    
    public static final int TWO = 0;
    public static final int THREE = 1;
    public static final int FOUR = 2;
    
    public static void main(String[]args) {
    	System.out.println("Card.CLOVER == Card.TWO); //true
	}
}

โœ”๏ธ ์ •์ˆ˜ํ˜• ์—ด๊ฑฐ ํƒ€์ž…์˜ ๋‹จ์ ๋“ค

  • ํƒ€์ž…์— ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.
    • ์ƒ์ˆ˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์žฌ ์ปดํŒŒ์ผ ํ•ด์•ผํ•œ๋‹ค. ๋งŒ์•ฝ ์ปดํŒŒ์ผ ํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋Š” ์ž˜๋ชป๋œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜๋ฏธ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
    • ์ •์ˆ˜ ์—ด๊ฑฐ ํƒ€์ž…์—์„œ ์ •์˜ํ•œ ์ƒ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด ์ˆซ์ž๋กœ ์ถœ๋ ฅ๋œ๋‹ค. ์‹ค์ œ ์ƒ์ˆ˜์˜ ์˜๋ฏธ๋ฅผ ์•Œ๊ธฐ ์–ด๋ ต๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด CLOVER์™€ TWO๋ผ๋Š” ์ƒ์ˆ˜์˜ ๊ฐ’์€ ๊ฐ™๋‹ค๊ณ  ๋‚˜์˜ค๋Š”๋ฐ ์‹ค์ œ ์˜๋ฏธ๋ฅผ ์ƒ๊ฐํ•ด ๋ดค์„ ๋•Œ๋Š” ๋ชจํ˜ธํ•ด์ง€๊ฒŒ ๋œ๋‹ค. (์˜๋ฏธ์ƒ์œผ๋กœ๋Š” ๋‹ค๋ฅธ๊ฒŒ ๋งž๋‹ค.)
  • ๋ณ„๋„์˜ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๊ฐ€ ์—†๋‹ค.
    • ์ด๋ฆ„ ์ถฉ๋Œ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์ ‘๋‘์–ด์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์ˆ˜์˜ ์ด๋ฆ„์„ ์ง€์–ด์•ผ ํ•œ๋‹ค.

โœ”๏ธ ์ •์ˆ˜ ๋Œ€์‹  "๋ฌธ์ž์—ด์„ ์ด์šฉํ•œ ๋ณ€ํ˜• ํŒจํ„ด"

  • ์ƒ์ˆ˜์˜ ์˜๋ฏธ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž˜๋ชป๋œ ๋ฌธ์ž์—ด ์ฝ”๋“œ๋กœ ์ž˜๋ชป๋œ ๋™์ž‘์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. (๋Ÿฐํƒ€์ž„ ์‹œ์— ์ž˜๋ชป๋œ ๋™์ž‘์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.)
  • ๋ฌธ์ž์—ด ๋น„๊ต์˜ ์„ฑ๋Šฅ ์ €ํ•˜๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋”ฐ๋ผ์˜ค๊ฒŒ ๋œ๋‹ค.
  1. [์ •์ˆ˜ ์—ด๊ฑฐ ํƒ€์ž…, ๋ฌธ์ž์—ด ๋ณ€ํ˜• ํƒ€์ž…]์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•œ ์—ด๊ฑฐ ํƒ€์ž… ๋“ฑ์žฅ
  • JDK 5๋ถ€ํ„ฐ ์ง€์›

์‚ฌ์šฉ์˜ˆ์‹œ

public enum Kind { CLOVER, HEART, DIAMOND, SPADE }
public enum Value { TWO, THREE, FOUR }

์œ„ ์ฝ”๋“œ๋ฅผ ์ž๋ฐ” enum์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ Card.CLOVER == Card.TWO ์ด๋ ‡๊ฒŒ ์˜๋ฏธ๋Š” ๋‹ค๋ฅด์ง€๋งŒ ์‹ค์ œ ๊ฐ’์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋กœ ์ธํ•œ ๋™๋“ฑ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„๊นŒ?

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

Enum

์—ด๊ฑฐํ˜•(Enumerated Type)์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ์„œ๋กœ ์—ฐ๊ด€๋œ ์ƒ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค. ๊ธฐ์กด์— ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฐœ์ƒํ–ˆ๋˜ ๋ฌธ์ œ(TypeSafe)๋ฅผ ๊ฐœ์„ ํ•˜๊ณ ์ž jdk 1.5 ๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ์ด๋‹ค.

Enum ์ด์ „์˜ ์ƒ์ˆ˜ ํ‘œํ˜„

โœ”๏ธ ๋ณ€์ˆ˜๋ฅผ ์ƒ์ˆ˜๋กœ
์ƒ์ˆ˜๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜์— ๊ณ ์ •๋œ ๊ฐ’์„ ์ง‘์–ด๋„ฃ์œผ๋ฉด ๊ทธ ๋ณ€์ˆ˜๋Š” ์ƒ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

int bicmac = 1;

์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆซ์ž๋ณ„๋กœ ์–ด๋–ค ํ–„๋ฒ„๊ฑฐ ์ธ์ง€ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

public class BeforeEnum {
	public static void main(String[]args) {
	/*
    1๋ฒˆ์€ ๋น…๋งฅ
    2๋ฒˆ์€ ๋ถˆ๊ณ ๊ธฐ
    3๋ฒˆ์€ ์น˜์ฆˆ๋ฒ„๊ฑฐ
    */
    int type = 2;
    
    switch(type) {
    	case 1 :
        System.out.println("๋น…๋งฅ");
        break;
        
        case 2 :
        System.out.println("๋ถˆ๊ณ ๊ธฐ");
        break;
        
        case 3 :
        System.out.println("์น˜์ฆˆ");
        break;
	}
  }
}

Output
๋ถˆ๊ณ ๊ธฐ

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์ฝ”๋“œ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์‹œ๊ฐ„์ด ํ˜๋Ÿฌ ์ฝ”๋“œ๋ฅผ ์กฐ์ž‘ํ•˜๋‹ค๊ฐ€ ์ฃผ์„์— ์ ํžŒ ์ •๋ณด๊ฐ€ ์—†์–ด์กŒ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๋งŒ์•ฝ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด type์ด ์–ด๋–ค ์˜๋ฏธ๋ฅผ ๋‹ด๊ณ ์žˆ๋Š”์ง€ ๋ชจ๋ฅผ ๊ฒƒ์ด๋‹ค.
โœ”๏ธ final์„ ์ด์šฉํ•œ ์ƒ์ˆ˜
์ฃผ์„์ด ์—†์–ด์กŒ๋‹ค๋Š” ์ด์œ ๋กœ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฉด ๋งค์šฐ ํž˜๋“ค ๊ฒƒ์ด๋‹ค. ์ด๋Ÿด ๋•Œ ์ˆซ์ž๋ณ„๋กœ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“  ํ›„, ๋ถˆ๋ณ€ํ•˜๊ธฐ ์œ„ํ•ด final, ์–ด์ฐจํ”ผ ๋ฐ”๋€Œ์ง€ ์•Š์„ ๊ฐ’์ด๋ผ๋ฉด ํด๋ž˜์Šค ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

public class BeforeEnum {
	private final static int BIGMAC = 1;
    private final static int BULGOGI = 2;
    private final static int CHEESE = 3;
    
    public static void main(String[]args) {
    	int type = BIGMAG;
        
        switch(type) {
        	case BIGMAG : 
            System.out.println("๋น…๋งฅ");
            break;
            
            case BULGOGI : 
            System.out.println("๋ถˆ๊ณ ๊ธฐ");
            break;
            
            case CHEESE : 
            System.out.println("์น˜์ฆˆ");
            break;
		}
	}
}

์ด๋ ‡๊ฒŒ ๋œ ๊ฒฝ์šฐ ๋งจ์ฒ˜์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋ณ€์ˆ˜๋ช…์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์กŒ๋‹ค.
โœ”๏ธ์ƒ์ˆ˜์˜ ์ค‘๋ณต
ํ”„๋กœ๊ทธ๋žจ์„ ์ข€ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋งŒ๋“ค๋‹ค๋ณด๋‹ˆ ํ–„๋ฒ„๊ฑฐ์— ๋Œ€ํ•œ ์ƒ์ˆ˜๋ง๊ณ , ๋งฅ์˜ฌ๋ฐ์ด ํ–‰์‚ฌ ๋ฒ„๊ฑฐ์— ๋Œ€ํ•œ ์ƒ์ˆ˜๊ฐ€ ํ•„์š”ํ•ด์กŒ๋‹ค.

public class BeforeEnum {
	// ์ผ๋ฐ˜ ํ–„๋ฒ„๊ฑฐ
	private final static int BIGMAC = 1;
    private final static int BULGOGI = 2;
    private final static int CHEESE = 3;
    
    // ๋งฅ์˜ฌ๋ฐ์ด
	private final static int BIGMAC = 1; // ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒ
    private final static int SHANGHI = 2;
    private final static int SHRIMP = 3;

ํ•˜์ง€๋งŒ ์ผ๋ฐ˜ ํ–„๋ฒ„๊ฑฐ์˜ BIGMAC ์ƒ์ˆ˜์™€, ๋งฅ์˜ฌ๋ฐ์ด BICMAC ์ƒ์ˆ˜๊ฐ€ ๊ฒน์น˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋ณ€์ˆ˜๋ช… ์•ž์— ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์—ฌ ๋‹ค์‹œ ๋ณ€์ˆ˜๋ช…์„ ๊ตฌ๋ถ„์ง“๊ธฐ๋กœ ํ–ˆ๋‹ค.
โœ”๏ธ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ๊ธฐ๋ฒ•
์ด๋ฆ„์ด ์ค‘๋ณต๋˜๋Š” ํ™•๋ฅ ์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฒ•์œผ๋กœ ์œ„์—์„œ ์ƒ์ˆ˜์˜ ์ด๋ฆ„์ด ๊ฒน์น˜๊ธฐ ๋•Œ๋ฌธ์— ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์—ฌ ์ƒ์ˆ˜๋ช…์„ ์ƒˆ๋กœ ์ง€์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋„ ๋งŒ์•ฝ ์ƒ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•  ์ผ์ด ์žˆ์œผ๋ฉด ์„ ์–ธ๋ถ€๋Š” ๋งค์šฐ ์ง€์ €๋ถ„ํ•œ ์ƒํƒœ๊ฐ€ ๋ ๊ฒƒ์ด๋‹ค.

public class BeforeEnum {
		
	// ์ผ๋ฐ˜ ํ–„๋ฒ„๊ฑฐ
    private final static int BIGMAC = 1;
    private final static int BULGOGI = 2;
    private final static int CHEESE = 3;

    // ๋งฅ์˜ฌ๋ฐ์ด
    private final static int BIGMAC = 1; // ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒํ•˜์ง€
    private final static int SHANGHI = 2;
    private final static int SHRIMP = 3;

	......
}

โœ”๏ธ ๊ธฐ์กด ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋“ค
์œ„์—์„œ ํ–ˆ๋˜ ์ฝ”๋“œ๋“ค์„ ๋ณด๋ฉด ์•„์ง๊นŒ์ง„ ๋ณ„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ์ผ๋ฐ˜ ํ–„๋ฒ„๊ฑฐ์˜ ๋น…๋งฅ๊ณผ, ๋งฅ์˜ฌ๋ฐ์ด ๋น…๋งฅ์„ ๋น„๊ตํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์‹ค์ œ๋ก  ๋‘˜๋‹ค ๊ตฌ์„ฑํ’ˆ์€ ๋™์ผํ•˜์ง€๋งŒ ์‹ค์งˆ์ ์œผ๋กœ ๊ฐ€๊ฒฉ ์ฐจ์ด๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™๋‹ค๊ณ  ๋ณผ ์ˆœ ์—†๋‹ค. ์ด๋ฅผ ๋น„๊ตํ•˜๋Š” ์ฝ”๋“œ ์ƒ์—์„  ๊ฐœ๋ฐœ์ž์˜ ๋ชฉ์ ์ƒ false๊ฐ€ ๋‚˜์™€์•ผํ•˜์ง€๋งŒ ์‹ค์ œ๋ก  true๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. (ํƒ€์ž…์€ ๋‹ค๋ฅด์ง€๋งŒ ๊ฐ’์ด ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด์‹์˜ ๊ฒฐ๊ณผ๋Š” true) ์ฆ‰, TypeSafeํ•˜์ง€ ๋ชปํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

public class BeforeEnum {

    // ์ผ๋ฐ˜ ํ–„๋ฒ„๊ฑฐ
    private final static int NORMAL_BIGMAC = 1;
    private final static int NORMAL_BULGOGI = 2;
    private final static int NORMAL_CHEESE = 3;

    // ๋งฅ์˜ฌ๋ฐ์ด
    private final static int MACALL_BIGMAC = 1;
    private final static int MACALL_SHANGHI = 2;
    private final static int MACALL_SHRIMP = 3;
		
	public static void main(String[]args) {
		int type = NORMAL_BIGMAC;

		if (NOMAL_BIGMAC == MACALL_BIGMAC) {
	// ์ผ๋ฐ˜ ๋น…๋งฅ๊ณผ ๋งฅ์˜ฌ๋ฐ์ด ๋น…๋งฅ์€ ๊ตฌ์„ฑํ’ˆ์€ ๋˜‘๊ฐ™์ง€๋งŒ, ๊ฐ€๊ฒฉ์— ์žˆ์–ด ์ฐจ์ด๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์œผ๋ฉด ์•ˆ๋œ๋‹ค.
		}
	}
}

โœ”๏ธ enum์„ ์‚ฌ์šฉํ•œ ์ƒ์ˆ˜ ์‚ฌ์šฉ
์ผ๋ฐ˜ ํ–„๋ฒ„๊ฑฐ, ๋งฅ์˜ฌ๋ฐ์ด ๋ณ„๋กœ enum์„ ๋งŒ๋“ค์—ˆ๋‹ค. NORMAL_BIGMAC, MACALL_BIGMAC์„ ๋น„๊ตํ•ด๋ณด๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ต ์กฐ์ฐจ๋„ ํ•  ์ˆ˜ ์—†๋‹ค.

public class AfterEnum {
	
    enum NORMAL {
    	BIGMAC, BULGOGI, CHEESE
	}
    
    enum MACALL {
    	BIGMAC, SHANGHI, SHIRIMP
	}
    
    public static void main(String[]args) {
    	if (NORMAL.BIGMAC == MACALL.BIGMAC) {
        	// ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒ.. ํƒ€์ž… ๋ถˆ์ผ์น˜
		}
	}
}

Enum ์ •์˜

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

Enum์˜ ์‚ฌ์šฉ

  • Days๋ผ๋Š” enum์„ ์ •์˜ํ•œ ํ›„ Calendarํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•ด๋ณด์ž.
public enum Week {
	MONDAY,
    THUSDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}
class WeekExample {
	public static void main(String[]args) {
    	Week today1 = Week.SUNDAY;
        Week today2 = Week.SUNDAY;
        System.out.println(today1 == today2); // ๋™์ผ ์ฐธ์กฐ ๊ฐ’
	}
}

Output
true

Week enum ํด๋ž˜์Šค

Week ํƒ€์ž…์— today ์ฐธ์กฐ๋ณ€์ˆ˜

์ฃผ์˜์‚ฌํ•ญ

  • ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜์˜ ๋น„๊ต์—๋Š” == ์™€ compareTo() ์‚ฌ์šฉ๊ฐ€๋Šฅ (๋“ฑ๊ฐ€๋น„๊ต์—ฐ์‚ฐ์ž ๊ฐ€๋Šฅ)
  • =, >, >=, <, <=, <> ๊ฐ™์€ ๋น„๊ต์—ฐ์‚ฐ์ž๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ (์ปดํŒŒ์ผ ์—๋Ÿฌ)

์™œ ๋น„๊ต์—ฐ์‚ฐ์ž๋ฅผ ์“ธ ์ˆ˜ ์—†์„๊นŒ?
๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ enum์€ ํด๋ž˜์Šค์ด๋‹ค. ํด๋ž˜์Šค์—์„œ ๋น„๊ต์—ฐ์‚ฐ์ž๋ฅผ ์“ธ ์ˆ˜ ์žˆ์—ˆ๋‚˜? ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ฐ์ฒด์™€ ๊ฐ์ฒด๋Š” ์„œ๋กœ ๋น„๊ต์—ฐ์‚ฐ์ž๋ฅผ ์“ธ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— enum์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

java.lang.Enum

  • Enum์€ ์ถ”์ƒ ํด๋ž˜์Šค์ด๋‹ค.
  • ๋‹ค์ค‘ ์ƒ์†์ด ๋˜์ง€ ์•Š์•„ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์—†๋‹ค.
  • java.lang.Enum ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•œ ํด๋ž˜์Šค๋Š” java.lang.Enum ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.

    ๊ทธ ๋ฐ–์— clone(), equals(), toString()..๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์ง€๋งŒ ์ด๋Š” Object ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์€ ๋ฉ”์„œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๊ฒ ๋‹ค.

values(), valueOf()

์œ„์—์„œ ๋ณธ java.lang.Enum ์ฆ‰ ์—ด๊ฑฐํ˜•์˜ ์กฐ์ƒ ํด๋ž˜์Šค์—์„  values(), valueOf() ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์ž์„ธํžˆ ์ฐพ์•„๋ณผ ์ˆ˜ ์—†๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฉ”์„œ๋“œ์„ค๋ช…
static E values()ํ•ด๋‹น ์—ด๊ฑฐ์ฒด์˜ ๋ชจ๋“  ์ƒ์ˆ˜๋ฅผ ์ €์žฅํ•œ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜
static E valuesOf(String name)์ „๋‹ฌ๋œ ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜ํ•˜๋Š” ํ•ด๋‹น ์—ด๊ฑฐ์ฒด์˜ ์ƒ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
enum Hamburger {
	BIGMAC, SHANGHI, MACCHIKEN;
}

public class EnumTest {
	public static void main(String[]args) {
    	Hamburger hamburger = Hamburger.valueOf("MACCHIKEN");
        System.out.println(hamburger + " ๋ฒ„๊ฑฐ ์ž…๋‹ˆ๋‹ค.");
	}
}

Output
MACCHIKEN ๋ฒ„๊ฑฐ ์ž…๋‹ˆ๋‹ค.

enum Hamburger {
	BIGMAC, SHANGHI, MACCHICKEN;
}
public class EnumTest {
	public static void main(String[] args) {
		Hamburger hamburger[] = Hamburger.values();
		System.out.println("ํ˜„์žฌ ์ €ํฌ ๋งค์žฅ์— ์žˆ๋Š” ๋ฒ„๊ฑฐ๋Š”");
		for (Hamburger burgers : hamburger) {
			System.out.println(burgers + " ๋ฒ„๊ฑฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.");
		}
	}
}

Output
ํ˜„์žฌ ์ €ํฌ ๋งค์žฅ์— ์žˆ๋Š” ๋ฒ„๊ฑฐ๋Š”
BIGMAC ๋ฒ„๊ฑฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
SHANGHI ๋ฒ„๊ฑฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
MACCHICKEN ๋ฒ„๊ฑฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ด๊ฑฐํ˜•์— ๋ฉค๋ฒ„ ์ถ”๊ฐ€ํ•˜๊ธฐ

  • ์œ„์—์„œ ์—ฐ์†์ ์ธ ๊ฐ’์„ ์ž๋™์œผ๋กœ ๋Œ€์ž…ํ•œ๋‹ค๊ณ  ํ–ˆ์—ˆ๋‹ค. ๋งŒ์•ฝ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ถˆ์—ฐ์†์ ์ธ ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜์˜ ๊ฒฝ์šฐ, ์›ํ•˜๋Š” ๊ฐ’์„ ๊ด„ํ˜ธ()์•ˆ์— ๋Œ€์ž…ํ•˜๋ฉด ๋œ๋‹ค.
  • ์ด๋•Œ ๋‹จ์ˆœํžˆ ๊ด„ํ˜ธ()์•ˆ์— ๋Œ€์ž…ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•ด์•ผํ•˜๋Š” ์ž‘์—…์ด ์žˆ๋‹ค.
/**
- () ์•ˆ์— ์›ํ•˜๋Š” ๊ฐ’์„ ์ ์œผ๋ฉด ๋œ๋‹ค.
- ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„  ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ์†Œ๋ชจ๋œ๋‹ค.
- ๋‚ด๋ถ€์ ์œผ๋กœ ๋ถˆ์—ฐ์†์ ์ธ ๊ฐ’์„ ์ฃผ๊ธฐ ์œ„ํ•˜์—ฌ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ’์„ ๋ฐ›์•„์˜จ ํ›„, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. */
enum Day {
	SUNDAY(1), MONDAY(5), TUESDAY(0), WEDNESDAY(2), THURSDAY(6), FRIDAY(3), SATURDAY(4);
    
    private final int value;
    
    // ํ•ญ์ƒ ์ ‘๊ทผ ์ œ์–ด์ž๋Š” private์ด๋‹ค.
    DAY (int value) {
    	this.value = value;
	}
    
    public int getValue() {
    	return value;
	}
}

์ฃผ์˜์‚ฌํ•ญ

  • ์—ด๊ฑฐํ˜•์˜ ์ƒ์„ฑ์ž๋Š” ๋ฌต์‹œ์ ์œผ๋กœ private์ด๋ฏ€๋กœ, ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.
Day day = new Day(1); // ์—ด๊ฑฐํ˜•์˜ ์ƒ์„ฑ์ž๋Š” ์™ธ๋ถ€์—์„œ ํ˜ธ์ถœ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

EnumSet

โœ”๏ธ Set
Set์€ ๊ฐ์ฒด(๋ฐ์ดํ„ฐ)๋ฅผ ์ค‘๋ณตํ•ด์„œ ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค. ๋˜ํ•œ ์ €์žฅ๋œ ๊ฐ์ฒด(๋ฐ์ดํ„ฐ)๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. Set ์ปฌ๋ ‰์…˜์„ ๊ตฌํ˜„ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ํด๋ž˜์Šค๋“ค์€ HashSet, TreeSet, LinkedHashSet๋“ฑ์ด ์žˆ๋‹ค. ์ฃผ๋กœ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์€ add, iterator, size, remove, clear๋“ค์ด ์žˆ๋‹ค.
โœ”๏ธ EnumSet
ํŠน์ง•

  • null์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค.
  • ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.
  • ์—ด๊ฑฐํ˜•์— ์„ ์–ธ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•œ๋‹ค.

Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉด์„œ Enumeration Type์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๋ฉ”์„œ๋“œ์„ค๋ช…
allOf(Class elementType)์ธ์ž๋กœ ๋“ค์–ด์˜จ enum์„ ๊ทธ๋Œ€๋กœ enum set ์ƒ์„ฑ
range(E fro,, E to)์ฒ˜์Œ๊ณผ ๋์„ ์ž…๋ ฅํ•˜๋ฉด ๊ทธ ์‚ฌ์ด์— ์žˆ๋Š” ๊ฐ’๋“ค๋กœ enum set ์ƒ์„ฑ
complementOf(EnumSet s)์ธ์ž๋กœ ๋“ค์–ด์˜จ enum set์—์„œ ์—†๋Š” ์š”์†Œ๋“ค๋กœ ๋งŒ ๋‹ค์‹œ enum set ์ƒ์„ฑ
of(E e1, E e2, E e3, E e4, E e5)๋“ค์–ด๊ฐˆ ์š”์†Œ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜์—ฌ EnumSet์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
EnumSet.copyOf(EnumSet.of(E e1, E e2โ€ฆ))๋‹ค๋ฅธ EnumSet์„ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด EnumSet์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
enum Color {
	RED, YELLOW, GREEN, BLUE, BLACK, WHITE
}

public class EnumSetExample {
	public static void main(String[]args) {
    	System.out.println(EnumSet.allOf(Color.class));
        System.out.println(EnumSet.range(Color.YELLOW, Color.BLUE));
        System.out.println(EnumSet.complement(EnumSet.of(Color.BLACK, Color.WHITE));
        System.out.println(EnumSet.of(Color.BLACK, Color.WHITE));
	}
}

Output
[RED, YELLOW, GREEN, BLUE, BLACK, WHITE]

[YELLOW, GREEN, BLUE]

[RED, YELLOW, GREEN, BLUE]

[BLACK, WHITE]

๋ !


ํŒ€ํ”„๋กœ์ ํŠธ ๋•Œ๋ฌธ์— ๋Šฆ๊ธด ํ–ˆ์ง€๋งŒ ๋ชจ ์–ด์ฉŒ๋ผ๊ตฌ ~!~ ๋‚ด๋งด๋Œ€๋ฃจ ํ• ๊บผ๋‹ค ~~ ๊ทธ๋ฆฌ๊ณ  ํž˜๋“ค๋ฉด ์‰ฌ์—ˆ๋‹ค๊ฐ€ ํ• ๊บผ๋‹ค ~~๋˜ ํ–‰๋ณด์นผ๊บผ๋‹ค ! ~ ~ ~ ๋‹ค์Œ์ฃผ๋„ ํž˜๋‚ด์„œ ํ• ๊บผ๋‹ค ~~ ~ ์—ด์‹ฌํžˆ ํ• ๊บผ๋‹ค ~!~ โœจ

[์ฐธ๊ณ ]
https://velog.io/@ljs0429777/11์ฃผ์ฐจ-๊ณผ์ œ-Enum#enum
https://www.notion.so/11-Enum-ccbba2bf2b7746ed8a12d2dee09aa833#b46f3984088f43519e26eeb61d6b16f6

profile
โ‹†๏ฝก๏พŸโ˜…โ‹†โบโ‚Šโ‹† ๏พŸโ˜พ ๏พŸ๏ฝกโ‹† โ˜๏ธŽ๏ฝกโ‚Šโ‹†

0๊ฐœ์˜ ๋Œ“๊ธ€