λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

μ—΄κ±°ν˜• enum μ‚¬μš©λ²• & 예제

by 5566 2023. 10. 29.

1. μ†Œκ°œ

μ—΄κ±°ν˜•(enum)μ΄λž€?

μ—΄κ±°ν˜•(enum)은 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μΌμ •ν•œ κ°’ λͺ©λ‘μ„ μ •μ˜ν•˜κ³  이λ₯Ό νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ μƒμˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 것과 μœ μ‚¬ν•˜μ§€λ§Œ, μ—΄κ±°ν˜•μ€ 보닀 κ°„κ²°ν•˜κ³  λͺ…ν™•ν•œ μ½”λ“œ μž‘μ„±μ„ 도와주며, μ˜€νƒ€λ‚˜ 잘λͺ»λœ 값을 μ‚¬μš©ν•˜λŠ” μ‹€μˆ˜λ₯Ό 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜•μ˜ μ‚¬μš©λͺ©μ 

μ—΄κ±°ν˜•μ€ μ½”λ“œμ˜ 가독성을 높이고, 잠재적인 버그λ₯Ό 사전에 λ°©μ§€ν•˜λ©°, ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μ‹€μˆ˜λ₯Ό μ€„μ΄λŠ”λ° 도움을 μ€λ‹ˆλ‹€. λ˜ν•œ, μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ νŠΉμ • κ°’λ“€μ˜ 그룹을 λ”μš± λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜μ„±μ„ 높이고, λ‹€λ₯Έ κ°œλ°œμžλ“€μ΄ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ λ§Œλ“€μ–΄μ€λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ μ—¬λŸ¬ 가지 μƒν™©μ—μ„œ μœ μš©ν•˜κ²Œ ν™œμš©λ  수 있으며, λ‹€μ–‘ν•œ 예제λ₯Ό 톡해 κ·Έ ν™œμš©λ²”μœ„λ₯Ό μ•Œμ•„λ³Ό κ²ƒμž…λ‹ˆλ‹€.

- μ—΄κ±°ν˜•(enum)μ΄λž€?

μ—΄κ±°ν˜•(enum)은 ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μΌμ •ν•œ κ°’ λͺ©λ‘μ„ μ •μ˜ν•˜λŠ” 데이터 νƒ€μž…μž…λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ 정해진 κ°’λ“€λ§Œμ„ κ°€μ§ˆ 수 있으며, μ΄λŸ¬ν•œ 값듀을 μƒμˆ˜λ‘œ μ·¨κΈ‰ν•©λ‹ˆλ‹€. 일반적으둜 μ—΄κ±°ν˜•μ€ μ‹λ³„μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 μ°Έμ‘°ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ©°, 이λ₯Ό 톡해 μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λŠ” κ°€μž₯ 큰 μ΄μœ λŠ” κ°’λ“€μ˜ 집합을 μ •μ˜ν•˜κ³  νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μ΄λŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ •μ˜ν•œ 값듀을 λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•˜κ³ , 잘λͺ»λœ κ°’ λ˜λŠ” μ˜€νƒ€λ₯Ό ν”Όν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€. λ˜ν•œ, μ½”λ“œ λ‚΄μ—μ„œ κ°’μ˜ 의미λ₯Ό λ°”λ‘œ μ•Œ 수 μžˆμœΌλ―€λ‘œ 가독성을 λ†’μ—¬μ£ΌλŠ” 역할도 ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, "색상"을 λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  λ•Œ μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같은 이점을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

enum Color {
  RED,
  GREEN,
  BLUE
}

μœ„ μ½”λ“œμ—μ„œ Color μ—΄κ±°ν˜•μ€ RED, GREEN, BLUE의 μ„Έ 가지 값을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄, λ³€μˆ˜κ°€ κ°€μ§ˆ 수 μžˆλŠ” κ°’μ˜ λ²”μœ„κ°€ λͺ…ν™•νžˆ μ •μ˜λ˜λ―€λ‘œ μ½”λ“œμ˜ 가독성이 ν–₯μƒλ©λ‹ˆλ‹€. λ˜ν•œ, "색상"을 λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜λŠ” 이제 더 이상 잘λͺ»λœ 값을 갖지 μ•Šκ²Œ 되며, κ°œλ°œμžκ°€ μ˜¬λ°”λ₯Έ 값을 μ„ νƒν•˜λ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

μ΄λŸ¬ν•œ μ—΄κ±°ν˜•μ˜ νŠΉμ§•μ€ λ‹€μ–‘ν•œ μƒν™©μ—μ„œ μœ μš©ν•˜κ²Œ ν™œμš©λ  수 있으며, λ‹€μŒ λ‚΄μš©μ—μ„œ μ—΄κ±°ν˜•μ˜ μ„ μ–Έκ³Ό μ‚¬μš© 방법에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

- μ—΄κ±°ν˜•μ˜ μ‚¬μš©λͺ©μ 

μ—΄κ±°ν˜•(enum)은 ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ½”λ“œμ˜ 가독성을 높이고, 잠재적인 버그λ₯Ό 사전에 λ°©μ§€ν•˜λ©°, 개발자의 μ‹€μˆ˜λ₯Ό μ΅œμ†Œν™”ν•˜λŠ”λ° 도움을 μ£ΌλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λŠ” μ£Όμš” λͺ©μ μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

1. μ½”λ“œμ˜ 가독성 ν–₯상

μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ μ½”λ“œμ˜ 가독성이 ν–₯μƒλ©λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ ν™œμš©ν•˜μ—¬ κ°’λ“€μ˜ 그룹을 λͺ…ν™•ν•˜κ²Œ μ •μ˜ν•  수 있으며, 이λ₯Ό 톡해 λ³€μˆ˜λ‚˜ ν•¨μˆ˜μ˜ 인자둜 μ‚¬μš©λ  수 μžˆλŠ” κ°’μ˜ λ²”μœ„λ₯Ό ν•œμ •μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œλ₯Ό μ΄ν•΄ν•˜λŠ”λ° ν•„μš”ν•œ μΆ”λ‘  μž‘μ—…μ„ μ΅œμ†Œν™”ν•˜κ³ , λ‹€λ₯Έ κ°œλ°œμžλ“€μ΄ μ½”λ“œλ₯Ό 더 μ‰½κ²Œ 이해할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, 파일 μ—΄κΈ° λͺ¨λ“œλ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•΄ λ¬Έμžμ—΄μ„ μ‚¬μš©ν•œλ‹€λ©΄ λ‹€μŒκ³Ό 같은 ν˜•νƒœκ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

String mode = "read";

ν•˜μ§€λ§Œ, λ¬Έμžμ—΄μ€ μ˜€νƒ€κ°€ λ°œμƒν•˜κΈ° 쉽고, μ–΄λ–€ 값듀을 선택할 수 μžˆλŠ”μ§€ λͺ…ν™•ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같이 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

enum FileMode {
  READ,
  WRITE,
  APPEND
}

FileMode mode = FileMode.READ;

이제 mode λ³€μˆ˜λŠ” READ, WRITE, APPEND 쀑 ν•˜λ‚˜μ˜ κ°’λ§Œμ„ κ°€μ§ˆ 수 있으며, μ½”λ“œμ˜ 가독성을 λ†’μ—¬μ£Όκ³  μ˜¬λ°”λ₯Έ 값을 선택할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

2. 잠재적인 버그 방지

μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ 정해진 κ°’λ“€λ§Œμ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ κ°•μ œν•¨μœΌλ‘œμ¨ 잠재적인 버그λ₯Ό 사전에 방지할 수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ μƒμˆ˜λ‘œ μ·¨κΈ‰λ˜κΈ° λ•Œλ¬Έμ—, 잘λͺ»λœ 값을 μ‚¬μš©ν•˜κ±°λ‚˜ μ˜€νƒ€λ₯Ό λ‚Ό 경우 컴파일 μ—λŸ¬κ°€ λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžκ°€ μ‹€μˆ˜λ₯Ό μ΅œμ†Œν™”ν•˜κ³  λŸ°νƒ€μž„μ—μ„œ λ°œμƒν•  수 μžˆλŠ” 버그λ₯Ό 사전에 차단할 수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μš”μΌμ„ ν‘œν˜„ν•˜λŠ” λ³€μˆ˜μ— μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같은 μž₯점을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

enum Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY
}

Day today = Day.MONDAY;

μœ„μ˜ μ½”λ“œμ—μ„œ today λ³€μˆ˜λŠ” MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY 쀑 ν•˜λ‚˜μ˜ κ°’λ§Œμ„ κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” μš”μΌμ„ ν‘œν˜„ν•˜λŠ” λ³€μˆ˜κ°€ 잘λͺ»λœ κ°’μ΄λ‚˜ μ˜€νƒ€λ₯Ό 갖지 μ•Šλ„λ‘ 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. μ½”λ“œμ˜ μ‹€μˆ˜ μ΅œμ†Œν™”

μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ κ°œλ°œμžκ°€ μ‹€μˆ˜λ₯Ό ν–ˆμ„ λ•Œ λ°”λ‘œ μ•Œμ•„μ°¨λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ ν™œμš©ν•˜λ©΄ λ‚΄μž₯된 νƒ€μž… μ‹œμŠ€ν…œμ΄ 잘λͺ»λœ 값을 ν—ˆμš©ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, κ°œλ°œμžκ°€ μ˜¬λ°”λ₯Έ 값을 μ„ νƒν•˜λ„λ‘ λ„μ™€μ€λ‹ˆλ‹€. μ΄λŠ” μœ„ν—˜ν•œ 버그λ₯Ό 사전에 λ°©μ§€ν•˜κ³ , 디버깅 μ‹œκ°„μ„ λ‹¨μΆ•μ‹œν‚€λŠ”λ° 도움을 μ€λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©μžμ˜ 둜그인 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜μ— μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같은 이점이 μžˆμŠ΅λ‹ˆλ‹€.

enum LoginStatus {
  LOGGED_IN,
  LOGGED_OUT
}

LoginStatus status = LoginStatus.LOGGED_IN;

μœ„μ˜ μ½”λ“œμ—μ„œ status λ³€μˆ˜λŠ” LOGGED_IN λ˜λŠ” LOGGED_OUT 쀑 ν•˜λ‚˜μ˜ κ°’λ§Œμ„ κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžκ°€ μ‹€μˆ˜λ‘œ λ‹€λ₯Έ μƒνƒœλ₯Ό ν• λ‹Ήν•˜λŠ” μ‹€μˆ˜λ₯Ό 방지할 수 있으며, μ΄λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ•ˆμ „μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ •λ¦¬ν•˜λ©΄, μ—΄κ±°ν˜•μ€ μ½”λ“œμ˜ 가독성을 높이고, 잠재적인 버그λ₯Ό 사전에 λ°©μ§€ν•˜λ©°, 개발자의 μ‹€μˆ˜λ₯Ό μ΅œμ†Œν™”ν•˜λŠ”λ° 도움을 μ£ΌλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚€κ³ , λ‹€λ₯Έ κ°œλ°œμžλ“€μ΄ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ λ§Œλ“€μ–΄μ€λ‹ˆλ‹€.

- μ—΄κ±°ν˜•μ˜ μ‚¬μš©λͺ©μ 

μ—΄κ±°ν˜•(enum)은 ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” 데이터 νƒ€μž…μž…λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ μΌμ •ν•œ 값듀을 μ •μ˜ν•˜κ³ , 이λ₯Ό μƒμˆ˜λ‘œ μ‚¬μš©ν•¨μœΌλ‘œμ¨ νŠΉμ • κ°’μ˜ λ²”μœ„λ₯Ό μ œν•œν•˜κ³  λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•˜λŠ”λ° 도움을 μ€λ‹ˆλ‹€. μ•„λž˜λŠ” μ—΄κ±°ν˜•μ˜ μ£Όμš” μ‚¬μš©λͺ©μ μ— λŒ€ν•œ μƒμ„Έν•œ μ„€λͺ…μž…λ‹ˆλ‹€.

1. μ½”λ“œμ˜ 가독성 ν–₯상

μ—΄κ±°ν˜•μ€ κ°’λ“€μ˜ 집합을 λͺ…ν™•ν•˜κ³  κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ 일반적으둜 μ‹λ³„μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 μ°Έμ‘°ν•˜λŠ”λ°, 이λ₯Ό 톡해 μ½”λ“œμ˜ 가독성을 높일 수 μžˆμŠ΅λ‹ˆλ‹€. λ³€μˆ˜λ‚˜ ν•¨μˆ˜μ˜ 인자둜 μ‚¬μš©λ  수 μžˆλŠ” κ°’μ˜ λ²”μœ„λ₯Ό ν•œμ •μ‹œν‚΄μœΌλ‘œμ¨, μ½”λ“œλ₯Ό μ΄ν•΄ν•˜λŠ”λ° ν•„μš”ν•œ μΆ”λ‘  μž‘μ—…μ„ μ΅œμ†Œν™”ν•˜κ³  λ‹€λ₯Έ κ°œλ°œμžλ“€μ΄ μ½”λ“œλ₯Ό 더 μ‰½κ²Œ 이해할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, 파일 μ—΄κΈ° λͺ¨λ“œλ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•΄ λ¬Έμžμ—΄μ„ μ‚¬μš©ν•œλ‹€λ©΄ λ‹€μŒκ³Ό 같은 ν˜•νƒœκ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

String mode = "read";

ν•˜μ§€λ§Œ, λ¬Έμžμ—΄μ€ μ˜€νƒ€κ°€ λ°œμƒν•˜κΈ° 쉽고, μ–΄λ–€ 값듀을 선택할 수 μžˆλŠ”μ§€ λͺ…ν™•ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같이 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

enum FileMode {
  READ,
  WRITE,
  APPEND
}

FileMode mode = FileMode.READ;

이제 mode λ³€μˆ˜λŠ” READ, WRITE, APPEND 쀑 ν•˜λ‚˜μ˜ κ°’λ§Œμ„ κ°€μ§ˆ 수 있으며, μ½”λ“œμ˜ 가독성을 λ†’μ—¬μ£Όκ³  μ˜¬λ°”λ₯Έ 값을 선택할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

2. 잠재적인 버그 방지

μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•¨μœΌλ‘œμ¨ 정해진 κ°’λ“€λ§Œμ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ κ°•μ œν•¨μœΌλ‘œμ¨ 잠재적인 버그λ₯Ό 사전에 방지할 수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ μƒμˆ˜λ‘œ μ·¨κΈ‰λ˜κΈ° λ•Œλ¬Έμ—, 잘λͺ»λœ 값을 μ‚¬μš©ν•˜κ±°λ‚˜ μ˜€νƒ€λ₯Ό λ‚Ό 경우 컴파일 μ—λŸ¬κ°€ λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžκ°€ μ‹€μˆ˜λ₯Ό μ΅œμ†Œν™”ν•˜κ³  λŸ°νƒ€μž„μ—μ„œ λ°œμƒν•  수 μžˆλŠ” 버그λ₯Ό 사전에 차단할 수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μš”μΌμ„ ν‘œν˜„ν•˜λŠ” λ³€μˆ˜μ— μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같은 μž₯점을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

enum Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY
}

Day today = Day.MONDAY;

μœ„μ˜ μ½”λ“œμ—μ„œ today λ³€μˆ˜λŠ” MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY 쀑 ν•˜λ‚˜μ˜ κ°’λ§Œμ„ κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” μš”μΌμ„ ν‘œν˜„ν•˜λŠ” λ³€μˆ˜κ°€ 잘λͺ»λœ κ°’μ΄λ‚˜ μ˜€νƒ€λ₯Ό 갖지 μ•Šλ„λ‘ 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. μ½”λ“œμ˜ μ‹€μˆ˜ μ΅œμ†Œν™”

μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•¨μœΌλ‘œμ¨ κ°œλ°œμžκ°€ μ‹€μˆ˜λ₯Ό ν–ˆμ„ λ•Œ λ°”λ‘œ μ•Œμ•„μ°¨λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ ν™œμš©ν•˜λ©΄ λ‚΄μž₯된 νƒ€μž… μ‹œμŠ€ν…œμ΄ 잘λͺ»λœ 값을 ν—ˆμš©ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, κ°œλ°œμžκ°€ μ˜¬λ°”λ₯Έ 값을 μ„ νƒν•˜λ„λ‘ λ„μ™€μ€λ‹ˆλ‹€. μ΄λŠ” μœ„ν—˜ν•œ 버그λ₯Ό 사전에 λ°©μ§€ν•˜κ³ , 디버깅 μ‹œκ°„μ„ λ‹¨μΆ•μ‹œν‚€λŠ”λ° 도움을 μ€λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©μžμ˜ 둜그인 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜μ— μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같은 이점이 μžˆμŠ΅λ‹ˆλ‹€.

enum LoginStatus {
  LOGGED_IN,
  LOGGED_OUT
}

LoginStatus status = LoginStatus.LOGGED_IN;

μœ„μ˜ μ½”λ“œμ—μ„œ status λ³€μˆ˜λŠ” LOGGED_IN λ˜λŠ” LOGGED_OUT 쀑 ν•˜λ‚˜μ˜ κ°’λ§Œμ„ κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžκ°€ μ‹€μˆ˜λ‘œ λ‹€λ₯Έ μƒνƒœλ₯Ό ν• λ‹Ήν•˜λŠ” μ‹€μˆ˜λ₯Ό 방지할 수 있으며, μ΄λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ•ˆμ „μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ •λ¦¬ν•˜λ©΄, μ—΄κ±°ν˜•μ€ μ½”λ“œμ˜ 가독성을 높이고, 잠재적인 버그λ₯Ό 사전에 λ°©μ§€ν•˜λ©°, 개발자의 μ‹€μˆ˜λ₯Ό μ΅œμ†Œν™”ν•˜λŠ”λ° 도움을 μ£ΌλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•¨μœΌλ‘œμ¨ μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 있고, λ‹€λ₯Έ κ°œλ°œμžλ“€μ΄ μž‘μ„±ν•œ μ½”λ“œμ— λ”μš± μ‰½κ²Œ ν˜‘λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. μ—΄κ±°ν˜• μ„ μ–Έκ³Ό κ°’ ν• λ‹Ή

μ—΄κ±°ν˜•(enum)은 일련의 μƒμˆ˜ 값듀을 μ •μ˜ν•˜λŠ”λ° μ‚¬μš©λ˜λ©°, 각 μƒμˆ˜ 값듀은 μ—΄κ±°ν˜•μ˜ λ©€λ²„λ‘œ κ°„μ£Όλ©λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ μ„ μ–Έν•˜κ³  값에 μ ‘κ·Όν•˜λŠ” 방법에 λŒ€ν•΄ μ•„λž˜μ—μ„œ μžμ„Ένžˆ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜•μ€ enum ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„ μ–Έν•©λ‹ˆλ‹€. μ—΄κ±°ν˜•μ˜ 멀버듀은 μ‰Όν‘œλ‘œ κ΅¬λΆ„ν•˜μ—¬ μ„ μ–Έν•˜λ©°, λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜λŠ” 것이 κ΄€λ‘€μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μš”μΌμ„ ν‘œν˜„ν•˜λŠ” μ—΄κ±°ν˜•μ„ μ„ μ–Έν•œλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€.

enum Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY
}

μœ„μ˜ μ½”λ“œμ—μ„œ DayλΌλŠ” μ΄λ¦„μ˜ μ—΄κ±°ν˜•μ„ μ„ μ–Έν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• λ©€λ²„λŠ” MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY둜 μ •μ˜λ˜μ—ˆμœΌλ©°, 각 λ©€λ²„λŠ” μ—΄κ±°ν˜•μ˜ μƒμˆ˜λ‘œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•œ 번 μ—΄κ±°ν˜•μ„ μ„ μ–Έν•œ ν›„μ—λŠ” μ—΄κ±°ν˜• 멀버λ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜μ— 값을 ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ³€μˆ˜μ— μ—΄κ±°ν˜•μ˜ 값이 ν• λ‹Ήλ˜λŠ” 것은 μ—΄κ±°ν˜•μ˜ 멀버 쀑 ν•˜λ‚˜λ₯Ό μ„ νƒν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 였늘의 μš”μΌμ„ ν‘œν˜„ν•˜λŠ” λ³€μˆ˜μ— 값을 ν• λ‹Ήν•˜κ³  좜λ ₯ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

Day today = Day.MONDAY;
System.out.println("μ˜€λŠ˜μ€ " + today + "μž…λ‹ˆλ‹€.");

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄, "μ˜€λŠ˜μ€ MONDAYμž…λ‹ˆλ‹€."λΌλŠ” λ©”μ‹œμ§€κ°€ 좜λ ₯λ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ 값을 ν• λ‹Ήν•˜κ³  좜λ ₯ν•¨μœΌλ‘œμ¨, μ½”λ“œμ˜ 가독성을 높일 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ 잘λͺ»λœ 값을 ν• λ‹Ήν•˜λ €κ³  μ‹œλ„ν•  경우 컴파일 μ—λŸ¬κ°€ λ°œμƒν•˜κ²Œ λ˜μ–΄ 잠재적인 버그λ₯Ό 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜• λ©€λ²„μ—λŠ” μΆ”κ°€λ‘œ 값을 ν• λ‹Ήν•˜λŠ” 것도 κ°€λŠ₯ν•©λ‹ˆλ‹€. 각 λ©€λ²„λŠ” μ΄λŸ¬ν•œ ν• λ‹Ήλœ 값을 κ°€μ§ˆ 수 있으며, 이λ₯Ό 톡해 각 λ©€λ²„μ˜ 의미λ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μš”μΌ μ—΄κ±°ν˜• 멀버에 각 멀버에 ν•΄λ‹Ήν•˜λŠ” 숫자 값을 ν• λ‹Ήν•œλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€.

enum Day {
  MONDAY(1),
  TUESDAY(2),
  WEDNESDAY(3),
  THURSDAY(4),
  FRIDAY(5),
  SATURDAY(6),
  SUNDAY(7);

  private int value;

  private Day(int value) {
    this.value = value;
  }

  public int getValue() {
    return value;
  }
}

μœ„μ˜ μ½”λ“œμ—μ„œλŠ” 각 μš”μΌμ— λ§žλŠ” 숫자 값을 Day μ—΄κ±°ν˜• 멀버에 ν• λ‹Ήν•˜μ˜€μŠ΅λ‹ˆλ‹€. κ°’ 할당을 μœ„ν•΄ μƒμ„±μžλ₯Ό μΆ”κ°€ν•˜μ˜€μœΌλ©°, valueλΌλŠ” λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 μ €μž₯ν•˜κ³  getValue() λ©”μ†Œλ“œλ₯Ό 톡해 값을 λ°˜ν™˜ν•˜λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

이제 값을 ν• λ‹Ήν•˜μ—¬ μ—΄κ±°ν˜• 멀버에 μ ‘κ·Όν•˜λ €λ©΄ λ‹€μŒκ³Ό 같이 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Day monday = Day.MONDAY;
System.out.println("MONDAY의 값은 " + monday.getValue() + "μž…λ‹ˆλ‹€.");

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ "MONDAY의 값은 1μž…λ‹ˆλ‹€."λΌλŠ” λ©”μ‹œμ§€κ°€ 좜λ ₯λ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ 값을 ν• λ‹Ήν•˜κ³  μ ‘κ·Όν•˜λŠ” 것을 톡해 μ—΄κ±°ν˜• 멀버에 좔가적인 정보λ₯Ό λΆ€μ—¬ν•  수 있으며, μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

μ •λ¦¬ν•˜λ©΄, μ—΄κ±°ν˜•μ„ μ„ μ–Έν•˜κ³  값을 ν• λ‹Ήν•˜κΈ° μœ„ν•΄μ„œλŠ” enum ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜•μ„ μ„ μ–Έν•˜κ³ , 멀버듀을 μ‰Όν‘œλ‘œ κ΅¬λΆ„ν•˜μ—¬ λ‚˜μ—΄ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜•μ˜ λ©€λ²„λŠ” λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜λŠ” 것이 κ΄€λ‘€μž…λ‹ˆλ‹€. μ—΄κ±°ν˜•μ˜ λ©€λ²„λŠ” λ³€μˆ˜μ— 값을 ν• λ‹Ήν•˜λŠ”λ° μ‚¬μš©λ  수 있으며, μ—΄κ±°ν˜• 멀버에 좔가적인 정보λ₯Ό λΆ€μ—¬ν•˜κΈ° μœ„ν•΄ 값을 ν• λ‹Ήν•˜κ³  μ ‘κ·Όν•˜λŠ” 것도 κ°€λŠ₯ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•¨μœΌλ‘œμ¨ μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

- μ—΄κ±°ν˜• μ„ μ–Έ 방법

μ—΄κ±°ν˜•(enum)은 일련의 μƒμˆ˜ 값을 μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, 일반적으둜 κ³ μ •λœ κ°’λ“€μ˜ 집합을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μžμ„Έν•œ μ—΄κ±°ν˜• μ„ μ–Έ 방법에 λŒ€ν•΄ μ„€λͺ…λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜•μ„ μ„ μ–Έν•˜κΈ° μœ„ν•΄μ„œλŠ” enum ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ•„λž˜μ˜ 예제λ₯Ό 톡해 μ—΄κ±°ν˜•μ˜ μ„ μ–Έ 방법을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY
}

μœ„μ˜ μ½”λ“œμ—μ„œ enum ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ Day λΌλŠ” μ΄λ¦„μ˜ μ—΄κ±°ν˜•μ„ μ„ μ–Έν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버듀은 각각 MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY으둜 μ •μ˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 멀버듀은 μ—΄κ±°ν˜•μ˜ μƒμˆ˜λ‘œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜•μ€ μ›ν•˜λŠ” 만큼의 멀버λ₯Ό κ°€μ§ˆ 수 있으며, 각 λ©€λ²„λŠ” μ‰Όν‘œλ‘œ κ΅¬λΆ„ν•˜μ—¬ μ„ μ–Έν•©λ‹ˆλ‹€. λ©€λ²„μ˜ 이름은 κ΄€λ‘€μ μœΌλ‘œ λŒ€λ¬Έμžλ‘œ μž‘μ„±λ˜λ©°, μ—΄κ±°ν˜• λ©€λ²„μ˜ 이름을 ν™œμš©ν•˜μ—¬ 값을 ν• λ‹Ήν•˜κ±°λ‚˜ μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜•μ„ μ„ μ–Έν•˜κΈ° μœ„ν•΄ λ‹€λ₯Έ 예제λ₯Ό μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

enum Currency {
  USD,
  EUR,
  GBP,
  JPY
}

μœ„μ˜ μ˜ˆμ œμ—μ„œ CurrencyλΌλŠ” μ΄λ¦„μ˜ μ—΄κ±°ν˜•μ„ μ„ μ–Έν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• λ©€λ²„λ‘œλŠ” USD, EUR, GBP, JPYκ°€ μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 각각의 λ©€λ²„λŠ” ν•΄λ‹Ή 톡화λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μƒμˆ˜λ‘œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

ν˜Ήμ€ 값을 ν• λ‹Ήν•˜μ—¬ μ—΄κ±°ν˜• 멀버에 μ €μž₯ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ‹€μŒκ³Ό 같은 μ—΄κ±°ν˜•μ„ μ„ μ–Έν•΄λ΄…μ‹œλ‹€.

enum Size {
  SMALL("S"),
  MEDIUM("M"),
  LARGE("L"),
  EXTRA_LARGE("XL");

  private String abbreviation;

  private Size(String abbreviation) {
    this.abbreviation = abbreviation;
  }

  public String getAbbreviation() {
    return abbreviation;
  }
}

μœ„μ˜ μ˜ˆμ‹œμ—μ„œ SizeλΌλŠ” μ΄λ¦„μ˜ μ—΄κ±°ν˜•μ„ μ„ μ–Έν•˜μ˜€μŠ΅λ‹ˆλ‹€. 각 멀버(SMALL, MEDIUM, LARGE, EXTRA_LARGE)λŠ” ν•΄λ‹Ή 크기의 μ˜·μ„ λ‚˜νƒ€λ‚΄λŠ” μƒμˆ˜λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€. μΆ”κ°€λ‘œ, abbreviationμ΄λΌλŠ” 멀버 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³ , μƒμ„±μžλ₯Ό 톡해 각 멀버에 값을 ν• λ‹Ήν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버에 μΆ”κ°€λœ μ •λ³΄λŠ” getAbbreviation() λ©”μ†Œλ“œλ₯Ό 톡해 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ •λ¦¬ν•˜μžλ©΄, μ—΄κ±°ν˜•μ€ enum ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„ μ–Έν•  수 있으며, μ—΄κ±°ν˜• λ©€λ²„λŠ” μ‰Όν‘œλ‘œ κ΅¬λΆ„ν•˜μ—¬ μ„ μ–Έν•©λ‹ˆλ‹€. λ©€λ²„μ˜ 이름은 κ΄€λ‘€μ μœΌλ‘œ λŒ€λ¬Έμžλ‘œ μž‘μ„±λ˜λ©°, μ—΄κ±°ν˜• 멀버 이름을 μ‚¬μš©ν•˜μ—¬ 값을 ν• λ‹Ήν•˜κ±°λ‚˜ μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• λ©€λ²„μ—λŠ” ν•„μš”μ— 따라 값을 ν• λ‹Ήν•˜μ—¬ μΆ”κ°€ 정보λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ κ³ μ •λœ κ°’λ“€μ˜ 집합을 λ‚˜νƒ€λ‚Ό 수 있으며, μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

- κΈ°λ³Έ κ°’ ν• λ‹Ή

μ—΄κ±°ν˜•(enum)을 μ‚¬μš©ν•  λ•Œ, 각 멀버에 기본적으둜 값을 ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 각 멀버에 νŠΉμ • 값을 λΆ€μ—¬ν•˜κ±°λ‚˜, λ‹€μ–‘ν•œ μƒμˆ˜ 값을 지정할 수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜μ—μ„œ κΈ°λ³Έ κ°’ ν• λ‹Ήμ˜ 방법과 ν™œμš©μ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜• 멀버에 κΈ°λ³Έ 값을 ν• λ‹Ήν•˜κΈ° μœ„ν•΄μ„œλŠ” μƒμ„±μžλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μƒμ„±μžλŠ” μ—΄κ±°ν˜• λ©€λ²„μ˜ μ΄ˆκΈ°ν™”μ™€ κ΄€λ ¨λœ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. μ•„λž˜μ˜ μ½”λ“œλ₯Ό 톡해 예제λ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Size {
  SMALL("S", 50),
  MEDIUM("M", 55),
  LARGE("L", 60),
  EXTRA_LARGE("XL", 65);

  private String abbreviation;
  private int measurement;

  private Size(String abbreviation, int measurement) {
    this.abbreviation = abbreviation;
    this.measurement = measurement;
  }

  public String getAbbreviation() {
    return abbreviation;
  }

  public int getMeasurement() {
    return measurement;
  }
}

μœ„μ˜ μ½”λ“œμ—μ„œ SizeλΌλŠ” μ΄λ¦„μ˜ μ—΄κ±°ν˜•μ„ μ„ μ–Έν•˜μ˜€μŠ΅λ‹ˆλ‹€. 각 멀버(SMALL, MEDIUM, LARGE, EXTRA_LARGE)λŠ” ν•΄λ‹Ήν•˜λŠ” 옷 크기와 츑정값을 λ‚˜νƒ€λ‚΄λŠ” μƒμˆ˜λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€. μƒμ„±μžλ₯Ό 톡해 μ—΄κ±°ν˜• 멀버에 κΈ°λ³Έ 값을 ν• λ‹Ήν•˜μ˜€μœΌλ©°, abbreviationκ³Ό measurement 두 개의 멀버 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버에 ν• λ‹Ήλœ 값은 getAbbreviation() 및 getMeasurement()을 톡해 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜• 멀버에 ν• λ‹Ήλœ κΈ°λ³Έ 값을 ν™œμš©ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

Size size = Size.SMALL;
System.out.println("크기: " + size.getAbbreviation());
System.out.println("μΈ‘μ •κ°’: " + size.getMeasurement());

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

크기: S
μΈ‘μ •κ°’: 50

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” Size.SMALL을 λ³€μˆ˜μ— ν• λ‹Ήν•˜κ³ , λ³€μˆ˜μ˜ 값을 좜λ ₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 이와 같이 μ—΄κ±°ν˜• 멀버에 ν• λ‹Ήλœ κΈ°λ³Έ 값을 ν™œμš©ν•¨μœΌλ‘œμ¨, μ½”λ“œμ˜ 가독성을 ν–₯μƒμ‹œν‚€κ³  좔가적인 정보λ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ •λ¦¬ν•˜λ©΄, μ—΄κ±°ν˜• 멀버에 κΈ°λ³Έ κ°’ 할당을 μœ„ν•΄ μƒμ„±μžλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μƒμ„±μžλ₯Ό 톡해 μ—΄κ±°ν˜• 멀버에 초기 값을 μ„€μ •ν•˜κ³ , ν•΄λ‹Ή 값을 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ Getter λ©”μ„œλ“œλ₯Ό ν™œμš©ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜• λ©€λ²„μ˜ κΈ°λ³Έ 값을 ν™œμš©ν•˜λ©΄ μ½”λ“œμ˜ 가독성을 높일 수 있으며, 멀버에 좔가적인 정보λ₯Ό λΆ€μ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- νŠΉμ • κ°’ ν• λ‹Ή

μ—΄κ±°ν˜•(enum)의 각 λ©€λ²„μ—λŠ” 기본적으둜 μžλ™μœΌλ‘œ ν• λ‹Ήλ˜λŠ” 값이 μžˆμŠ΅λ‹ˆλ‹€. 이 값은 μ—΄κ±°ν˜• λ©€λ²„μ˜ μ„ μ–Έ μˆœμ„œμ— 따라 0λΆ€ν„° μ‹œμž‘ν•˜μ—¬ 1μ”© μ¦κ°€ν•˜λŠ” μ •μˆ˜μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ•Œλ‘œλŠ” κ°œλ°œμžκ°€ 직접 νŠΉμ • 값을 ν• λ‹Ήν•˜μ—¬ μ‚¬μš©ν•˜κ³  싢을 수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버에 νŠΉμ • 값을 ν• λ‹Ήν•˜λŠ” 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜• 멀버에 νŠΉμ • 값을 ν• λ‹Ήν•˜κΈ° μœ„ν•΄μ„œλŠ” 각 λ©€λ²„μ˜ 이름 뒀에 값을 콜둠으둜 κ΅¬λΆ„ν•˜μ—¬ μž‘μ„±ν•©λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 νŠΉμ • κ°’ ν• λ‹Ήμ˜ 방법을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Day {
  MONDAY(1),
  TUESDAY(2),
  WEDNESDAY(3),
  THURSDAY(4),
  FRIDAY(5),
  SATURDAY(6),
  SUNDAY(7);

  private int value;

  private Day(int value) {
    this.value = value;
  }

  public int getValue() {
    return value;
  }
}

μœ„μ˜ μ½”λ“œμ—μ„œ DayλΌλŠ” μ—΄κ±°ν˜•μ„ μ„ μ–Έν•˜μ˜€μŠ΅λ‹ˆλ‹€. 각 멀버(예: MONDAY, TUESDAY, λ“±)λŠ” ν•΄λ‹Ήν•˜λŠ” μš”μΌμ„ λ‚˜νƒ€λ‚΄λŠ” μƒμˆ˜λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€. μƒμ„±μžλ₯Ό 톡해 각 멀버에 νŠΉμ • 값을 ν• λ‹Ήν•˜μ˜€μœΌλ©°, valueλΌλŠ” 멀버 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν• λ‹Ήλœ 값을 μ €μž₯ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버에 ν• λ‹Ήλœ 값은 getValue() λ©”μ†Œλ“œλ₯Ό 톡해 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νŠΉμ • 값이 ν• λ‹Ήλœ μ—΄κ±°ν˜• 멀버λ₯Ό ν™œμš©ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

Day day = Day.WEDNESDAY;
System.out.println("μš”μΌ: " + day);
System.out.println("κ°’: " + day.getValue());

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

μš”μΌ: WEDNESDAY
κ°’: 3

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” Day.WEDNESDAYλ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•˜κ³ , λ³€μˆ˜μ˜ 값을 좜λ ₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€. getValue() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜• 멀버에 ν• λ‹Ήλœ νŠΉμ • 값을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

μ •λ¦¬ν•˜μžλ©΄, μ—΄κ±°ν˜• 멀버에 νŠΉμ • 값을 ν• λ‹Ήν•˜λ €λ©΄ 멀버 이름 뒀에 값을 콜둠으둜 κ΅¬λΆ„ν•˜μ—¬ μž‘μ„±ν•©λ‹ˆλ‹€. ν• λ‹Ήλœ 값을 μ‚¬μš©ν•˜λ €λ©΄ μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 멀버 λ³€μˆ˜μ— μ €μž₯ν•˜κ³ , Getter λ©”μ„œλ“œλ₯Ό 톡해 값을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버에 νŠΉμ • 값이 ν• λ‹Ήλ˜λ©΄, κ°œλ°œμžκ°€ μ›ν•˜λŠ” κ°’λ“€μ˜ μ§‘ν•©μœΌλ‘œ μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νŠΉμ • κ°’ ν• λ‹Ή

μ—΄κ±°ν˜•(enum)을 μ‚¬μš©ν•  λ•Œ, 각 멀버에 기본적인 값이 μžλ™μœΌλ‘œ ν• λ‹Ήλ©λ‹ˆλ‹€. κΈ°λ³Έ 값은 μ—΄κ±°ν˜• λ©€λ²„μ˜ μ„ μ–Έ μˆœμ„œμ— 따라 0λΆ€ν„° μ‹œμž‘ν•˜μ—¬ 1μ”© μ¦κ°€ν•˜λŠ” μ •μˆ˜μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ•Œλ‘œλŠ” κ°œλ°œμžκ°€ 직접 νŠΉμ • 값을 ν• λ‹Ήν•˜κ³  싢은 κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버에 νŠΉμ • 값을 ν• λ‹Ήν•˜λŠ” 방법에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜• 멀버에 νŠΉμ • κ°’ ν• λ‹Ήν•˜κΈ°

μ—΄κ±°ν˜• 멀버에 νŠΉμ • 값을 ν• λ‹Ήν•˜κΈ° μœ„ν•΄μ„œλŠ” 각 λ©€λ²„μ˜ 이름 뒀에 값을 콜둠(:)으둜 κ΅¬λΆ„ν•˜μ—¬ μž‘μ„±ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ ν•΄λ‹Ήν•˜λŠ” 멀버에 μ›ν•˜λŠ” 값을 ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 μ—΄κ±°ν˜• 멀버에 νŠΉμ • 값을 ν• λ‹Ήν•˜λŠ” 방법을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Day {
  MONDAY(1),
  TUESDAY(2),
  WEDNESDAY(3),
  THURSDAY(4),
  FRIDAY(5),
  SATURDAY(6),
  SUNDAY(7);

  private int value;

  private Day(int value) {
    this.value = value;
  }

  public int getValue() {
    return value;
  }
}

μœ„μ˜ μ½”λ“œμ—μ„œ DayλΌλŠ” μ΄λ¦„μ˜ μ—΄κ±°ν˜•μ„ μ„ μ–Έν•˜μ˜€μŠ΅λ‹ˆλ‹€. 각 멀버(MONDAY, TUESDAY, λ“±)λŠ” ν•΄λ‹Ήν•˜λŠ” μš”μΌμ„ μƒμˆ˜λ‘œ λ‚˜νƒ€λ‚΄λ©°, μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 각 멀버에 νŠΉμ • 값을 ν• λ‹Ήν•˜μ˜€μŠ΅λ‹ˆλ‹€. valueλΌλŠ” 멀버 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν• λ‹Ήλœ 값을 μ €μž₯ν•˜κ³ , getValue() λ©”μ„œλ“œλ₯Ό 톡해 ν•΄λ‹Ή 값을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

ν• λ‹Ήλœ κ°’ ν™œμš©ν•˜κΈ°

νŠΉμ • 값이 ν• λ‹Ήλœ μ—΄κ±°ν˜• 멀버λ₯Ό ν™œμš©ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 ν• λ‹Ήλœ 값을 ν™œμš©ν•˜λŠ” 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

Day day = Day.WEDNESDAY;
System.out.println("μš”μΌ: " + day);
System.out.println("κ°’: " + day.getValue());

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

μš”μΌ: WEDNESDAY
κ°’: 3

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” Day.WEDNESDAYλ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•˜κ³ , λ³€μˆ˜μ˜ 값을 좜λ ₯ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버에 νŠΉμ • 값이 ν• λ‹Ήλ˜μ–΄ μžˆμœΌλ―€λ‘œ, getValue() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή 값을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

μ •λ¦¬ν•˜λ©΄, μ—΄κ±°ν˜• 멀버에 νŠΉμ • 값을 ν• λ‹Ήν•˜λ €λ©΄ 멀버 이름 뒀에 값을 콜둠(:)으둜 κ΅¬λΆ„ν•˜μ—¬ μž‘μ„±ν•©λ‹ˆλ‹€. ν• λ‹Ήλœ 값을 μ‚¬μš©ν•˜λ €λ©΄ μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 멀버 λ³€μˆ˜μ— μ €μž₯ν•˜κ³ , Getter λ©”μ„œλ“œλ₯Ό 톡해 값을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버에 νŠΉμ • 값이 ν• λ‹Ήλ˜λ©΄, μ›ν•˜λŠ” κ°’λ“€μ˜ μ§‘ν•©μœΌλ‘œ μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜•μ˜ λ©”μ„œλ“œ

μ—΄κ±°ν˜•(enum)은 자체적인 λ©”μ„œλ“œλ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ©”μ„œλ“œλŠ” μ—΄κ±°ν˜• 멀버에 λŒ€ν•œ λ™μž‘μ„ μ •μ˜ν•˜κ±°λ‚˜, μ—΄κ±°ν˜• 멀버듀 κ°„μ˜ 비ꡐλ₯Ό μˆ˜ν–‰ν•˜λŠ” 데 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버듀 κ°„μ˜ λΉ„κ΅μ—λŠ” name() λ©”μ„œλ“œμ™€ ordinal() λ©”μ„œλ“œλ₯Ό ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• λ©”μ„œλ“œμ— λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜• λ©€λ²„μ˜ 이름과 μˆœμ„œ μ–»κΈ°

μ—΄κ±°ν˜• λ©€λ²„μ˜ 이름(name)은 name() λ©”μ„œλ“œλ₯Ό 톡해 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. name() λ©”μ„œλ“œλŠ” μ—΄κ±°ν˜• λ©€λ²„μ˜ 이름을 λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜• λ©€λ²„μ˜ μˆœμ„œ(ordinal)λŠ” ordinal() λ©”μ„œλ“œλ₯Ό 톡해 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. ordinal() λ©”μ„œλ“œλŠ” μ—΄κ±°ν˜• λ©€λ²„μ˜ μˆœμ„œλ₯Ό μ •μˆ˜ κ°’μœΌλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 name() λ©”μ„œλ“œμ™€ ordinal() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 방법을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY
}

Day day = Day.WEDNESDAY;
System.out.println("μš”μΌ: " + day.name());
System.out.println("μˆœμ„œ: " + day.ordinal());

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

μš”μΌ: WEDNESDAY
μˆœμ„œ: 2

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” name() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜• λ©€λ²„μ˜ 이름을 μ–»κ³ , ordinal() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜• λ©€λ²„μ˜ μˆœμ„œλ₯Ό μ–»μŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜• λ©€λ²„λ“€μ˜ 비ꡐ

μ—΄κ±°ν˜• 멀버듀 κ°„μ˜ λΉ„κ΅λŠ” == μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜ν–‰ν•©λ‹ˆλ‹€. == μ—°μ‚°μžλŠ” μ—΄κ±°ν˜• 멀버듀이 같은 객체인지λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버끼리 비ꡐ할 λ•ŒλŠ” μ—΄κ±°ν˜•μ˜ νƒ€μž…μ„ λͺ…μ‹œμ μœΌλ‘œ ν™•μΈν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 μ—΄κ±°ν˜• 멀버듀 κ°„μ˜ 비ꡐ 방법을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Color {
  RED,
  BLUE,
  GREEN
}

Color color1 = Color.RED;
Color color2 = Color.RED;
Color color3 = Color.BLUE;

System.out.println(color1 == color2);  // true
System.out.println(color1 == color3);  // false

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

true
false

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” == μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜• 멀버듀을 λΉ„κ΅ν•©λ‹ˆλ‹€. 같은 μ—΄κ±°ν˜• 멀버인 color1κ³Ό color2λŠ” 같은 κ°μ²΄μ΄λ―€λ‘œ trueκ°€ 좜λ ₯되고, color1κ³Ό color3은 μ„œλ‘œ λ‹€λ₯Έ κ°μ²΄μ΄λ―€λ‘œ falseκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

μ •λ¦¬ν•˜μžλ©΄, μ—΄κ±°ν˜•μ€ 자체적인 λ©”μ„œλ“œλ₯Ό κ°€μ§ˆ 수 있으며, μ—΄κ±°ν˜• λ©€λ²„μ˜ 이름과 μˆœμ„œλ₯Ό μ–»κΈ° μœ„ν•΄μ„œλŠ” name() λ©”μ„œλ“œμ™€ ordinal() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버듀 κ°„μ˜ λΉ„κ΅λŠ” == μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ˜ νƒ€μž…μ„ λͺ…μ‹œμ μœΌλ‘œ ν™•μΈν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

.values() λ©”μ„œλ“œ

μ—΄κ±°ν˜•(enum)은 .values() λ©”μ„œλ“œλ₯Ό 톡해 μ—΄κ±°ν˜• λ©€λ²„λ“€μ˜ 배열을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. .values() λ©”μ„œλ“œλŠ” μ—΄κ±°ν˜•μ˜ λͺ¨λ“  멀버듀을 λ°°μ—΄λ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ—΄κ±°ν˜• 멀버듀을 λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•˜μ—¬ μˆœνšŒν•˜κ±°λ‚˜, λ°°μ—΄μ˜ μš”μ†Œλ“€μ„ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. .values() λ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜λŠ” 방법에 λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

μ—΄κ±°ν˜• λ©€λ²„λ“€μ˜ λ°°μ—΄ μ–»κΈ°

μ—΄κ±°ν˜•μ— μ†ν•œ λͺ¨λ“  λ©€λ²„λ“€μ˜ 배열을 μ–»μœΌλ €λ©΄ .values() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 .values() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜• λ©€λ²„λ“€μ˜ 배열을 μ–»λŠ” 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY
}

Day[] days = Day.values();

for (Day day : days) {
  System.out.println(day);
}

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” .values() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ Day μ—΄κ±°ν˜• λ©€λ²„λ“€μ˜ 배열을 μ–»κ³ , λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•˜μ—¬ λ°°μ—΄μ˜ μš”μ†Œλ“€μ„ 좜λ ₯ν•©λ‹ˆλ‹€.

μ—΄κ±°ν˜• λ©€λ²„λ“€μ˜ λ°°μ—΄ ν™œμš©ν•˜κΈ°

μ—΄κ±°ν˜• λ©€λ²„λ“€μ˜ 배열을 μ–»μœΌλ©΄ ν•΄λ‹Ή λ°°μ—΄μ˜ μš”μ†Œλ“€μ„ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ°°μ—΄μ˜ μš”μ†Œλ“€μ„ λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•˜μ—¬ μˆœνšŒν•˜κ±°λ‚˜, λ°°μ—΄μ˜ 인덱슀λ₯Ό 톡해 νŠΉμ • μš”μ†Œμ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 μ—΄κ±°ν˜• λ©€λ²„λ“€μ˜ 배열을 ν™œμš©ν•˜λŠ” 방법을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Color {
  RED,
  BLUE,
  GREEN
}

Color[] colors = Color.values();

System.out.println("μƒ‰μƒμ˜ 개수: " + colors.length);
System.out.println("첫 번째 색상: " + colors[0]);

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

μƒ‰μƒμ˜ 개수: 3
첫 번째 색상: RED

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” .values() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ Color μ—΄κ±°ν˜• λ©€λ²„λ“€μ˜ 배열을 μ–»κ³ , λ°°μ—΄μ˜ 길이λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. λ˜ν•œ, λ°°μ—΄μ˜ 첫 번째 μš”μ†Œμ— μ ‘κ·Όν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.

μ •λ¦¬ν•˜μžλ©΄, .values() λ©”μ„œλ“œλŠ” μ—΄κ±°ν˜•μ˜ λͺ¨λ“  멀버듀을 λ°°μ—΄λ‘œ λ°˜ν™˜ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 배열을 μ–»μœΌλ©΄ λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•˜μ—¬ 멀버듀을 μˆœνšŒν•˜κ±°λ‚˜, λ°°μ—΄μ˜ 인덱슀λ₯Ό 톡해 νŠΉμ • μš”μ†Œμ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. .values() λ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜μ—¬ μ—΄κ±°ν˜• 멀버듀을 λ‹€λ£° 수 μžˆμŠ΅λ‹ˆλ‹€.

.valueOf() λ©”μ„œλ“œ

μ—΄κ±°ν˜•(enum)은 .valueOf() λ©”μ„œλ“œλ₯Ό 톡해 주어진 λ¬Έμžμ—΄κ³Ό μΌμΉ˜ν•˜λŠ” μ—΄κ±°ν˜• 멀버λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. .valueOf() λ©”μ„œλ“œλŠ” μ—΄κ±°ν˜• λ©€λ²„μ˜ 이름과 주어진 λ¬Έμžμ—΄μ„ λΉ„κ΅ν•˜μ—¬ μΌμΉ˜ν•˜λŠ” 멀버λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 λ¬Έμžμ—΄μ„ μ—΄κ±°ν˜• λ©€λ²„λ‘œ λ³€ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. .valueOf() λ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜λŠ” 방법에 λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

주어진 λ¬Έμžμ—΄κ³Ό μΌμΉ˜ν•˜λŠ” μ—΄κ±°ν˜• 멀버 μ–»κΈ°

주어진 λ¬Έμžμ—΄κ³Ό μΌμΉ˜ν•˜λŠ” μ—΄κ±°ν˜• 멀버λ₯Ό μ–»μœΌλ €λ©΄ .valueOf() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 .valueOf() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 주어진 λ¬Έμžμ—΄κ³Ό μΌμΉ˜ν•˜λŠ” μ—΄κ±°ν˜• 멀버λ₯Ό μ–»λŠ” 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY
}

Day day = Day.valueOf("WEDNESDAY");
System.out.println("μš”μΌ: " + day);

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

μš”μΌ: WEDNESDAY

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” .valueOf() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄ "WEDNESDAY"와 μΌμΉ˜ν•˜λŠ” Day μ—΄κ±°ν˜• 멀버λ₯Ό μ–»μŠ΅λ‹ˆλ‹€. λ°˜ν™˜λœ 멀버인 dayλ₯Ό 좜λ ₯ν•˜λ©΄ ν•΄λ‹Ή λ©€λ²„μ˜ 이름이 좜λ ₯λ©λ‹ˆλ‹€.

μ°Έκ³ : 주어진 λ¬Έμžμ—΄κ³Ό μΌμΉ˜ν•˜λŠ” μ—΄κ±°ν˜• 멀버가 없을 경우 IllegalArgumentException이 λ°œμƒν•©λ‹ˆλ‹€.

.valueOf() λ©”μ„œλ“œμ˜ λŒ€μ†Œλ¬Έμž ꡬ뢄

.valueOf() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œμ—λŠ” 주어진 λ¬Έμžμ—΄μ˜ λŒ€μ†Œλ¬Έμžλ₯Ό μ—„κ²©ν•˜κ²Œ ꡬ뢄해야 ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜• λ©€λ²„μ˜ 이름과 주어진 λ¬Έμžμ—΄μ˜ λŒ€μ†Œλ¬Έμžκ°€ μ •ν™•νžˆ μΌμΉ˜ν•΄μ•Ό μΌμΉ˜ν•˜λŠ” 멀버λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 λŒ€μ†Œλ¬Έμž ꡬ뢄에 λ”°λ₯Έ .valueOf() λ©”μ„œλ“œμ˜ λ™μž‘μ„ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Color {
  RED,
  BLUE,
  GREEN
}

Color color = Color.valueOf("RED");
System.out.println("색상: " + color);

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

색상: RED

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” .valueOf() λ©”μ„œλ“œμ— λŒ€μ†Œλ¬Έμžκ°€ μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄ "RED"λ₯Ό μ „λ‹¬ν•˜μ˜€κΈ° λ•Œλ¬Έμ— λŒ€μ†Œλ¬Έμž ꡬ뢄에 상관없이 멀버λ₯Ό μ˜¬λ°”λ₯΄κ²Œ λ°˜ν™˜ν•©λ‹ˆλ‹€.

Color color = Color.valueOf("red");

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ IllegalArgumentException이 λ°œμƒν•©λ‹ˆλ‹€. μ΄λŠ” 주어진 λ¬Έμžμ—΄ "red"와 μ—΄κ±°ν˜• λ©€λ²„μ˜ 이름 "RED"κ°€ λŒ€μ†Œλ¬Έμžκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ •λ¦¬ν•˜μžλ©΄, .valueOf() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 주어진 λ¬Έμžμ—΄κ³Ό μΌμΉ˜ν•˜λŠ” μ—΄κ±°ν˜• 멀버λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ—¬ μ •ν™•ν•˜κ²Œ μΌμΉ˜ν•΄μ•Ό 멀버λ₯Ό λ°˜ν™˜ν•˜λ©°, μΌμΉ˜ν•˜λŠ” 멀버가 없을 경우 IllegalArgumentException이 λ°œμƒν•©λ‹ˆλ‹€. .valueOf() λ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μ—΄κ±°ν˜• λ©€λ²„λ‘œ λ³€ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

.values() λ©”μ„œλ“œ

The .values() method allows you to obtain an array of all the members of an enumeration (enum). It returns an array containing all the members of the enumeration. This allows you to iterate over the members using a loop or utilize the elements of the array. Let's take a closer look at how to use the .values() method.

Obtaining an Array of Enumeration Members

To obtain an array of all the members of an enumeration, you can use the .values() method. Let's see an example of how to use the .values() method to get an array of enumeration members.

enum Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY
}

Day[] days = Day.values();

for (Day day : days) {
  System.out.println(day);
}

When you run the above code, the following output will be displayed:

MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY

In the example above, the .values() method is used to obtain an array of members from the Day enumeration. The elements of the array are then printed using a loop.

Utilizing the Array of Enumeration Members

Once you have obtained the array of enumeration members, you can utilize the elements of the array. You can iterate over the members using a loop or access specific elements using array indexing. Let's take a look at how to utilize the array of enumeration members.

enum Color {
  RED,
  BLUE,
  GREEN
}

Color[] colors = Color.values();

System.out.println("Number of colors: " + colors.length);
System.out.println("First color: " + colors[0]);

When you run the above code, the following output will be displayed:

Number of colors: 3
First color: RED

In the example above, the .values() method is used to obtain an array of members from the Color enumeration. The length of the array is printed by accessing the length property of the array. The first element of the array is accessed using array indexing and then printed.

In summary, the .values() method returns an array containing all the members of an enumeration. Once you have the array, you can iterate over the members using a loop or access specific elements using array indexing. The .values() method allows you to work with the members of an enumeration.

4. μ—΄κ±°ν˜• λΉ„κ΅ν•˜κΈ°

μ—΄κ±°ν˜•(enum)은 비ꡐ μ—°μ‚°μž(== λ˜λŠ” !=)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ‘œ 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• λ©€λ²„λΌλ¦¬μ˜ λΉ„κ΅λŠ” κ°„λ‹¨ν•˜κ²Œ μˆ˜ν–‰λ˜λ©°, μ—΄κ±°ν˜• 멀버 κ°„μ˜ μˆœμ„œ λ˜λŠ” 이름을 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. 이번 μ„Ήμ…˜μ—μ„œλŠ” μ—΄κ±°ν˜• κ°„μ˜ 비ꡐ에 λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

Enum 멀버 λΉ„κ΅ν•˜κΈ°

μ—΄κ±°ν˜• 멀버λ₯Ό λΉ„κ΅ν•˜κΈ° μœ„ν•΄μ„œλŠ” 비ꡐ μ—°μ‚°μž(== λ˜λŠ” !=)λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜•μ˜ 멀버듀은 각각 κ³ μœ ν•œ 객체둜 μ·¨κΈ‰λ˜κΈ° λ•Œλ¬Έμ—, μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό 비ꡐ할 λ•ŒλŠ” 항상 !=λ₯Ό μ‚¬μš©ν•˜μ—¬ 비ꡐ해야 ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버듀은 λ™μΌν•œ 객체이면 == μ—°μ‚°μžλ‘œ 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ—΄κ±°ν˜• 멀버 κ°„μ˜ 비ꡐλ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 μ—΄κ±°ν˜• 멀버 비ꡐ에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY
}

Day day1 = Day.MONDAY;
Day day2 = Day.MONDAY;
Day day3 = Day.TUESDAY;
Day day4 = Day.WEDNESDAY;

System.out.println(day1 == day2); // true
System.out.println(day1 == day3); // false
System.out.println(day1 != day4); // true

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

true
false
true

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” Day μ—΄κ±°ν˜•μ˜ 멀버듀을 μƒμ„±ν•˜μ—¬ λΉ„κ΅ν•©λ‹ˆλ‹€. day1κ³Ό day2λŠ” λ™μΌν•œ Day.MONDAY 멀버λ₯Ό μ°Έμ‘°ν•˜λ―€λ‘œ == μ—°μ‚°μžμ˜ κ²°κ³ΌλŠ” trueκ°€ λ©λ‹ˆλ‹€. day1κ³Ό day3은 μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό μ°Έμ‘°ν•˜λ―€λ‘œ == μ—°μ‚°μžμ˜ κ²°κ³ΌλŠ” falseκ°€ λ©λ‹ˆλ‹€. day1κ³Ό day4λŠ” μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό μ°Έμ‘°ν•˜λ―€λ‘œ != μ—°μ‚°μžμ˜ κ²°κ³ΌλŠ” trueκ°€ λ©λ‹ˆλ‹€.

Enum 멀버 μˆœμ„œ λΉ„κ΅ν•˜κΈ°

μ—΄κ±°ν˜• λ©€λ²„λŠ” μžλ™μœΌλ‘œ μ •μ˜λœ μˆœμ„œλ₯Ό κ°–μŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• λ©€λ²„μ˜ μˆœμ„œλŠ” 멀버λ₯Ό μ •μ˜ν•œ μˆœμ„œμ™€ λ™μΌν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ—΄κ±°ν˜• 멀버듀을 μˆœμ„œλ‘œ 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• λ©€λ²„μ˜ μˆœμ„œ λΉ„κ΅λŠ” .compareTo() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. .compareTo() λ©”μ„œλ“œλŠ” 비ꡐ λŒ€μƒ 멀버보닀 이전인 경우 음수, 같은 멀버인 경우 0, 이후인 경우 μ–‘μˆ˜λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 μ—΄κ±°ν˜• λ©€λ²„μ˜ μˆœμ„œ 비ꡐ에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Size {
  SMALL,
  MEDIUM,
  LARGE
}

Size size1 = Size.SMALL;
Size size2 = Size.MEDIUM;
Size size3 = Size.LARGE;

System.out.println(size1.compareTo(size2)); // -1
System.out.println(size2.compareTo(size2)); // 0
System.out.println(size3.compareTo(size1)); // 1

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

-1
0
1

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” Size μ—΄κ±°ν˜•μ˜ 멀버듀을 μƒμ„±ν•˜μ—¬ λΉ„κ΅ν•©λ‹ˆλ‹€. size1은 Size.SMALL 멀버이고, size2λŠ” Size.MEDIUM λ©€λ²„μž…λ‹ˆλ‹€. .compareTo() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ size1을 size2와 λΉ„κ΅ν•˜λ©΄ -1이 λ°˜ν™˜λ©λ‹ˆλ‹€. μ΄λŠ” size1이 size2보닀 이전인 μˆœμ„œμ— 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. .compareTo() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 멀버λ₯Ό λ™μΌν•œ 멀버와 λΉ„κ΅ν•˜λ©΄ 0이 λ°˜ν™˜λ©λ‹ˆλ‹€. size3을 size1κ³Ό λΉ„κ΅ν•˜λ©΄ 1이 λ°˜ν™˜λ©λ‹ˆλ‹€. μ΄λŠ” size3이 size1보닀 이후인 μˆœμ„œμ— 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ •λ¦¬ν•˜μžλ©΄, μ—΄κ±°ν˜• 멀버λ₯Ό λΉ„κ΅ν•˜κΈ° μœ„ν•΄ 비ꡐ μ—°μ‚°μž(== λ˜λŠ” !=)λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버듀은 객체둜 μ·¨κΈ‰λ˜κΈ° λ•Œλ¬Έμ—, μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό 비ꡐ할 λ•ŒλŠ” !=λ₯Ό μ‚¬μš©ν•˜μ—¬ 비ꡐ해야 ν•©λ‹ˆλ‹€. λ˜ν•œ, μ—΄κ±°ν˜• 멀버듀은 μˆœμ„œλ‘œ 비ꡐ할 수 있으며, μˆœμ„œ 비ꡐλ₯Ό μœ„ν•΄μ„œλŠ” .compareTo() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. .compareTo() λ©”μ„œλ“œλŠ” 비ꡐ λŒ€μƒ λ©€λ²„μ™€μ˜ μˆœμ„œ 비ꡐλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

- == μ—°μ‚°μžλ₯Ό μ΄μš©ν•œ 비ꡐ

μ—°μ‚°μž ==λŠ” μ—΄κ±°ν˜•(enum) 멀버듀을 λΉ„κ΅ν•˜λŠ” 데 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버듀은 각각 κ³ μœ ν•œ 객체둜 μ·¨κΈ‰λ˜κΈ° λ•Œλ¬Έμ—, λ™μΌν•œ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” κ²½μš°μ—λ§Œ == μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. 이번 μ„Ήμ…˜μ—μ„œλŠ” == μ—°μ‚°μžλ₯Ό μ΄μš©ν•œ μ—΄κ±°ν˜• 멀버 비ꡐ에 λŒ€ν•΄ μ•„λž˜μ— μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ™μΌν•œ 멀버 λΉ„κ΅ν•˜κΈ°

== μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ 멀버인지λ₯Ό 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. λ™μΌν•œ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 == μ—°μ‚°μžμ˜ κ²°κ³ΌλŠ” trueκ°€ λ©λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 λ™μΌν•œ 멀버 비ꡐλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Coin {
  PENNY,
  NICKEL,
  DIME,
  QUARTER
}

Coin coin1 = Coin.NICKEL;
Coin coin2 = Coin.NICKEL;

System.out.println(coin1 == coin2); // true

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

true

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” Coin μ—΄κ±°ν˜•μ˜ 멀버듀을 μƒμ„±ν•˜μ—¬ λΉ„κ΅ν•©λ‹ˆλ‹€. coin1κ³Ό coin2λŠ” λͺ¨λ‘ Coin.NICKEL 멀버λ₯Ό μ°Έμ‘°ν•˜λ―€λ‘œ == μ—°μ‚°μžμ˜ κ²°κ³ΌλŠ” trueκ°€ λ©λ‹ˆλ‹€.

μ„œλ‘œ λ‹€λ₯Έ 멀버 λΉ„κ΅ν•˜κΈ°

== μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 == μ—°μ‚°μžμ˜ κ²°κ³ΌλŠ” falseκ°€ λ©λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 μ„œλ‘œ λ‹€λ₯Έ 멀버 비ꡐλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Month {
  JANUARY,
  FEBRUARY,
  MARCH,
  APRIL
}

Month month1 = Month.JANUARY;
Month month2 = Month.MARCH;

System.out.println(month1 == month2); // false

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

false

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” Month μ—΄κ±°ν˜•μ˜ 멀버듀을 μƒμ„±ν•˜μ—¬ λΉ„κ΅ν•©λ‹ˆλ‹€. month1은 Month.JANUARY 멀버λ₯Ό μ°Έμ‘°ν•˜κ³ , month2λŠ” Month.MARCH 멀버λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€. λ”°λΌμ„œ month1κ³Ό month2λŠ” μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό μ°Έμ‘°ν•˜λ―€λ‘œ == μ—°μ‚°μžμ˜ κ²°κ³ΌλŠ” falseκ°€ λ©λ‹ˆλ‹€.

μš”μ•½ν•˜μžλ©΄, == μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜μ—¬ μ—΄κ±°ν˜• 멀버듀을 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. λ™μΌν•œ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 == μ—°μ‚°μžμ˜ κ²°κ³ΌλŠ” trueκ°€ 되고, μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 == μ—°μ‚°μžμ˜ κ²°κ³ΌλŠ” falseκ°€ λ©λ‹ˆλ‹€. == μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜• 멀버λ₯Ό λΉ„κ΅ν•˜λŠ” 것은 μ—΄κ±°ν˜•μ˜ νŠΉμ„±μ„ 잘 μ΄ν•΄ν•˜κ³  λ™μΌν•œ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ”μ§€λ₯Ό ν™•μΈν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.

- .equals() λ©”μ„œλ“œλ₯Ό μ΄μš©ν•œ 비ꡐ

μ—΄κ±°ν˜•(enum) 멀버듀은 .equals() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. .equals() λ©”μ„œλ“œλŠ” 두 개의 객체λ₯Ό λΉ„κ΅ν•˜μ—¬ λ™μΌν•œ 객체인지λ₯Ό ν™•μΈν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. μ—΄κ±°ν˜• 멀버듀도 객체둜 μ·¨κΈ‰λ˜κΈ° λ•Œλ¬Έμ—, λ™μΌν•œ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” trueκ°€ λ©λ‹ˆλ‹€. 이번 μ„Ήμ…˜μ—μ„œλŠ” .equals() λ©”μ„œλ“œλ₯Ό μ΄μš©ν•œ μ—΄κ±°ν˜• 멀버 비ꡐ에 λŒ€ν•΄ μ•„λž˜μ— μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ™μΌν•œ 멀버 λΉ„κ΅ν•˜κΈ°

.equals() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ 멀버인지λ₯Ό 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. λ™μΌν•œ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” trueκ°€ λ©λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 λ™μΌν•œ 멀버 비ꡐλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Color {
  RED,
  GREEN,
  BLUE
}

Color color1 = Color.RED;
Color color2 = Color.RED;

System.out.println(color1.equals(color2)); // true

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

true

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” Color μ—΄κ±°ν˜•μ˜ 멀버듀을 μƒμ„±ν•˜μ—¬ λΉ„κ΅ν•©λ‹ˆλ‹€. color1κ³Ό color2λŠ” λͺ¨λ‘ Color.RED 멀버λ₯Ό μ°Έμ‘°ν•˜λ―€λ‘œ .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” trueκ°€ λ©λ‹ˆλ‹€.

μ„œλ‘œ λ‹€λ₯Έ 멀버 λΉ„κ΅ν•˜κΈ°

.equals() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” falseκ°€ λ©λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 μ„œλ‘œ λ‹€λ₯Έ 멀버 비ꡐλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Direction {
  UP,
  DOWN,
  LEFT,
  RIGHT
}

Direction direction1 = Direction.UP;
Direction direction2 = Direction.RIGHT;

System.out.println(direction1.equals(direction2)); // false

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

false

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” Direction μ—΄κ±°ν˜•μ˜ 멀버듀을 μƒμ„±ν•˜μ—¬ λΉ„κ΅ν•©λ‹ˆλ‹€. direction1은 Direction.UP 멀버λ₯Ό μ°Έμ‘°ν•˜κ³ , direction2λŠ” Direction.RIGHT 멀버λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€. λ”°λΌμ„œ direction1κ³Ό direction2λŠ” μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό μ°Έμ‘°ν•˜λ―€λ‘œ .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” falseκ°€ λ©λ‹ˆλ‹€.

μš”μ•½ν•˜μžλ©΄, .equals() λ©”μ„œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ μ—΄κ±°ν˜• 멀버듀을 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. λ™μΌν•œ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” trueκ°€ 되고, μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” falseκ°€ λ©λ‹ˆλ‹€. .equals() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜• 멀버λ₯Ό λΉ„κ΅ν•˜λŠ” 것은 μ—΄κ±°ν˜•μ˜ νŠΉμ„±μ„ 잘 μ΄ν•΄ν•˜κ³  λ™μΌν•œ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ”μ§€λ₯Ό ν™•μΈν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.

- .equals() λ©”μ„œλ“œλ₯Ό μ΄μš©ν•œ 비ꡐ

μ—΄κ±°ν˜•(enum) 멀버듀은 .equals() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€.

.equals() λ©”μ„œλ“œλŠ” 두 개의 객체λ₯Ό λΉ„κ΅ν•˜μ—¬ λ™μΌν•œ 객체인지λ₯Ό ν™•μΈν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

μ—΄κ±°ν˜• 멀버듀도 객체둜 μ·¨κΈ‰λ˜κΈ° λ•Œλ¬Έμ—, λ™μΌν•œ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” trueκ°€ λ©λ‹ˆλ‹€.

이번 μ„Ήμ…˜μ—μ„œλŠ” .equals() λ©”μ„œλ“œλ₯Ό μ΄μš©ν•œ μ—΄κ±°ν˜• 멀버 비ꡐ에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.


λ™μΌν•œ 멀버 λΉ„κ΅ν•˜κΈ°

.equals() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ 멀버인지λ₯Ό 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ™μΌν•œ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” trueκ°€ λ©λ‹ˆλ‹€.

μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 λ™μΌν•œ 멀버 비ꡐλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Color {
  RED,
  GREEN,
  BLUE
}

Color color1 = Color.RED;
Color color2 = Color.RED;

System.out.println(color1.equals(color2)); // true

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

true

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” Color μ—΄κ±°ν˜•μ˜ 멀버듀을 μƒμ„±ν•˜μ—¬ λΉ„κ΅ν•©λ‹ˆλ‹€.

color1κ³Ό color2λŠ” λͺ¨λ‘ Color.RED 멀버λ₯Ό μ°Έμ‘°ν•˜λ―€λ‘œ .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” trueκ°€ λ©λ‹ˆλ‹€.


μ„œλ‘œ λ‹€λ₯Έ 멀버 λΉ„κ΅ν•˜κΈ°

.equals() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” falseκ°€ λ©λ‹ˆλ‹€.

μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 μ„œλ‘œ λ‹€λ₯Έ 멀버 비ꡐλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

enum Direction {
  UP,
  DOWN,
  LEFT,
  RIGHT
}

Direction direction1 = Direction.UP;
Direction direction2 = Direction.RIGHT;

System.out.println(direction1.equals(direction2)); // false

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

false

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” Direction μ—΄κ±°ν˜•μ˜ 멀버듀을 μƒμ„±ν•˜μ—¬ λΉ„κ΅ν•©λ‹ˆλ‹€.

direction1은 Direction.UP 멀버λ₯Ό μ°Έμ‘°ν•˜κ³ , direction2λŠ” Direction.RIGHT 멀버λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ direction1κ³Ό direction2λŠ” μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό μ°Έμ‘°ν•˜λ―€λ‘œ .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” falseκ°€ λ©λ‹ˆλ‹€.


μš”μ•½ν•˜μžλ©΄, .equals() λ©”μ„œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ μ—΄κ±°ν˜• 멀버듀을 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ™μΌν•œ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” trueκ°€ 되고, μ„œλ‘œ λ‹€λ₯Έ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 .equals() λ©”μ„œλ“œμ˜ κ²°κ³ΌλŠ” falseκ°€ λ©λ‹ˆλ‹€.

.equals() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜• 멀버λ₯Ό λΉ„κ΅ν•˜λŠ” 것은 μ—΄κ±°ν˜•μ˜ νŠΉμ„±μ„ 잘 μ΄ν•΄ν•˜κ³  λ™μΌν•œ 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ”μ§€λ₯Ό ν™•μΈν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.

5. μ—΄κ±°ν˜•μ˜ ν™œμš© 예제

μ—΄κ±°ν˜•(enum)은 μ½”λ“œλ₯Ό κΉ”λ”ν•˜κ³  읽기 μ‰½κ²Œ λ§Œλ“€μ–΄μ£ΌλŠ” κ°•λ ₯ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ ν™œμš©ν•˜λ©΄ μ½”λ“œμ˜ 가독성을 높이고, 였λ₯˜λ₯Ό μ˜ˆλ°©ν•˜λ©°, μœ μ§€λ³΄μˆ˜λ₯Ό μš©μ΄ν•˜κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이번 μ„Ήμ…˜μ—μ„œλŠ” μ—΄κ±°ν˜•μ˜ ν™œμš© μ˜ˆμ œμ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.


문제 μ†Œκ°œ

λ‹€μŒκ³Ό 같은 상황을 μƒμ •ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. μ–΄λ–€ ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” μ‚¬μš©μžκ°€ μ„œλ‘œ λ‹€λ₯Έ ν˜•νƒœμ˜ νŒ¨ν„΄μ„ 선택해야 ν•©λ‹ˆλ‹€. νŒ¨ν„΄μ€ "A", "B", "C" 쀑 ν•˜λ‚˜μΌ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, νŒ¨ν„΄μ„ λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜λ₯Ό μ–΄λ–»κ²Œ μ„ μ–Έν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 것이 μ’‹μ„κΉŒμš”?


μ—΄κ±°ν˜• μ‚¬μš© μ „

μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜κΈ° μ „μ—λŠ” νŒ¨ν„΄μ„ λ¬Έμžμ—΄λ‘œ ν‘œν˜„ν•˜κ³ , λΉ„κ΅μ‹œμ—λŠ” λ¬Έμžμ—΄μ„ μ΄μš©ν•΄ 비ꡐ해야 ν•©λ‹ˆλ‹€. 이럴 경우, μ˜€νƒ€κ°€ λ°œμƒν•˜κ±°λ‚˜ 잘λͺ»λœ λ¬Έμžμ—΄μ„ λΉ„κ΅ν•˜λ €κ³  ν•  λ•Œ 였λ₯˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

String pattern = "A";

// νŒ¨ν„΄ 비ꡐ
if (pattern.equals("A")) {
  // A νŒ¨ν„΄ 처리
} else if (pattern.equals("B")) {
  // B νŒ¨ν„΄ 처리
} else if (pattern.equals("C")) {
  // C νŒ¨ν„΄ 처리
} else {
  // 잘λͺ»λœ νŒ¨ν„΄ 처리
}

μ—΄κ±°ν˜• μ‚¬μš© ν›„

μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ μœ„μ™€ 같은 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ νŒ¨ν„΄μ„ ν‘œν˜„ν•˜λ©΄, μ˜€νƒ€λ‚˜ 잘λͺ»λœ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λŠ” 였λ₯˜λ₯Ό 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

enum Pattern {
  A,
  B,
  C
}

Pattern pattern = Pattern.A;

// νŒ¨ν„΄ 비ꡐ
if (pattern == Pattern.A) {
  // A νŒ¨ν„΄ 처리
} else if (pattern == Pattern.B) {
  // B νŒ¨ν„΄ 처리
} else if (pattern == Pattern.C) {
  // C νŒ¨ν„΄ 처리
} else {
  // 잘λͺ»λœ νŒ¨ν„΄ 처리
}

μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ νŒ¨ν„΄μ„ μ’€ 더 λͺ…ν™•ν•˜κ³  μ•ˆμ „ν•˜κ²Œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€. νŒ¨ν„΄μ„ λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜λŠ” Pattern νƒ€μž…μœΌλ‘œ μ„ μ–Έν•˜κ³ , κ°€λŠ₯ν•œ 값은 Pattern.A, Pattern.B, Pattern.C와 같이 μ—΄κ±°ν˜•μ˜ 멀버 쀑 ν•˜λ‚˜λ‘œ μ œν•œλ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ 되면 μ˜€νƒ€κ°€ λ°œμƒν•˜κ±°λ‚˜ 잘λͺ»λœ νŒ¨ν„΄μ„ λΉ„κ΅ν•˜λŠ” 상황을 사전에 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.


μœ„μ˜ μ˜ˆμ‹œμ—μ„œ λ³Ό 수 μžˆλ“―μ΄, μ—΄κ±°ν˜•μ€ μƒμˆ˜κ°’λ“€μ˜ 집합을 λ‚˜νƒ€λ‚΄λŠ” 것과 λ™μ‹œμ— μœ μš©ν•˜κ²Œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ˜ 가독성을 높일 수 있고, 였λ₯˜λ₯Ό μ˜ˆλ°©ν•˜λ©°, μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ 적절히 ν™œμš©ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ 보닀 κΉ”λ”ν•˜κ³  효율적인 ν”„λ‘œκ·Έλž˜λ°μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- μš”μΌ λ‚˜νƒ€λ‚΄κΈ°

μš”μΌμ„ λ‚˜νƒ€λ‚΄λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€. μš”μΌμ€ 주어진 μΌμžμ— 따라 항상 λ³€ν•˜λ©°, μ½”λ“œμ—μ„œ 숫자둜 ν‘œν˜„λ˜λŠ” 것은 가독성을 λ–¨μ–΄λœ¨λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€. 이런 경우, μ—΄κ±°ν˜•(enum)을 μ‚¬μš©ν•˜μ—¬ μš”μΌμ„ ν‘œν˜„ν•˜λ©΄ μ½”λ“œλ₯Ό λ”μš± λͺ…ν™•ν•˜κ³  가독성이 μ’‹κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 이번 μ„Ήμ…˜μ—μ„œλŠ” μš”μΌμ„ λ‚˜νƒ€λ‚΄λŠ” μ—΄κ±°ν˜•μ„ λ§Œλ“€κ³  ν™œμš©ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.


μ—΄κ±°ν˜•μœΌλ‘œ μš”μΌ ν‘œν˜„ν•˜κΈ°

일주일은 총 7일둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ μš”μΌμ„ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, DayλΌλŠ” μ—΄κ±°ν˜•μ„ μƒμ„±ν•˜κ³  각 μš”μΌμ„ λ©€λ²„λ‘œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

enum Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY
}

μœ„μ˜ μ½”λ“œλ₯Ό 보면 DayλΌλŠ” μ—΄κ±°ν˜•μ„ μƒμ„±ν•˜κ³ , MONDAY, TUESDAY, ... , SUNDAYλΌλŠ” 멀버듀을 μΆ”κ°€ν•œ 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 각 λ©€λ²„λŠ” ν•΄λ‹Ήν•˜λŠ” μš”μΌμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.


μš”μΌ μ‚¬μš©ν•˜κΈ°

μ—΄κ±°ν˜•μœΌλ‘œ μš”μΌμ„ ν‘œν˜„ν–ˆλ‹€λ©΄, 이λ₯Ό ν™œμš©ν•˜μ—¬ μš”μΌμ„ λ‹€λ£¨λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 였늘의 μš”μΌμ„ ν™•μΈν•˜κ³  ν•΄λ‹Ήν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

import java.time.DayOfWeek;
import java.time.LocalDate;

public class Main {
  public static void main(String[] args) {
    LocalDate currentDate = LocalDate.now();
    DayOfWeek today = currentDate.getDayOfWeek();

    switch (today) {
      case MONDAY:
        System.out.println("μ˜€λŠ˜μ€ μ›”μš”μΌμž…λ‹ˆλ‹€.");
        break;
      case TUESDAY:
        System.out.println("μ˜€λŠ˜μ€ ν™”μš”μΌμž…λ‹ˆλ‹€.");
        break;
      case WEDNESDAY:
        System.out.println("μ˜€λŠ˜μ€ μˆ˜μš”μΌμž…λ‹ˆλ‹€.");
        break;
      case THURSDAY:
        System.out.println("μ˜€λŠ˜μ€ λͺ©μš”μΌμž…λ‹ˆλ‹€.");
        break;
      case FRIDAY:
        System.out.println("μ˜€λŠ˜μ€ κΈˆμš”μΌμž…λ‹ˆλ‹€.");
        break;
      case SATURDAY:
        System.out.println("μ˜€λŠ˜μ€ ν† μš”μΌμž…λ‹ˆλ‹€.");
        break;
      case SUNDAY:
        System.out.println("μ˜€λŠ˜μ€ μΌμš”μΌμž…λ‹ˆλ‹€.");
        break;
      default:
        System.out.println("였λ₯˜: 잘λͺ»λœ μš”μΌμž…λ‹ˆλ‹€.");
        break;
    }
  }
}

μœ„μ˜ μ½”λ“œλŠ” ν˜„μž¬ λ‚ μ§œλ₯Ό ν™•μΈν•˜μ—¬ 였늘의 μš”μΌμ„ μ•Œμ•„λ‚΄κ³ , switch문을 μ‚¬μš©ν•˜μ—¬ 각각의 μš”μΌμ— 따라 λ‹€λ₯Έ λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€. switchλ¬Έμ—μ„œλŠ” today λ³€μˆ˜μ˜ 값에 따라 각각의 case에 ν•΄λ‹Ήν•˜λŠ” λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.


μš”μ•½ν•˜μžλ©΄, μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ μš”μΌμ„ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ 각각의 μš”μΌμ„ λͺ…ν™•ν•˜κ³  κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆμ–΄ 가독성을 λ†’μ—¬μ€λ‹ˆλ‹€. μš”μΌμ„ μ—΄κ±°ν˜•μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ 였λ₯˜λ₯Ό λ°©μ§€ν•˜κ³ , μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μš”μΌμ„ λ‹€λ£¨λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•ŒλŠ” μ—΄κ±°ν˜•μ„ ν™œμš©ν•΄λ³΄μ„Έμš”.

- κ³„μ ˆ λ‚˜νƒ€λ‚΄κΈ°

κ³„μ ˆμ„ λ‚˜νƒ€λ‚΄λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€. κ³„μ ˆμ€ νŠΉμ •ν•œ μΌμžμ— 따라 λ³€ν•˜λ©°, μ½”λ“œμ—μ„œ λ¬Έμžμ—΄λ‘œ ν‘œν˜„ν•˜λ©΄ 가독성을 λ–¨μ–΄λœ¨λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€. 이런 경우, μ—΄κ±°ν˜•(enum)을 μ‚¬μš©ν•˜μ—¬ κ³„μ ˆμ„ ν‘œν˜„ν•˜λ©΄ μ½”λ“œλ₯Ό λ”μš± λͺ…ν™•ν•˜κ³  가독성이 μ’‹κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 이번 μ„Ήμ…˜μ—μ„œλŠ” κ³„μ ˆμ„ λ‚˜νƒ€λ‚΄λŠ” μ—΄κ±°ν˜•μ„ λ§Œλ“€κ³  ν™œμš©ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.


μ—΄κ±°ν˜•μœΌλ‘œ κ³„μ ˆ ν‘œν˜„ν•˜κΈ°

μš°λ¦¬λŠ” 일년 λ™μ•ˆ λ„€ 가지 κ³„μ ˆμ„ κ²½ν—˜ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ κ³„μ ˆμ„ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Seasonμ΄λΌλŠ” μ—΄κ±°ν˜•μ„ μƒμ„±ν•˜κ³  각 κ³„μ ˆμ„ λ©€λ²„λ‘œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

enum Season {
  SPRING,
  SUMMER,
  FALL,
  WINTER
}

μœ„μ˜ μ½”λ“œλ₯Ό 보면 Seasonμ΄λΌλŠ” μ—΄κ±°ν˜•μ„ μƒμ„±ν•˜κ³ , SPRING, SUMMER, FALL, WINTERλΌλŠ” 멀버듀을 μΆ”κ°€ν•œ 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 각 λ©€λ²„λŠ” ν•΄λ‹Ήν•˜λŠ” κ³„μ ˆμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.


κ³„μ ˆ μ‚¬μš©ν•˜κΈ°

μ—΄κ±°ν˜•μœΌλ‘œ κ³„μ ˆμ„ ν‘œν˜„ν–ˆλ‹€λ©΄, 이λ₯Ό ν™œμš©ν•˜μ—¬ κ³„μ ˆμ„ λ‹€λ£¨λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, ν˜„μž¬μ˜ 월을 ν™•μΈν•˜κ³  ν•΄λ‹Ήν•˜λŠ” κ³„μ ˆμ„ 좜λ ₯ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

import java.time.LocalDate;
import java.time.Month;

public class Main {
  public static void main(String[] args) {
    LocalDate currentDate = LocalDate.now();
    Month currentMonth = currentDate.getMonth();

    Season season;

    switch (currentMonth) {
      case MARCH:
      case APRIL:
      case MAY:
        season = Season.SPRING;
        break;
      case JUNE:
      case JULY:
      case AUGUST:
        season = Season.SUMMER;
        break;
      case SEPTEMBER:
      case OCTOBER:
      case NOVEMBER:
        season = Season.FALL;
        break;
      case DECEMBER:
      case JANUARY:
      case FEBRUARY:
        season = Season.WINTER;
        break;
      default:
        season = null;
        break;
    }

    if (season != null) {
      System.out.println("ν˜„μž¬ κ³„μ ˆμ€ " + season + "μž…λ‹ˆλ‹€.");
    } else {
      System.out.println("였λ₯˜: 잘λͺ»λœ μ›”μž…λ‹ˆλ‹€.");
    }
  }
}

μœ„μ˜ μ½”λ“œλŠ” ν˜„μž¬ λ‚ μ§œλ₯Ό ν™•μΈν•˜μ—¬ ν˜„μž¬ 월을 μ•Œμ•„λ‚΄κ³ , switch문을 μ‚¬μš©ν•˜μ—¬ 각각의 월에 따라 ν•΄λ‹Ήν•˜λŠ” κ³„μ ˆμ„ κ²°μ •ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€. κ³„μ ˆμ€ season λ³€μˆ˜μ— ν• λ‹Ήλ˜κ³ , ν•΄λ‹Ή κ³„μ ˆμ„ 좜λ ₯ν•©λ‹ˆλ‹€.


μš”μ•½ν•˜λ©΄, μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ κ³„μ ˆμ„ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ 각각의 κ³„μ ˆμ„ λͺ…ν™•ν•˜κ³  κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆμ–΄ 가독성을 λ†’μ—¬μ€λ‹ˆλ‹€. κ³„μ ˆμ„ μ—΄κ±°ν˜•μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ 였λ₯˜λ₯Ό λ°©μ§€ν•˜κ³ , μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ³„μ ˆμ„ λ‹€λ£¨λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•ŒλŠ” μ—΄κ±°ν˜•μ„ ν™œμš©ν•΄λ³΄μ„Έμš”.

- μ£Όλ¬Έ μƒνƒœ κ΄€λ¦¬ν•˜κΈ°

μ£Όλ¬Έ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€. 주문은 μ—¬λŸ¬ 가지 μƒνƒœλ₯Ό κ°€μ§ˆ 수 있으며, μ½”λ“œμ—μ„œ λ¬Έμžμ—΄λ‘œ ν‘œν˜„ν•˜λ©΄ 가독성을 λ–¨μ–΄λœ¨λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€. 이런 경우, μ—΄κ±°ν˜•(enum)을 μ‚¬μš©ν•˜μ—¬ μ£Όλ¬Έ μƒνƒœλ₯Ό ν‘œν˜„ν•˜λ©΄ μ½”λ“œλ₯Ό λ”μš± λͺ…ν™•ν•˜κ³  가독성이 μ’‹κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 이번 μ„Ήμ…˜μ—μ„œλŠ” μ£Όλ¬Έ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ—΄κ±°ν˜•μ„ λ§Œλ“€κ³  ν™œμš©ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.


μ—΄κ±°ν˜•μœΌλ‘œ μ£Όλ¬Έ μƒνƒœ ν‘œν˜„ν•˜κΈ°

주문은 μ—¬λŸ¬ 가지 μƒνƒœλ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ μ£Όλ¬Έ μƒνƒœλ₯Ό ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, OrderStatusλΌλŠ” μ—΄κ±°ν˜•μ„ μƒμ„±ν•˜κ³  각 μ£Όλ¬Έ μƒνƒœλ₯Ό λ©€λ²„λ‘œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

enum OrderStatus {
  RECEIVED,
  PROCESSING,
  SHIPPED,
  DELIVERED,
  CANCELLED
}

μœ„μ˜ μ½”λ“œλ₯Ό 보면 OrderStatusλΌλŠ” μ—΄κ±°ν˜•μ„ μƒμ„±ν•˜κ³ , RECEIVED, PROCESSING, SHIPPED, DELIVERED, CANCELLEDλΌλŠ” 멀버듀을 μΆ”κ°€ν•œ 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 각 λ©€λ²„λŠ” ν•΄λ‹Ήν•˜λŠ” μ£Όλ¬Έ μƒνƒœλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.


μ£Όλ¬Έ μƒνƒœ μ‚¬μš©ν•˜κΈ°

μ—΄κ±°ν˜•μœΌλ‘œ μ£Όλ¬Έ μƒνƒœλ₯Ό ν‘œν˜„ν–ˆλ‹€λ©΄, 이λ₯Ό ν™œμš©ν•˜μ—¬ μ£Όλ¬Έ μƒνƒœλ₯Ό λ‹€λ£¨λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 주문의 μƒνƒœλ₯Ό ν™•μΈν•˜κ³  ν•΄λ‹Ήν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    // μ‚¬μš©μžλ‘œλΆ€ν„° μ£Όλ¬Έ μƒνƒœ μž…λ ₯ λ°›κΈ°
    Scanner scanner = new Scanner(System.in);
    System.out.println("μ£Όλ¬Έ μƒνƒœλ₯Ό μž…λ ₯ν•˜μ„Έμš” (RECEIVED, PROCESSING, SHIPPED, DELIVERED, CANCELLED): ");
    String userInput = scanner.nextLine();

    // μ‚¬μš©μž μž…λ ₯ 값에 ν•΄λ‹Ήν•˜λŠ” μ—΄κ±°ν˜• 멀버 μ°ΎκΈ°
    OrderStatus orderStatus = OrderStatus.valueOf(userInput.toUpperCase());

    // μ£Όλ¬Έ μƒνƒœμ— λ”°λ₯Έ μž‘μ—… μˆ˜ν–‰
    switch (orderStatus) {
      case RECEIVED:
        System.out.println("주문이 μ ‘μˆ˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€.");
        break;
      case PROCESSING:
        System.out.println("주문이 처리 μ€‘μž…λ‹ˆλ‹€.");
        break;
      case SHIPPED:
        System.out.println("주문이 λ°œμ†‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.");
        break;
      case DELIVERED:
        System.out.println("주문이 λ°°λ‹¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€.");
        break;
      case CANCELLED:
        System.out.println("주문이 μ·¨μ†Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.");
        break;
      default:
        System.out.println("였λ₯˜: 잘λͺ»λœ μ£Όλ¬Έ μƒνƒœμž…λ‹ˆλ‹€.");
        break;
    }
  }
}

μœ„μ˜ μ½”λ“œλŠ” μ‚¬μš©μžλ‘œλΆ€ν„° μ£Όλ¬Έ μƒνƒœλ₯Ό μž…λ ₯λ°›μ•„ ν•΄λ‹Ήν•˜λŠ” μƒνƒœμ— 따라 λ‹€λ₯Έ λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€. μ‚¬μš©μž μž…λ ₯ 값은 valueOf() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜• λ©€λ²„λ‘œ λ³€ν™˜λ©λ‹ˆλ‹€. 그런 λ‹€μŒ switch문을 μ‚¬μš©ν•˜μ—¬ 각각의 μ£Όλ¬Έ μƒνƒœμ— λ§žλŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.


μš”μ•½ν•˜μžλ©΄, μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ μ£Όλ¬Έ μƒνƒœλ₯Ό ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ 각각의 μ£Όλ¬Έ μƒνƒœλ₯Ό λͺ…ν™•ν•˜κ³  κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆμ–΄ 가독성을 λ†’μ—¬μ€λ‹ˆλ‹€. μ£Όλ¬Έ μƒνƒœλ₯Ό μ—΄κ±°ν˜•μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ 였λ₯˜λ₯Ό λ°©μ§€ν•˜κ³ , μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ£Όλ¬Έ μƒνƒœλ₯Ό λ‹€λ£¨λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•ŒλŠ” μ—΄κ±°ν˜•μ„ ν™œμš©ν•΄λ³΄μ„Έμš”.

- 학점 λΆ€μ—¬ν•˜κΈ°

학점을 λΆ€μ—¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€. 학점은 νŠΉμ •ν•œ 성적에 따라 달라지며, μ½”λ“œμ—μ„œ λ¬Έμžμ—΄λ‘œ ν‘œν˜„ν•˜λ©΄ 가독성을 λ–¨μ–΄λœ¨λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€. 이런 경우, μ—΄κ±°ν˜•(enum)을 μ‚¬μš©ν•˜μ—¬ 학점을 ν‘œν˜„ν•˜λ©΄ μ½”λ“œλ₯Ό λ”μš± λͺ…ν™•ν•˜κ³  가독성이 μ’‹κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 이번 μ„Ήμ…˜μ—μ„œλŠ” 학점을 λ‚˜νƒ€λ‚΄λŠ” μ—΄κ±°ν˜•μ„ λ§Œλ“€κ³  ν™œμš©ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.


μ—΄κ±°ν˜•μœΌλ‘œ 학점 ν‘œν˜„ν•˜κΈ°

학점은 A, B, C, D, F와 같은 λ“±κΈ‰μœΌλ‘œ ν‘œν˜„λ  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ 학점을 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, GradeλΌλŠ” μ—΄κ±°ν˜•μ„ μƒμ„±ν•˜κ³  각 학점을 λ©€λ²„λ‘œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

enum Grade {
  A,
  B,
  C,
  D,
  F
}

μœ„μ˜ μ½”λ“œλ₯Ό 보면 GradeλΌλŠ” μ—΄κ±°ν˜•μ„ μƒμ„±ν•˜κ³ , A, B, C, D, FλΌλŠ” 멀버듀을 μΆ”κ°€ν•œ 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 각 λ©€λ²„λŠ” ν•΄λ‹Ήν•˜λŠ” 학점을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.


학점 μ‚¬μš©ν•˜κΈ°

μ—΄κ±°ν˜•μœΌλ‘œ 학점을 ν‘œν˜„ν–ˆλ‹€λ©΄, 이λ₯Ό ν™œμš©ν•˜μ—¬ 학점을 λ‹€λ£¨λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, νŠΉμ •ν•œ 성적을 μž…λ ₯λ°›κ³  ν•΄λ‹Ήν•˜λŠ” 학점을 좜λ ₯ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    // μ‚¬μš©μžλ‘œλΆ€ν„° 성적 μž…λ ₯ λ°›κΈ°
    Scanner scanner = new Scanner(System.in);
    System.out.println("학점을 μž…λ ₯ν•˜μ„Έμš” (A, B, C, D, F): ");
    String userInput = scanner.nextLine();

    // μ‚¬μš©μž μž…λ ₯ 값에 ν•΄λ‹Ήν•˜λŠ” μ—΄κ±°ν˜• 멀버 μ°ΎκΈ°
    Grade grade = Grade.valueOf(userInput.toUpperCase());

    // 학점에 λ”°λ₯Έ λ©”μ‹œμ§€ 좜λ ₯
    switch (grade) {
      case A:
        System.out.println("μ•„μ£Ό μš°μˆ˜ν•œ μ„±μ μž…λ‹ˆλ‹€. μΆ•ν•˜ν•©λ‹ˆλ‹€!");
        break;
      case B:
        System.out.println("μš°μˆ˜ν•œ μ„±μ μž…λ‹ˆλ‹€. 잘 ν•˜μ…¨μŠ΅λ‹ˆλ‹€!");
        break;
      case C:
        System.out.println("보톡 μˆ˜μ€€μ˜ μ„±μ μž…λ‹ˆλ‹€. λ…Έλ ₯ν•˜μ„Έμš”!");
        break;
      case D:
        System.out.println("λ―Έν‘ν•œ μ„±μ μž…λ‹ˆλ‹€. 더 곡뢀해야 ν•©λ‹ˆλ‹€!");
        break;
      case F:
        System.out.println("κ³Όλ½μž…λ‹ˆλ‹€. μž¬μˆ˜κ°•μ΄ ν•„μš”ν•©λ‹ˆλ‹€!");
        break;
      default:
        System.out.println("였λ₯˜: 잘λͺ»λœ ν•™μ μž…λ‹ˆλ‹€.");
        break;
    }
  }
}

μœ„μ˜ μ½”λ“œλŠ” μ‚¬μš©μžλ‘œλΆ€ν„° 성적을 μž…λ ₯λ°›μ•„ ν•΄λ‹Ήν•˜λŠ” 학점에 따라 λ‹€λ₯Έ λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€. μ‚¬μš©μž μž…λ ₯ 값은 valueOf() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜• λ©€λ²„λ‘œ λ³€ν™˜λ©λ‹ˆλ‹€. 그런 λ‹€μŒ switch문을 μ‚¬μš©ν•˜μ—¬ 각각의 학점에 λ§žλŠ” λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.


μš”μ•½ν•˜μžλ©΄, μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ 학점을 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ 각각의 학점을 λͺ…ν™•ν•˜κ³  κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆμ–΄ 가독성을 λ†’μ—¬μ€λ‹ˆλ‹€. 학점을 μ—΄κ±°ν˜•μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ 였λ₯˜λ₯Ό λ°©μ§€ν•˜κ³ , μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 학점을 λ‹€λ£¨λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•ŒλŠ” μ—΄κ±°ν˜•μ„ ν™œμš©ν•΄λ³΄μ„Έμš”.

- μ‚¬μš©μž λ“±κΈ‰ κ΄€λ¦¬ν•˜κΈ°

μ‚¬μš©μž 등급을 κ΄€λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€. 등급은 νŠΉμ •ν•œ 쑰건에 따라 달라지며, μ½”λ“œμ—μ„œ 숫자둜 ν‘œν˜„ν•˜λ©΄ 가독성을 λ–¨μ–΄λœ¨λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€. 이런 경우, μ—΄κ±°ν˜•(enum)을 μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž 등급을 ν‘œν˜„ν•˜λ©΄ μ½”λ“œλ₯Ό λ”μš± λͺ…ν™•ν•˜κ³  가독성이 μ’‹κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 이번 μ„Ήμ…˜μ—μ„œλŠ” μ‚¬μš©μž 등급을 λ‚˜νƒ€λ‚΄λŠ” μ—΄κ±°ν˜•μ„ λ§Œλ“€κ³  ν™œμš©ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.


μ—΄κ±°ν˜•μœΌλ‘œ μ‚¬μš©μž λ“±κΈ‰ ν‘œν˜„ν•˜κΈ°

μ‚¬μš©μž 등급은 "일반", "싀버", "κ³¨λ“œ", "ν”Œλž˜ν‹°λ„˜" λ“±κ³Ό 같은 λ¬Έμžμ—΄λ‘œ ν‘œν˜„λ  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž 등급을 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, UserLevelμ΄λΌλŠ” μ—΄κ±°ν˜•μ„ μƒμ„±ν•˜κ³  각 등급을 λ©€λ²„λ‘œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

enum UserLevel {
  BASIC,
  SILVER,
  GOLD,
  PLATINUM
}

μœ„μ˜ μ½”λ“œλ₯Ό 보면 UserLevelμ΄λΌλŠ” μ—΄κ±°ν˜•μ„ μƒμ„±ν•˜κ³ , BASIC, SILVER, GOLD, PLATINUMλΌλŠ” 멀버듀을 μΆ”κ°€ν•œ 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 각 λ©€λ²„λŠ” ν•΄λ‹Ήν•˜λŠ” 등급을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.


μ‚¬μš©μž λ“±κΈ‰ μ‚¬μš©ν•˜κΈ°

μ—΄κ±°ν˜•μœΌλ‘œ μ‚¬μš©μž 등급을 ν‘œν˜„ν–ˆλ‹€λ©΄, 이λ₯Ό ν™œμš©ν•˜μ—¬ μ‚¬μš©μž 등급을 λ‹€λ£¨λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, νŠΉμ •ν•œ 쑰건에 따라 μ‚¬μš©μž 등급을 νŒλ³„ν•˜κ³  ν•΄λ‹Ήν•˜λŠ” 등급을 좜λ ₯ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    // μ‚¬μš©μž 정보 μž…λ ₯ λ°›κΈ°
    Scanner scanner = new Scanner(System.in);
    System.out.println("μ‚¬μš©μžμ˜ ν™œλ™μΌ 수λ₯Ό μž…λ ₯ν•˜μ„Έμš”: ");
    int activityDays = scanner.nextInt();

    // μ‚¬μš©μž λ“±κΈ‰ νŒλ³„
    UserLevel userLevel;
    if (activityDays >= 100) {
      userLevel = UserLevel.PLATINUM;
    } else if (activityDays >= 50) {
      userLevel = UserLevel.GOLD;
    } else if (activityDays >= 30) {
      userLevel = UserLevel.SILVER;
    } else {
      userLevel = UserLevel.BASIC;
    }

    // λ“±κΈ‰ 좜λ ₯
    System.out.println("μ‚¬μš©μž λ“±κΈ‰: " + userLevel);
  }
}

μœ„μ˜ μ½”λ“œλŠ” μ‚¬μš©μžμ˜ ν™œλ™μΌ 수λ₯Ό μž…λ ₯λ°›μ•„ ν•΄λ‹Ήν•˜λŠ” 등급을 νŒλ³„ν•˜κ³  좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€. ν™œλ™μΌ μˆ˜μ— 따라 if-else문을 μ‚¬μš©ν•˜μ—¬ 등급을 νŒλ³„ν•˜κ³ , UserLevel μ—΄κ±°ν˜• 멀버λ₯Ό μ‚¬μš©ν•˜μ—¬ 등급을 μ €μž₯ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ 등급을 좜λ ₯ν•©λ‹ˆλ‹€.


μš”μ•½ν•˜μžλ©΄, μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž 등급을 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ 각각의 등급을 λͺ…ν™•ν•˜κ³  κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆμ–΄ 가독성을 λ†’μ—¬μ€λ‹ˆλ‹€. μ‚¬μš©μž 등급을 μ—΄κ±°ν˜•μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ 였λ₯˜λ₯Ό λ°©μ§€ν•˜κ³ , μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μž 등급을 λ‹€λ£¨λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•ŒλŠ” μ—΄κ±°ν˜•μ„ ν™œμš©ν•΄λ³΄μ„Έμš”.

λŒ“κΈ€