Week11(Enum)

Enum์ด๋ž€?

  • ์—ด๊ฑฐ์ฒด๋ผ๊ณ  ํ•ด์„œ enumeration type์ด๋‹ค.

  • ํด๋ž˜์Šค์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•˜๋Š” ์ƒ์ˆ˜

    • ์ƒ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— equalsํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ '=='๋กœ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค!!

  • ์„œ๋กœ ๊ด€๋ จ ์žˆ๋Š” ์ƒ์ˆ˜๋“ค์„ ๋ชจ์•„ ์‹ฌ๋ณผ๋ฆญํ•œ ๋ช…์นญ์˜ ์ง‘ํ•ฉ์œผ๋กœ ์ •์˜ํ•œ ๊ฒƒ

  • Enum ํด๋ž˜์Šคํ˜•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ํด๋ž˜์Šคํ˜• ์„ ์–ธ

  • ์ƒˆ๋กœ์šด ์—ด๊ฑฐํ˜•์„ ์„ ์–ธํ•˜๋ฉด, ๋‚ด๋ถ€์ ์œผ๋กœ Enum ํด๋ž˜์Šคํ˜• ๊ธฐ๋ฐ˜์˜ ์ƒˆ๋กœ์šด ํด๋ž˜์Šคํ˜•์ด ๋งŒ๋“ค์–ด์ง

์žฅ์ 

  • ๋ฌธ์ž์—ด๊ณผ ๋น„๊ตํ•ด์„œ ์ž๋™์™„์„ฑ, ์˜คํƒ€๊ฒ€์ฆ, ํ…์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ง€์›์„ ๋ฐ›๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ

  • ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ’๋“ค์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Œ

  • ์—ด๊ฑฐ์ฒด๋ฅผ ๋น„๊ตํ•  ๋–„ ์‹ค์ œ ๊ฐ’๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํƒ€์ž…๊นŒ์ง€๋„ ์ฒดํฌ

  • ์—ด๊ฑฐ์ฒด์˜ ์ƒ์ˆซ๊ฐ’์ด ์žฌ์ •์˜๋˜๋”๋ผ๋„ ๋‹ค์‹œ ์ปดํŒŒ์ผ ํ•  ํ•„์š”๊ฐ€ ์—†์Œ

Enum์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

Java์—์„œ enum(์—ด๊ฑฐ ์ƒ์ˆ˜)๋Š” ์„ ์–ธํ•˜๊ฒŒ ๋˜๋ฉด ๋ชจ๋‘๋ฅผ public static final๋กœ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ Static์ด๋ž€ ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™๊ธฐ ๋•Œ๋ฌธ์— static์ด ๋ถ™์€ ๊ฒƒ๋“ค์€ jvm์—์„œ์˜ method์˜์—ญ์— ํ• ๋‹น๋˜๊ฒŒ ๋˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ๋„๋Š” ๋™์•ˆ์—๋Š” ์›ํ•˜๋Š” ๋Œ€๋กœ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

enum์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ๋”ฐ๋กœ new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€๋Š” ์•Š๋Š”๋‹ค.

enumํƒ€์ž…์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค๋ฉด,

๊ทธ ์ˆœ๊ฐ„ jvm์˜ heap ์˜์—ญ์— ๋ชจ๋“  enumํƒ€์ž…์ด ์ƒ์„ฑ๋˜๊ฒŒ ๋œ๋‹ค. (heap์˜์—ญ์ด๋ž€ newํ‚ค์›Œ๋“œ ๋“ฑ์„ ํ†ตํ•ด ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋“ค์ด ๋“ค์–ด๊ฐ€๋Š” ์˜์—ญ์ด๋‹ค)

๊ทธ๋ฆฌ๊ณ  method ์˜์—ญ์— ์ƒ์„ฑ๋œ enum์— heap์˜์—ญ์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์ด ํ• ๋‹น๋œ๋‹ค.

๊ทธ๋ ‡๊ฒŒ๋œ๋‹ค๋ฉด, ์‹ค์ œ๋กœ ๊ฐ์ฒด๋กœ์จ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜๋Š” stack์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋Š”๋ฐ stack์—์„œ method์— ์žˆ๋Š” ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฌ๋ฉด method์™€ heap ๋‘˜๋‹ค ๋ชจ๋‘ ๊ฐ™์€ heap์˜์—ญ์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค!

Enum์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ฃผ์˜ : enum ์—ด๊ฑฐํ˜•์œผ๋กœ ์ง€์ •๋œ ์ƒ์ˆ˜๋Š” ๋Œ€๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋งˆ์ง€๋ง‰์— ; ์„ ๋ถ™ํžˆ์ง€ ์•Š๋Š”๋‹ค!

  1. ํ•˜๋‚˜์˜ ์ž๋ฐ” ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์„œ ์„ ์–ธ

ํŒŒ์ผ ์ƒ์„ฑํ•  ๋–„ enumํŒŒ์ผ ์„ ํƒํ•˜๊ฒŒ๋˜๋ฉด ์›๋ž˜์˜ class ์ž๋ฆฌ์— enum์ด ๋“ค์–ด๊ฐ

์‚ฌ์šฉํ•  ๋•Œ๋Š”

Enum์œผ๋กœ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ ์ด๋ฆ„(subject) ์„ String์ด๋‚˜ int์™€ ๊ฐ™์€ ํƒ€์ž…์œผ๋กœ ๋‘๊ณ  ์‚ฌ์šฉ

  1. ํด๋ž˜์Šค ์•ˆ์—์„œ ์„ ์–ธํ•˜๊ธฐ

ํ•„์š”ํ• ๋•Œ enum ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์›ํ•˜๋Š” ์š”์†Œ๋“ค์„ ์ง‘์–ด๋„ฃ์–ด์ฃผ๊ณ  ์‚ฌ์šฉ

  1. ํด๋ž˜์Šค ๋ฐ–์—์„œ ์„ ์–ธํ•˜๊ธฐ

์„ ์–ธ์„ ํ•˜๊ณ  ๋‚˜์„œ ์‚ฌ์šฉ์€ ์ด๋ ‡๊ฒŒ ํ•œ๋‹ค

๋ฐ์ดํ„ฐ ํƒ€์ž…์ฒ˜๋Ÿผ ์„ ์–ธํ•˜๊ณ , enum์ด๋ฆ„.enum์š”์†Œ ๋ฐฉ์‹์œผ๋กœ ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

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

  • values() : ๋ชจ๋“  enum์˜ ์š”์†Œ๋“ค์„ ๋ฐฐ์—ด์œผ๋กœ ์ƒ์„ฑ

    • valuesํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ enum์˜ ์š”์†Œ๋“ค์„ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜๋Š” ์˜ˆ์‹œ

  • valueOf() : ๋ฌธ์ž์—ด๋กœ enum ์š”์†Œ์˜ ์ด๋ฆ„์„ ์ฐพ์•„์„œ ์š”์†Œ์˜ ์ด๋ฆ„์„ ๋ฆฌํ„ด

  • name() : ํ˜ธ์ถœ๋œ ๊ฐ’์˜ ์ด๋ฆ„์„ String์œผ๋กœ ๋ฆฌํ„ด

  • ordinal() : ํ•ด๋‹น ๊ฐ’์ด enum์ด ์ •์˜๋œ ์ˆœ์„œ๋ฅผ ์ •์ˆ˜๊ฐ’์œผ๋กœ ๋ฆฌํ„ด

    • ์ด๊ฒƒ์€ ์–ธ์ œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋–„๋ฌธ์— ์‚ฌ์šฉ์„ ๋œ ํ•œ๋‹ค

    • (์‹ฌ์ง€์–ด ์ฐพ์•„๋ณด๋‹ˆ๊นŒ Most programmer๋“ค์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ฃผ์„์œผ๋กœ๋„ ์ ํ˜€์žˆ์—ˆ๋‹ค!)

  • compareTo(E o ) : enum๊ณผ ์ง€์ •๋œ ๊ฐ์ฒด์˜ ์ˆœ์„œ๋ฅผ ๋น„๊ต, ์ง€์ •๋œ ๊ฐ์ฒด๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ, ์Œ์˜ ์ •์ˆ˜, ๋™์ผํ•˜๋ฉด 0, ํฌ๋ฉด ์–‘์˜ ์ •์ˆ˜ ๋ฆฌํ„ด

  • equals(Object other) : ์ง€์ •๋œ ๊ฐ์ฒด๊ฐ€ enum ์ •์ˆ˜์™€ ๊ฐ™์€๊ฒฝ์šฐ, true๋ฅผ ๋ฆฌํ„ด

java.lang.Enum

Enum ํด๋ž˜์Šค๋Š” ๋ชจ๋“  ์ž๋ฐ” ์—ด๊ฑฐ์ฒด์˜ ๊ณตํ†ต๋œ ์กฐ์ƒ ํด๋ž˜์Šค

Enum ํด๋ž˜์Šค์—๋Š” ์—ด๊ฑฐ์ฒด๋ฅผ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์Œ

์œ ์ผํ•œ ์ƒ์„ฑ์ž

protected Enum(String name, int ordinal) : ์œ ์ผํ•œ ์ƒ์„ฑ์ž๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ด ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Œ

์—ด๊ฑฐํ˜• ์„ ์–ธ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ๋‚ด๋ณด๋‚ธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉ

EnumSet

java.util์— ์กด์žฌํ•˜๋ฉฐ, class EnumSet>์ด๋ ‡๊ฒŒ ์„ ์–ธํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•œ๋‹ค

EnumSet์€ ์—ด๊ฑฐํ˜• ์œ ํ˜•๊ณผ ํ•จ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ set๊ตฌํ˜„์ฒด์ด๋‹ค.

๋ฐ˜๋ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ์— ์˜ํ•ด ๋ฆฌํ„ด๋œ ๋ฐ˜๋ณต๊ธฐ๋Š” ์—ด๊ฑฐ ํ˜• ์ƒ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์ˆœ์„œ๋กœ ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ, ๋ฆฌํ„ด๋œ ๋ฐ˜๋ณต๊ธฐ๋Š” ์•ฝํ•˜๊ฒŒ ์ผ๊ด€์„ฑ์ด ์žˆ์Œ

Null ์š”์†Œ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋งŒ์•ฝ null ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋ ค๊ณ  ํ•˜๋ฉด NullPointerException์ด ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ null์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋‹จ๊ณ„๋‚˜ ์ œ๊ฑฐํ•˜๋ ค๋Š” ์‹œ๋„๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค

EnumSet์€ ๋™๊ธฐํ™”๋˜์ง€ ์•Š๋Š”๋‹ค. ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์—ด๊ฑฐํ˜• ์ง‘ํ•ฉ์— ์ ‘๊ทผํ•˜๊ณ  ์ ์–ด๋„ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ง‘ํ•ฉ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ์— ์™ธ๋ถ€์—์„œ ๋™๊ธฐํ™”๋˜์–ด์•ผ ํ•œ๋‹ค.

๋ฉ”์†Œ๋“œ๋“ค

  • allOf : ์ง€์ •๋œ ์š”์†Œ ํƒ€์ž…์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” enum set์„ ๋งŒ๋“ฌ

  • noneOf : ์ง€์ •๋œ ์š”์†Œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นˆ enum set์„ ๋งŒ๋“ฌ

Type Safety

tip) ๊ฐ’์„ ๋งค๊ธฐ๊ณ  ์ˆœ์„œ๋ฅผ ์ •ํ• ๋•Œ๋Š” 1,2,3... ์ด๋ ‡๊ฒŒ ๊ฐ€๋Š”๊ฒŒ์•„๋‹ˆ๋ผ 10,20,30 ์ด๋ ‡๊ฒŒ ์ˆœ์„œ๋ฅผ ๋งค๊ธฐ๋ฉด ํŽธํ•˜๋‹ค! => ์‚ฌ์ด์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ์ผ์ด ์ƒ๊ธธ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—!

์ฐธ๊ณ 

https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html

https://www.opentutorials.org/module/1226/8025

https://limkydev.tistory.com/66

https://parkadd.tistory.com/50

Last updated

Was this helpful?