[JAVA] ENUM

μ„±μž₯일기·2024λ…„ 7μ›” 24일
0

[SWCAMP] JAVA

λͺ©λ‘ 보기
14/16

Enum

μ—΄κ±°νƒ€μž… μ •μ˜

πŸ’‘ μ—΄κ±°νƒ€μž…(enum) μ΄λž€ 관련이 μžˆλŠ” μƒμˆ˜μ˜ μ§‘ν•©μ˜ 클래슀λ₯Ό μ˜λ―Έν•œλ‹€. 각각의 μ—΄κ±° μƒμˆ˜λŠ” μ—΄κ±° 객체둜 μƒμ„±λœλ‹€.
μžλ°” 1.5 이후 μƒˆλ‘­κ²Œ μΆ”κ°€λ˜μ—ˆμœΌλ©° 기쑴의 μƒμˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 방법을 효과적으둜 λŒ€μ²΄ν•΄μ€€λ‹€.

  • μƒμˆ˜λž€?
    • μƒμˆ˜λŠ” λ³€ν•˜μ§€ μ•ŠλŠ” μˆ˜μ΄λ‹€. 예λ₯Ό λ“€μ–΄ ν•˜λ£¨λŠ” 24μ‹œκ°„μ΄κ³  ν•œ μ‹œκ°„μ€ 60뢄이닀. 이런 λ³€ν•˜μ§€ μ•ŠλŠ” 것을 μƒμˆ˜λΌκ³  ν•˜κ³  μžλ°”μ—μ„œλŠ” final μ΄λΌλŠ” ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œλ‹€.
    • μƒμˆ˜λŠ” 값이 ν•œλ²ˆ μ •ν•΄μ§€λ©΄ λ³€κ²½ν•  수 μ—†λ‹€.
    • λ³€μˆ˜μ™€ λ‹€λ₯΄κ²Œ μƒμˆ˜λͺ…은 λͺ¨λ“  문자λ₯Ό μ˜μ–΄ λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•΄μ•Όν•œλ‹€.

enum 의 λ“±μž₯ λ°°κ²½

  • μžλ°” 1.5 버전 이전에 μ–΄λ–»κ²Œ μƒμˆ˜λ₯Ό μ •μ˜λ₯Ό ν•˜μ˜€λŠ”μ§€ μ•Œμ•„λ³΄μž.

  • enum이 λ“±μž₯ν•˜κΈ° μ „μ—λŠ” μ •μˆ˜ μ—΄κ±° νŒ¨ν„΄μ„ μ΄μš©ν•΄ μƒμˆ˜λ₯Ό μ„ μ–Έν–ˆλ‹€.

public class Foods {

		// μ •μˆ˜ μ—΄κ±° νŒ¨ν„΄
    public final static int MEAL_AN_BUTTER_KIMCHI_STEW = 0;
    public final static int MEAL_MINT_SEAWEED_SOUP = 1;
    public final static int MEAL_BUNGEOPPANG_SUSHI = 2;

    public final static int DRINK_RADISH_KIMCHI_LATTE = 0;
    public final static int DRINK_WOOLUCK_SMOOTHIE = 1;
    public final static int DRINK_RAW_CUTTLEFISH_SHAKE = 2;

}
  • μ •μˆ˜ μ—΄κ±° νŒ¨ν„΄μ—λŠ” λ‹€μ–‘ν•œ 단점이 μ‘΄μž¬ν–ˆλ‹€.

μ •μˆ˜ μ—΄κ±° νŒ¨ν„΄ 단점

  • μ •μˆ˜ μ—΄κ±° νŒ¨ν„΄μ€ νƒ€μž… μ•ˆμ „μ„ 보μž₯ν•  방법이 μ—†μœΌλ©° μ—λŸ¬ 디버깅이 μ–΄λ ΅λ‹€.
    • μžλ°”μ—μ„œ λ³„λ„μ˜ namespaceλ₯Ό μ§€μ›ν•˜μ§€ μ•Šμ•„ 접두어λ₯Ό λΆ™μ—¬ μƒμˆ˜ λͺ…을 κ΅¬λΆ„ν•˜μ˜€μ–΄λ„ μ‹€μ œ ν”„λ‘œκ·Έλž¨μ΄ 기동할 λ•Œμ— MEAL_AN_BUTTER_KIMCHI_STEW 와 DRINK_RADISH_KIMCHI_LATTE 의 값이 λ‘˜ λ‹€ 0이기 λ•Œλ¬Έμ— κ΅¬λΆ„ν•˜μ§€ λͺ»ν•œλ‹€.
  • μ •μˆ˜ν˜• μƒμˆ˜λŠ” λ¬Έμžμ—΄λ‘œ 좜λ ₯ν•˜κΈ° μ–΄λ ΅λ‹€.
    • μ •μˆ˜ν˜•μœΌλ‘œ μ„ μ–Έλœ μƒμˆ˜λͺ…을 λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κ³  싢을 λ•Œ 좜λ ₯ν•˜κΈ° μ–΄λ ΅λ‹€.
  • μ •μˆ˜ μ—΄κ±° 그룹에 μ†ν•œ λͺ¨λ“  μƒμˆ˜λ₯Ό μˆœνšŒν•˜λŠ” 방법도 쉽지 μ•Šλ‹€.
  • μ •μˆ˜ μ—΄κ±° νŒ¨ν„΄μœΌλ‘œ μƒμˆ˜κ°€ μ„ μ–Έλœ 경우 μƒμˆ˜μ— 변경이 λ°œμƒν•˜λ©΄ μ»΄νŒŒμΌμ„ μƒˆλ‘œ ν•΄μ•Όν•œλ‹€.
    • μ •μˆ˜ μ—΄κ±° νŒ¨ν„΄μ˜ 경우 ν•΄λ‹Ή 값이 ν΄λΌμ΄μ–ΈνŠΈμ— μƒˆκ²¨μ§€κΈ° λ•Œλ¬Έμ— 값이 λ³€κ²½λ˜λŠ” 경우 λ‹€μ‹œ μ»΄νŒŒμΌμ„ ν•΄μ•Όν•œλ‹€.
  • μœ„μ™€ 같은 λ‹¨μ μœΌλ‘œ β€œλ¬Έμžμ—΄ μ—΄κ±° νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ λ˜μ§€ μ•ŠλŠλƒβ€ λΌλŠ” μ˜κ²¬λ„ μžˆμ„ 수 μžˆμœΌλ‚˜, ν•΄λ‹Ή νŒ¨ν„΄λ„ λ‹€μ–‘ν•œ μ΄μŠˆκ°€ λ°œμƒν•œλ‹€.
  • λ¬Έμžμ—΄ μ—΄κ±° νŒ¨ν„΄ μ΄μš©μ‹œ μ—°μ‚°ν•  λ•Œ λ¬Έμžμ—΄μ„ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜μ—¬ ν•˜λ“œμ½”λ”©μ„ ν•˜λŠ” μ΄μŠˆκ°€ λ°œμƒν•  수 있고, λŸ°νƒ€μž„ λ•Œ 버그가 λ°œμƒν•˜κ±°λ‚˜ λ¬Έμžμ—΄ 비ꡐ에 λ”°λ₯Έ μ„±λŠ₯ μ €ν•˜κ°€ 유발될 수 μžˆλ‹€.

μ—΄κ±° νƒ€μž…μ˜ λ“±μž₯

  • enum이 λ“±μž₯ν•˜κ²Œ 된 μ΄ν›„λ‘œ μ •μˆ˜ μ—΄κ±° νŒ¨ν„΄μ˜ 단점을 λͺ¨λ‘ 보완할 뿐 μ•„λ‹ˆλΌ κ·Έ 외에 λ‹€μ–‘ν•œ μž₯점도 μ‘΄μž¬ν•œλ‹€.

μ—΄κ±°νƒ€μž… μ„ μ–Έ 및 μ‚¬μš© 방법

  • enum ν‚€μ›Œλ“œλ₯Ό ν™œμš©ν•˜μ—¬ μ—΄κ±° νƒ€μž…μ„ μ„ μ–Έν•  수 μžˆλ‹€.
μ ‘κ·Όμ œμ–΄μž enum 열거체이름 {

		μƒμˆ˜λͺ…1, μƒμˆ˜λͺ…2, ... μƒμˆ˜λͺ…XX;		
		
}
  • μ •μ˜λœ μ—΄κ±° νƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” 방법은 μ—΄κ±°νƒ€μž…μ΄λ¦„.μƒμˆ˜μ΄λ¦„ ν˜•μ‹μœΌλ‘œ μ‚¬μš©ν•˜λ©΄ λœλ‹€.
public static void main(String[] args) {

    if("MEAL_AN_BUTTER_KIMCHI_STEW".equals(FoodsEnum.MEAL_AN_BUTTER_KIMCHI_STEW.toString())){
        ...   
    }       
    
}

μ—΄κ±° νƒ€μž… μž₯점

  • μ—΄κ±° νƒ€μž…μ€ 싱글톀 λ°©μ‹μœΌλ‘œ κ΅¬ν˜„λ˜κΈ° λ•Œλ¬Έμ— μΈμŠ€ν„΄μŠ€μ˜ μƒμ„±μ΄λ‚˜ ν™•μž₯이 λ˜μ§€ μ•ŠλŠ”λ‹€.

    • 즉, μΈμŠ€ν„΄μŠ€κ°€ ν†΅μ œλ˜λ©° ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•˜λŠ” 것이 보μž₯λœλ‹€.
  • μ—΄κ±° νƒ€μž…μ€ 컴파일 νƒ€μž„ νƒ€μž… μ•ˆμ •μ„±μ„ λ†’μ—¬μ€€λ‹€.

    • enumTest() λŠ” FoodsEnum νƒ€μž…μœΌλ‘œ 받도둝 μ„ μ–Έν•΄ λ‘μ—ˆκΈ° λ•Œλ¬Έμ— λ‹€λ₯Έ νƒ€μž…μ˜ λ§€κ°œλ³€μˆ˜κ°€ λ“€μ–΄μ˜€λŠ” 경우 컴파일 μ—λŸ¬λ₯Ό λ°œμƒμ‹œμΌœ μ€€λ‹€.
  • μ—΄κ±° νƒ€μž…μ€ μƒμˆ˜ 이름을 λ¬Έμžμ—΄λ‘œ 좜λ ₯ν•  수 μžˆλ‹€.

  • μ—΄κ±° νƒ€μž…μ— λ©”μ†Œλ“œλ‚˜ ν•„λ“œλ₯Ό μΆ”κ°€ ν•  수 μžˆλ‹€.

    • μΆ”κ°€λ‘œ μ—΄κ±° νƒ€μž…μ€ 근본적으둜 λΆˆλ³€μ΄λΌ λͺ¨λ“  ν•„λ“œλŠ” final 이어야 ν•œλ‹€
  • μ—΄κ±° νƒ€μž…λ„ 클래슀이기 λ•Œλ¬Έμ— toString() 을 μž¬μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€.

  • μ—΄κ±° νƒ€μž…μ— μ„ μ–Έλœ μƒμˆ˜ ν•˜λ‚˜λ₯Ό μ œκ±°ν•˜λ”λΌλ„ ν΄λΌμ΄μ–ΈνŠΈμ— 영ν–₯을 μ£Όμ§€ μ•ŠλŠ”λ‹€.

    • ν˜Ήμ‹œλ‚˜ μ‚­μ œλœ μƒμˆ˜λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆλŠ” 곳이 μžˆλ‹€λ©΄ 컴파일 μ—λŸ¬λ₯Ό 좜λ ₯ν•΄μ£ΌκΈ° λ•Œλ¬Έμ— μ•ˆμ „ν•˜λ‹€.
  • μ—΄κ±° νƒ€μž… 내에 μ„ μ–Έλœ μƒμˆ˜λ“€μ„ μˆœνšŒν•  수 μžˆλ‹€.

profile
μ—”μ§€λ‹ˆμ–΄λ‘œμ˜ μ„±μž₯일지

0개의 λŒ“κΈ€