CodeGym /ํ–‰๋™ /All lectures for KO purposes /๏ปฟ์—ด๊ฑฐํ˜• ์‹ฑ๊ธ€ํ†ค

๏ปฟ์—ด๊ฑฐํ˜• ์‹ฑ๊ธ€ํ†ค

All lectures for KO purposes
๋ ˆ๋ฒจ 1 , ๋ ˆ์Šจ 646
์‚ฌ์šฉ ๊ฐ€๋Šฅ

์ตœ๊ทผ์— ์‹ฑ๊ธ€ํ†ค ๋””์ž์ธ ํŒจํ„ด , Java์—์„œ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฐ ์šฉ๋„์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Java๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž์ฒด ์‹ฑ๊ธ€ํ†ค๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋œ๋‹ค๊ณ  ๋งํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? ํฅ๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿผ ๋‹ค์ด๋น™ํ•ฉ์‹œ๋‹ค.

์ด๋ฏธ Enum ํด๋ž˜์Šค ์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค . ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์ด ์•Œ์•„์•ผ ํ•  ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Enum์€ ์‹ฑ๊ธ€ํ†ค ๋””์ž์ธ ํŒจํ„ด์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ ๊ณต์šฉ ํ•„๋“œ ์™€ ๊ด€๋ จ๋œ ์‹ฑ๊ธ€ํ†ค ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค .

์—ด๊ฑฐํ˜•์œผ๋กœ์„œ์˜ ์‹ฑ๊ธ€ํ†ค:


public enum Device {   
    PRINTER	
} 
    

๊ณต์šฉ ๋ณ€์ˆ˜๋กœ์„œ์˜ ์‹ฑ๊ธ€ํ†ค:


public class Printer {   
    public static final Printer PRINTER = new Printer();   
    private Printer() {
    }
//โ€ฆ
}
    

์—ด๊ฑฐ ํ˜• ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ž์ฒด ๊ตฌํ˜„์„ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฐœ ํ•„๋“œ ์ ‘๊ทผ ๋ฐฉ์‹๋ณด๋‹ค ๋” ๊ฐ„๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์—ด๊ฑฐํ˜•์ด ์ง๋ ฌํ™”์— ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ด๊ฑฐํ˜•์˜ ์ง๋ ฌํ™”๋Š” ์ผ๋ฐ˜ ๊ฐ์ฒด์™€ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์—ด๊ฑฐํ˜• ์ด๋ฆ„์˜ ๊ฐ’๋งŒ ์ง๋ ฌํ™”๋ฉ๋‹ˆ๋‹ค. ์—ญ์ง๋ ฌํ™” ์ค‘์— ๋ฉ”์„œ๋“œ๋Š” ์—ญ์ง๋ ฌํ™”๋œ ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋˜ํ•œ enum์€ ๋ฐ˜์‚ฌ ๊ณต๊ฒฉ ์œผ๋กœ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž๋ฅผ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

Reflection API๋ฅผ ์‚ดํŽด๋ณด๋Š” ๋‘ ๋ฒˆ์งธ ๋ชจ๋“ˆ์˜ ์ˆ˜์—…์—์„œ ๋ฆฌํ”Œ๋ ‰์…˜์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค .

Java๋Š” enum์˜ ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Constructor ํด๋ž˜์Šค์˜ newInstance ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ ์— ์ ์šฉ๋œ ์ œํ•œ ์‚ฌํ•ญ์œผ๋กœ , ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž์ฃผ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

Constructor.newInstance ์—์„œ ๋ฐœ์ทŒํ•œ ์ฝ”๋“œ . ์—ด๊ฑฐํ˜•์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค .


if ((clazz.getModifiers() & Modifier.ENUM) != 0)
    throw new IllegalArgumentException("Cannot reflectively create enum objects");
    

์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ฑ๊ธ€ํ†ค์„ ๋งŒ๋“œ๋Š” ๋‹จ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ฐœ์ฒด๊ฐ€ ์ฆ‰์‹œ ์ƒ์„ฑ๋˜๊ณ  ์ดˆ๊ธฐํ™”๋ฅผ ์ง€์—ฐํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ง€์—ฐ ์ดˆ๊ธฐํ™”๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹ค๋ฅธ ํด๋ž˜์Šค๋Š” ํ™•์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์—ด๊ฑฐ ํ˜•์„ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์ •์  ๋ฉ”์„œ๋“œ ๋˜๋Š” ๊ณต์šฉ ๋ณ€์ˆ˜์™€ ๊ฐ™์ด ์ด๋ฏธ ์ต์ˆ™ํ•œ ๋‹ค๋ฅธ ๊ตฌํ˜„ ์˜ต์…˜์œผ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • enum์„ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ enum ํ•„๋“œ ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .


public enum Device extends Electricity { 
    PRINTER 
}
    

์ด ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

enum์—๋Š” ํ™•์žฅ ์ ˆ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ enum์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค .


public enum Device implements Electricity { 
    PRINTER 
}
    

์ƒ์†์„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด enum ์„ ํ†ตํ•ด ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค . ์ด๊ฒƒ์„ ๊ถŒ์žฅํ•˜๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ๋งŒ์ด ์•„๋‹™๋‹ˆ๋‹ค. Joshua Bloch ์ž์‹ ๋„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค .

์ด ๊ตฌํ˜„ ๋ฐฉ์‹์€ ํŽธ๋ฆฌํ•จ, ์†Œํ˜•ํ™”, ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ง๋ ฌํ™”, ๋ฐ˜์‚ฌ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ์˜ ๋ณดํ˜ธ, ๊ณ ์œ ์„ฑ ๋“ฑ ์ข‹์€ ์‹ฑ๊ธ€ํ†ค์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค!

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION