JavaRush /Java Blog /Random-KO /Java์˜ Enum์— ๊ด€ํ•œ 15๊ฐ€์ง€ ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ(๋‹ต๋ณ€ ํฌํ•จ!)
Treefeed
๋ ˆ๋ฒจ 21

Java์˜ Enum์— ๊ด€ํ•œ 15๊ฐ€์ง€ ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ(๋‹ต๋ณ€ ํฌํ•จ!)

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์—ด๊ฑฐ( Enum )๋Š” Java 5 ์—์„œ ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ ๊ทธ ์ดํ›„๋กœ Java ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ๊ฝค ์ธ๊ธฐ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Java์˜ Enum์€ C๋‚˜ C++๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋‹ค์–‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฅ๋ฏธ๋กœ์šด ์‚ฌ์šฉ ์‚ฌ๋ก€๋„ ๋งŽ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ๋ช‡ ๊ฐ€์ง€๋Š” Java์—์„œ Enum์„ ์‚ฌ์šฉํ•˜๋Š” 10๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๊ธฐ์‚ฌ์—์„œ ๋ณธ ๊ฒƒ์ž…๋‹ˆ๋‹ค . ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ธ๊ธฐ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋งŽ์€ Java ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์—ฌ์ „ํžˆ Enum์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ Java ์ฝ”๋“œ์—์„œ Enum ์‚ฌ์šฉ์˜ ๋ณต์žก์„ฑ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Java์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” Enum์˜ ๊ธฐ๋Šฅ ์ด๋‚˜ Enum ์™ธ๋ถ€์—์„œ Enum์„ ์ธ์Šคํ„ด์Šคํ™”ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์งˆ๋ฌธํ•˜๋Š” ์—ฌ๋Ÿฌ ๋…์ž๋กœ๋ถ€ํ„ฐ ์ด๋Š” ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค . ์ธํ„ฐ๋ทฐ์—์„œ ์ด์— ๋Œ€ํ•ด ์งˆ๋ฌธ์„ ๋ฐ›์•˜๋‹ค๋Š” ์ ์„ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ธํ„ฐ๋ทฐ์—์„œ ์„ฑ๊ณตํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•™์Šต์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๊ธธ์„ ์—ฌ๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ ๋ชฉ๋ก์„ Java Enum์œผ๋กœ ์ž‘์„ฑํ•˜๋„๋ก ์˜๊ฐ์„ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค . ์ด์ „์— ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ์œผ๋กœ ์ธํ•ด ์ฃผ์ œ๋ฅผ ๋” ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‚˜์œ ์ผ์ด ์•„๋‹ˆ๋ฉฐ Enum์˜ ์„ฑ๋Šฅ๊ณผ ์œ ์šฉ์„ฑ์„ ๊ณ ๋ คํ•˜๋ฉด ์ด์ œ Enum ๋งˆ์Šคํ„ฐ๊ฐ€ ๋  ๋•Œ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ Enum์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ ์†์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์งˆ๋ฌธ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ๋ฉด์ ‘ ์ค€๋น„ ์ž๋ฃŒ๋กœ ํ™œ์šฉํ•˜์…”๋„ ์ข‹๊ณ , ๋‹จ์ˆœํžˆ ์—ด๊ฑฐํ˜• ์•ˆ๋‚ด์šฉ์œผ๋กœ ํ™œ์šฉํ•˜์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค. Java๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Enum์— ๋Œ€ํ•ด ์ƒˆ๋กญ๊ณ  ์œ ์šฉํ•œ ๋‚ด์šฉ์„ ๋งŽ์ด ๋ฐฐ์šฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 1) Enum์€ Java๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ, Enum์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . Enum ์œ ํ˜•์€ ํด๋ž˜์Šค ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค ์™€ ์œ ์‚ฌํ•˜๋ฏ€๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒฝ์šฐ์— ๋”ฐ๋ผ Enum์„ ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌํ˜„์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๋†€๋ผ์šด ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ด ์šฉ๋Ÿ‰์—์„œ Enum์„ ์‚ฌ์šฉํ•˜๋Š” ์ข‹์€ ์˜ˆ ์ž…๋‹ˆ๋‹ค . 2) Enum์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์†(ํ™•์žฅ)ํ•  ์ˆ˜ ์žˆ๋‚˜์š”? ์•„๋‹ˆ์š”, ๊ทธ๋Ÿด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค! ์ด์ „์— Enum ์œ ํ˜•์ด Java์˜ ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ๋งํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ๊ธ€์Ž„, ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ด์ „ ์งˆ๋ฌธ ๋ฐ”๋กœ ๋‹ค์Œ์— ์ด ์งˆ๋ฌธ์„ ๋ฌป๋Š” ์ฃผ๋œ ์ด์œ ์ž…๋‹ˆ๋‹ค. Enum ์€ ์ด๋ฏธ ์ถ”์ƒ ํด๋ž˜์Šค java.lang.Enum์„ ์ƒ์† ํ•˜๋ฏ€๋กœ Java๋Š” ๋‹ค์ค‘ ํด๋ž˜์Šค ์ƒ์†์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋Š” ์ƒ์†ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. java.lang.Enum ์—์„œ ์ƒ์†ํ•จ์œผ๋กœ์จ ๋ชจ๋“  ์—ด๊ฑฐํ˜•์—๋Š” ordinal() , value() ๋˜๋Š” valueOf() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . 3) ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค ์—†์ด Enum์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ์—†์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ? ๋ฉด์ ‘๊ด€๋“ค์ด ์ข‹์•„ํ•˜๋Š” ๊นŒ๋‹ค๋กœ์šด ์งˆ๋ฌธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค . Enum์€ ์š”์ผ ์ด๋‚˜ ์›”๊ณผ ๊ฐ™์€ ํŠน์ • ์ˆ˜์˜ ๊ฐ์ฒด ๋ชจ์Œ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฏ€๋กœ ์•„๋ฌด ๊ฒƒ๋„ ์—†์ด Enum์„ ์–ป๋Š” ๊ฒƒ์€ ์˜์‹ฌ์Šค๋Ÿฌ์›Œ ๋ณด์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ธ์Šคํ„ด์Šค ์—†์ด Enum์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์ด๊ฒƒ์€ Enum์„ ์‚ฌ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ํ˜์‹ ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. public enum MessageUtil{ ; // required to avoid compiler error, also signifies no instance public static boolean isValid() { throw new UnsupportedOperationException("Not supported yet."); } } 4) Enum์— ๋Œ€ํ•ด toString() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์žฌ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”? ๋ฌผ๋ก  Enum์˜ toString() ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. java.lang.Object๋ฅผ ์ƒ์† ํ•˜๊ณ  toString() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค . ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š๋”๋ผ๋„ ์ถ”์ƒํ™” ๋•Œ๋ฌธ์— ์•„๋ฌด๊ฒƒ๋„ ์žƒ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Enum ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ์ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  Enum ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์ธ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ Enum ํด๋ž˜์Šค์˜ toString() ๋ฉ”์„œ๋“œ ์— ๋Œ€ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค . public String toString() { return name; } name์€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ Enum ํด๋ž˜์Šค ์ž์ฒด์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ƒ์„ฑ์ž์—์„œ ์„œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์—ด๊ฑฐํ˜•์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ• ๋‹นํ•  ๋•Œ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. java.lang.Enum ํด๋ž˜์Šค : protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } ์ด๊ฒƒ์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ Enum ์„ ์–ธ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ํ˜ธ์ถœ๋˜๋Š” enum ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์œ ์ผํ•œ ์ƒ์„ฑ์ž ์ž…๋‹ˆ๋‹ค. 5) Enum ์™ธ๋ถ€์—์„œ Enum์„ ์ธ์Šคํ„ด์Šคํ™”ํ•  ์ˆ˜ ์žˆ๋‚˜์š”? ์™œ ์•ˆ ๋ผ? Enum์—๋Š” ๊ณต๊ฐœ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— Enum ๊ฒฝ๊ณ„ ์™ธ๋ถ€์—์„œ Enum์„ ์ธ์Šคํ„ด์Šคํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค . ์ƒ์„ฑ์ž์ด๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ๋Š” ๊ทธ๋Ÿฌํ•œ ์ƒ์„ฑ์ž๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” Enum ์œ ํ˜• ์„ ์–ธ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— Enum ๋‚ด์˜ ๊ณต์šฉ ์ƒ์„ฑ์ž๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ Enum ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์„ ์–ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 6) Enum ๋‚ด๋ถ€์— ์ƒ์„ฑ์ž๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‚˜์š”? ์ด ์งˆ๋ฌธ์€ ์ด์ „ ์งˆ๋ฌธ ๋’ค์— ์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์˜ˆ, ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ์ „์šฉ ๋˜๋Š” ํŒจํ‚ค์ง€ ์ „์šฉ ์ƒ์„ฑ์ž์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”. public ๋ฐ protected ์ƒ์„ฑ์ž๋Š” Enum์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์˜ˆ ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . 7) == ๋˜๋Š” equals() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Enum์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์—ฌ๊ธฐ ์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃจ๋Š” ๋งค์šฐ ๊ด‘๋ฒ”์œ„ํ•˜๊ณ  ๊นŒ๋‹ค๋กœ์šด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค . 8) Enum์—์„œ ordinal() ๋ฉ”์†Œ๋“œ๋Š” ๋ฌด์—‡์„ ํ•ฉ๋‹ˆ๊นŒ? ordinal() ๋ฉ”์„œ๋“œ๋Š” Enum ์ธ์Šคํ„ด์Šค๊ฐ€ Enum ๋‚ด์—์„œ ์ง€์ •๋œ ์ˆœ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด DayOfWeek Enum์—์„œ๋Š” ์š”์ผ์„ ์ˆœ์„œ๋Œ€๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DayOfWeek.MONDAY.ordinal() public enum DayOfWeek{ MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; } ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด 0์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์Šคํ„ด์Šค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์‹ค์ œ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ˆœ์„œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, TUESDAY (ํ™”์š”์ผ)๊ฐ€ MONDAY (์›”์š”์ผ) ์ดํ›„ , WEDNESDAY (์ˆ˜์š”์ผ) ์ด์ „์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๋„์˜ ์›”์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 2์›”์€ 1์›” ๋’ค์— ์˜ค๊ณ  3์›” ์•ž์— ์˜ต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ •์˜ ์—ด๊ฑฐํ˜•์€ ์ถ”์ƒ ํด๋ž˜์Šค java.lang.Enum ์—์„œ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์†ํ•˜๋ฉฐ ์ด๋ฆ„๊ณผ ์„œ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” java.lang.Enum ์—์„œ ๋ณดํ˜ธ๋œ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค . 9) Java์—์„œ TreeSet ๋˜๋Š” TreeMap๊ณผ ํ•จ๊ป˜ Enum์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์ •๋ง ํฅ๋ฏธ๋กœ์šด Enum ์งˆ๋ฌธ์ด๋ฉฐ ์‚ฌ๋žŒ๋“ค์ด ์ง€์‹์˜ ๊นŠ์ด๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๋ฌป๊ณ  ์‹ถ์–ดํ•˜๋Š” ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. java.lang.Enum ์ฝ”๋“œ๋ฅผ ๋ณด๊ธฐ ์ „๊นŒ์ง€๋Š” Enum์ด TreeSet ๋ฐ TreeMap ๊ณผ ๊ฐ™์€ ์ •๋ ฌ๋œ ์ปฌ๋ ‰์…˜์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ์š”๊ตฌ ์‚ฌํ•ญ์ธ Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค . Enum์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜๋ฏ€๋กœ TreeSet ๋ฐ TreeMap ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . 10) Enum์—์„œ ordinal()๊ณผ CompareTo()์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๋Š” ์ด์ „ ์งˆ๋ฌธ์—์„œ ๋ฐ”๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ CompareTo()๋Š” ๋ฉ”์„œ๋“œ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ˆœ์„œ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. Enum์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ์ˆœ์„œ์ธ ordinal() ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ Enum์€ ์„ ์–ธ๋œ ์ˆœ์„œ๋Œ€๋กœ ๋น„๊ต๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋Ÿฌํ•œ ์ƒ์ˆ˜๋Š” ๋™์ผํ•œ ์œ ํ˜•์˜ ๋‹ค๋ฅธ ์ƒ์ˆ˜์™€๋งŒ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ์ƒ์ˆ˜๋ฅผ ๋น„๊ตํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 11) ์Šค์œ„์น˜ ์ผ€์ด์Šค์—์„œ Enum์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”? ๊ทธ๋ž˜ ๋„Œ ํ• ์ˆ˜์žˆ์–ด. ๊ฒŒ๋‹ค๊ฐ€ ์ด๋Š” Enum์„ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ์ด์  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. Enum ์ธ์Šคํ„ด์Šค๋Š” ์ž„์‹œ ์ƒ์ˆ˜๋กœ ์ปดํŒŒ์ผ๋˜๋ฏ€๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ผ€์ด์Šค ๋ฐ ์Šค์œ„์น˜ ๋‚ด๋ถ€์— ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ๋‹ค์Œ์€ ์š”์ผ์ด ํฌํ•จ๋œ ์ฝ”๋“œ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. public void developerState(DayOfWeek today){ switch(today){ case MONDAY: System.out.println("Hmmmmmmmm"); break; case TUESDAY: System.out.println("Hmmmm"); break; case FRIDAY : System.out.println("Yeahhhhhh"); break; } } Enum๊ณผ Switch๋Š” ์„œ๋กœ๋ฅผ ์ž˜ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ Enum์— ์†Œ์ˆ˜์˜ ์•ˆ์ •์ ์ธ ์ƒ์ˆ˜(์˜ˆ: ์ผ์ฃผ์ผ ์ค‘ 7์ผ, 1๋…„ ์ค‘ 12๊ฐœ์›” ๋“ฑ)๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. Enum๊ณผ ํ•จ๊ป˜ swith ์ผ€์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์˜ˆ์ž…๋‹ˆ๋‹ค . 12) ์ „์ฒด Enum ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? java.lang.Enum ์„ ์—ด์—ˆ๋‹ค๋ฉด value() ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ชจ๋“  Enum ์ƒ์ˆ˜์˜ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ๋ชจ๋“  ์—ด๊ฑฐํ˜•์€ java.lang.Enum ์„ ์ƒ์†ํ•˜๋ฏ€๋กœ value() ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค . ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์œ ํ˜•์˜ ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜๋ฅผ ๋ชจ๋‘ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. foreach ๋ฃจํ”„ ์™€ value() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง„ํ–‰๋˜๋Š” ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด์„ธ์š” . 13) Enum์„ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์žฅ์ ๊ณผ ๋‹จ์ ์ด ์žˆ๋‚˜์š”? Enum์€ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ๊ตฌํ˜„์„ ์œ„ํ•œ ๋น ๋ฅธ ์ง€๋ฆ„๊ธธ์„ ์ œ๊ณตํ•˜๋ฉฐ , Effective Java ์ฑ…์—์„œ๋„ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— ์ธ๊ธฐ ์žˆ๋Š” ์„ ํƒ์ž…๋‹ˆ๋‹ค. ์–ธ๋œป ๋ณด๊ธฐ์— Enum ์‹ฑ๊ธ€ํ†ค์€ ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ์ œ์–ดํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฌด์—‡๋ณด๋‹ค๋„ Enum์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ์‹ฑ๊ธ€ํ†ค์„ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์œ ๋งํ•˜๊ณ  ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋” ์ด์ƒ ๋ณ€์ˆ˜์˜ ๋ณ€๋™์„ฑ์„ ์ด์ค‘์œผ๋กœ ํ™•์ธํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์žฅ์ ๊ณผ ๋‹จ์ ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š” . 14) int ์—ด๊ฑฐํ˜•๊ณผ String ์—ด๊ฑฐํ˜• ํŒจํ„ด ๋Œ€์‹  Enum์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์ด์ ์ด ์žˆ๋‚˜์š”? 5๋…„ ์ด์ƒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•ด์™”๊ณ  ์—ฌ์ „ํžˆ JDK 1.3 ๋˜๋Š” 1.4๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๊ณต์šฉ ์ •์  ์ตœ์ข… ์ƒ์ˆ˜ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž˜ ์•Œ๋ ค์ง„ ๊ณ ์ • ์ƒ์ˆ˜ ์ปฌ๋ ‰์…˜์„ ๋‚˜ํƒ€๋‚ด๋Š” String ๋ฐ int ์—ด๊ฑฐ ํŒจํ„ด ์— ์ต์ˆ™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Days of the Week ์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ•ญ๋ชฉ . ์—ฌ๊ธฐ์—๋Š” ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์ผ์„ ๋‹ด๋‹นํ•˜๋Š” String ๋ณ€์ˆ˜๋Š” ์ž„์˜์˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Enum ์œ ํ˜•์— ๋Œ€ํ•ด ๋…๋ฆฝ์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค . ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ด๊ฑฐ ๊ฐ€๋Šฅํ•œ int๋Š” ์–ด๋–ค ๊ฐ’์ด๋“  ์ทจํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด๋ฅผ ๊ธฐ๊บผ์ด ๋ฐ›์•„๋“ค์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉํ•˜์—ฌ Enum ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ™•์ธํ•˜๋Š” ์œ ํ˜• ์•ˆ์ „์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  Java ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ถŒ์žฅ๋˜๋Š” Effective Java์—๋Š” ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด ์ƒ๊ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 15) ๋ฌธ์ž์—ด์„ Enum์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—์„œ String ๋ฐ Enum ์‚ฌ์šฉ์ด ์ธ๊ธฐ๋ฅผ ๋Œ๋ฉด์„œ ๋งค์ผ ์ œ๊ธฐ๋˜๋Š” ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค . Enum์„ String์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ String ์ธ์ˆ˜๋ฅผ ๊ฐ€์ ธ์™€ Enum ์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” Enum ์ž์ฒด์— ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค . ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ฌธ์ž์—ด์„ ์—ด๊ฑฐํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ ์ž…๋‹ˆ๋‹ค . ์ด๊ฒƒ์œผ๋กœ Enum์— ๊ด€ํ•œ 15๊ฐ€์ง€ ์งˆ๋ฌธ( ๋ฐ ๋‹ต๋ณ€ ) ๋ชฉ๋ก์ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค . ํ•˜์ง€๋งŒ ๊ธฐ์–ตํ•˜์„ธ์š”. ๋…์„œ๋Š” ๋ฐฐ์šฐ๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‹จ์ง€ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค . ์—ด๊ฑฐํ˜•์˜ ์ด์ ์„ ์–ป์œผ๋ ค๋ฉด ํ”„๋กœ์ ํŠธ์—์„œ Enum์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ฐพ์œผ์‹ญ์‹œ์˜ค. ์ด๋Š” ์‹ค์ œ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ๊ฒƒ์ด๋ฉฐ ์ด ๊ฒฝํ—˜์„ ํ†ตํ•ด ์˜ˆ์ œ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์šฐ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•˜๊ณ  ์ƒ์„ธํ•œ ๋ฐฉ๋ฒ• ์š”๊ตฌ ์‚ฌํ•ญ. Enum์— ๋Œ€ํ•œ ์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์€ ์ง€์‹์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ธํ„ฐ๋ทฐ๋ฅผ ์„œ๋‘๋ฅด๊ณ  Enum ์„ธ๊ณ„์— ์ž์„ธํžˆ ๋ชฐ์ž…ํ•  ์‹œ๊ฐ„์ด ์—†๋Š” ๊ฒฝ์šฐ ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION