[Java] Enum (์—ด๊ฑฐํ˜•)

2021. 6. 20. 21:35ใ†๊ฐœ๋… ์ •๋ฆฌ ์ž‘์—…์‹ค/Java

728x90
๋ฐ˜์‘ํ˜•
Enum์ด๋ž€?

์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์—ด๊ฑฐํ˜•(enumerated type, enumeration), ์ด๋„˜(enum), ํŒฉํ„ฐ(factor โ† R ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ํ†ต๊ณ„ํ•™์˜ ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜์—์„œ ๋ถ€๋ฅด๋Š” ๋ช…์นญ)๋Š” ์š”์†Œ, ๋ฉค๋ฒ„๋ผ ๋ถˆ๋ฆฌ๋Š” ๋ช…๋ช…๋œ ๊ฐ’์˜ ์ง‘ํ•ฉ์„ ์ด๋ฃจ๋Š” ์ž๋ฃŒํ˜•์ธ ๊ฒƒ์ด์—์š”.

์—ด๊ฑฐ์ž ์ด๋ฆ„๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด๋‹น ์–ธ์–ด์˜ ์ƒ์ˆ˜ ์—ญํ• ์„ ํ•˜๋Š” ์‹๋ณ„์ž์ด์ง€์š”.

์ผ๋ถ€ ์—ด๊ฑฐ์ž ์ž๋ฃŒํ˜•์€ ์–ธ์–ด์— ๊ธฐ๋ณธ ์†Œ์†๋˜์–ด ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. ๋ถˆ๋ฆฌ์–ธ ์ž๋ฃŒํ˜•์„ ์˜ˆ๋กœ ๋“ค๋ฉด ๊ฑฐ์ง“(False)๊ณผ ์ฐธ(True)์˜ ๊ฐ’์ด ๋ฏธ๋ฆฌ ์ •์˜๋œ ์—ด๊ฑฐํ˜•์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์ง€์š”. ์ˆ˜๋งŽ์€ ์–ธ์–ด๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ์ƒˆ๋กœ์šด ์—ด๊ฑฐํ˜•์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ  ์žˆ๋‹ต๋‹ˆ๋‹ค.

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

 

์งง๊ฒŒ ์ •๋ฆฌํ•˜์ž๋ฉด '์„œ๋กœ ์—ฐ๊ด€๋œ ์ƒ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ'์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

enum์€ Class, Interface์™€ ๋™๊ธ‰์˜ ํ˜•์‹์„ ๊ฐ€์ง€๋Š” ๋‹จ์œ„์ธ ๊ฒƒ์ด์—์š”. ํ•˜์ง€๋งŒ, enum์€ ์‚ฌ์‹ค Class๋ผ๊ณ  ๋ด์•ผ ํ•œ๋‹ต๋‹ˆ๋‹ค.

ํŽธ์˜๋ฅผ ์œ„ํ•ด enum๋งŒ์„ ์œ„ํ•œ ๋ฌธ๋ฒ•์  ํ˜•์‹์„ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด enum์ด๋ผ๋Š” Key Word๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—์š”. 

 

enum Fruit{
    APPLE, PEACH, BANANA;
}

enum Company{
    GOOGLE, APPLE, ORACLE;
}
 
public class ConstantDemo {
     
    public static void main(String[] args) {
        /*
        if(Fruit.APPLE == Company.APPLE){
            System.out.println("๊ณผ์ผ ์• ํ”Œ๊ณผ ํšŒ์‚ฌ ์• ํ”Œ์ด ๊ฐ™๋‹ค.");
        }
        */
        Fruit type = Fruit.APPLE;
        switch(type){
            case APPLE:
                System.out.println(57+" kcal");
                break;
            case PEACH:
                System.out.println(34+" kcal");
                break;
            case BANANA:
                System.out.println(93+" kcal");
                break;
        }
    }
}
 
enum Fruit{
    APPLE, PEACH, BANANA;
}

 

 

์œ„์™€ ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๊ฐ™์€ ๋‚ด์šฉ์ธ ๊ฒƒ์ด์—์š”.

class Fruit{
    public static final Fruit APPLE  = new Fruit();
    public static final Fruit PEACH  = new Fruit();
    public static final Fruit BANANA = new Fruit();
    private Fruit(){}
}

 

๊ธฐ๋ณธ ์ƒ์„ฑ์ž์˜ ์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ Private์ธ ๊ฒƒ์ด ๋ณด์ด์‹œ๋‚˜์š”?

๊ทธ๊ฒƒ์ด Class Fruit๋ฅผ ์ธ์Šคํ„ด์Šค๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

์•„๋ž˜ ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ ์‹œ Exception์ด ๋ฐœ์ƒํ•  ๊ฒƒ์ด์—์š”.

if(Fruit.APPLE == Company.APPLE){
    System.out.println("๊ณผ์ผ ์• ํ”Œ๊ณผ ํšŒ์‚ฌ ์• ํ”Œ์ด ๊ฐ™๋‹ค.");
}

์™œ๋ƒํ•˜๋ฉด? enum์ด ์„œ๋กœ ๋‹ค๋ฅธ ์ƒ์ˆ˜ Group์— ๋Œ€ํ•œ ๋น„๊ต๋ฅผ ์ปดํŒŒ์ผ ์‹œ์ ์—์„œ ์ฐจ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ์ด์—์š”.

 

โœ” Enum๊ณผ ์ƒ์„ฑ์ž


enum์€ ์‚ฌ์‹ค Class์ธ ๊ฒƒ์ด์—์š”. ๋•Œ๋ฌธ์— ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค!

enum Fruit{
    APPLE, PEACH, BANANA;
    
    Fruit(){
        System.out.println( "Call Constructor " + this );
    }
}


// ๊ฒฐ๊ณผ

Call Constructor APPLE
Call Constructor PEACH
Call Constructor BANANA
57 kcal

Call Constructor๊ฐ€ ์ถœ๋ ฅ๋œ ๊ฒƒ์€ ์ƒ์„ฑ์ž Fruit๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด์—์š”. ์ด๊ฒƒ์ด 3๋ฒˆ ํ˜ธ์ถœ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€?

ํ•„๋“œ(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜)์˜ ์ˆซ์ž๋งŒํผ ํ˜ธ์ถœ๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ๋ž๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ enum์€ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

ํ•˜์ง€๋งŒ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์ปดํŒŒ์ผ ์‹œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์ด์—์š”.

enum Fruit{
    APPLE, PEACH, BANANA;
    
    public Fruit(){
        System.out.println( "Call Constructor " + this );
    }
}

์ด๊ฒƒ์€ enum์˜ ์ƒ์„ฑ์ž๊ฐ€ ์ ‘๊ทผ ์ œ์–ด์ž 'Private๋งŒ์„ ํ—ˆ์šฉ' ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ž๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ Fruit๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒƒ์ด์—์š”. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜(APPLE...)์˜ ๊ฐ’์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์ธ ๊ฒƒ์ด์—์š”.

 

enum Fruit{
    APPLE("red"), PEACH("pink"), BANANA("yellow");
    
    public String color;
    
    Fruit(String color){
        System.out.println( "Call Constructor " + this );
       
        this.color = color;
    }
}
 
public class ConstantDemo {
     
    public static void main(String[] args) {
 
        Fruit type = Fruit.APPLE;
        switch(type){
            case APPLE:
                System.out.println( 57 + " kcal, " + Fruit.APPLE.color );
                break;
            case PEACH:
                System.out.println( 34 + " kcal " + Fruit.PEACH.color );
                break;
            case BANANA:
                System.out.println( 93 + " kcal"+Fruit.BANANA.color );
                break;
        }
    }
}


/* ์‹คํ–‰ ๊ฒฐ๊ณผ

Call Constructor APPLE
Call Constructor PEACH
Call Constructor BANANA
57 kcal, red

*/
 

 

 

์•„๋ž˜ ์ฝ”๋“œ๋Š” Fruit ์˜ ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด์„œ๋„ ๋™์‹œ์— ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด์—์š”.

APPLE("red"), PEACH("pink"), BANANA("yellow");

 

enum์€ Method๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” ์ด์ „ ์˜ˆ์ œ์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

enum Fruit {
    APPLE("red"), PEACH("pink"), BANANA("yellow");
    
    private String color;
    
    Fruit( String color ) {
        System.out.println( "Call Constructor " + this );
        this.color = color;
    }
    
    String getColor(){
        return this.color;
    }
}
 
public class ConstantDemo {
     
    public static void main(String[] args) {
        Fruit type = Fruit.APPLE;
        switch(type){
            case APPLE:
                System.out.println(57+" kcal, "+Fruit.APPLE.getColor());
                break;
            case PEACH:
                System.out.println(34+" kcal"+Fruit.PEACH.getColor());
                break;
            case BANANA:
                System.out.println(93+" kcal"+Fruit.BANANA.getColor());
                break;
        }
    }
}

 

enum์€ 'Member ์ „์ฒด๋ฅผ ์—ด๊ฑฐ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ'๋„ ์ œ๊ณตํ•œ๋‹ต๋‹ˆ๋‹ค.

 

public class ConstantDemo {
     
    public static void main(String[] args) {
        for(Fruit f : Fruit.values()){
            System.out.println( f + ", " + f.getColor() );
        }
    }
}

 

์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

์—ด๊ฑฐํ˜•์€ '์—ฐ๊ด€๋œ ๊ฐ’๋“ค์„ ์ €์žฅ'ํ•˜๊ณ , ๊ทธ ๊ฐ’๋“ค์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด์—์š”. ๋˜ํ•œ, ์—ด๊ฑฐํ˜• ์ž์ฒด๊ฐ€ Class์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ด๊ฑฐํ˜• ๋‚ด๋ถ€์— ์ƒ์„ฑ์ž, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜, Method๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด ๋‹จ์ˆœํžˆ ์ƒ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ๋” ๋งŽ์€ ์—ญํ• ์„ ํ•˜๋Š” ์นœ๊ตฌ๋ž๋‹ˆ๋‹ค!

 


๋ณธ ๋‚ด์šฉ์€ ์˜คํ”ˆ๋“€ํ† ๋ฆฌ์–ผ์ฆˆ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉฐ, ์ •๋ฆฌํ•˜์˜€์Œ์„ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค.

https://opentutorials.org/course/2517/14151

 

์—ด๊ฑฐํ˜•(enum) - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž…๋ฌธ

enum์€ ์—ด๊ฑฐํ˜•(enumerated type)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์—ด๊ฑฐํ˜•์€ ์„œ๋กœ ์—ฐ๊ด€๋œ ์ƒ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.   package org.opentutorials.javatutorials.constant2; enum Fruit{     APPLE, PEACH, BANANA; } enum Company{     GOOGLE, AP

opentutorials.org

 

์ถ”๊ฐ€ ์ฐธ๊ณ  ์ž๋ฃŒ

https://woowabros.github.io/tools/2017/07/10/java-enum-uses.html

 

Java Enum ํ™œ์šฉ๊ธฐ - ์šฐ์•„ํ•œํ˜•์ œ๋“ค ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ

์•ˆ๋…•ํ•˜์„ธ์š”? ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค์—์„œ ๊ฒฐ์ œ/์ •์‚ฐ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ์ด๋™์šฑ์ž…๋‹ˆ๋‹ค.์ด๋ฒˆ ์‚ฌ๋‚ด ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ… ์ฃผ์ œ๋กœ ์ €๋Š” Java Enum ํ™œ์šฉ ๊ฒฝํ—˜์„ ์„ ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด์ „์— ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ์— Enum์— ๊ด€ํ•ด

woowabros.github.io


 

์ฃผ๋‹ˆํ•˜๋ž‘์˜ ๊ธ€์ด ๋งˆ์Œ์— ๋“œ์…จ๋‚˜์š”? ๊ตฌ๋…๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋Œ“๊ธ€์€ ์ฃผ๋‹ˆํ•˜๋ž‘์—๊ฒŒ ๋งŽ์€ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค!

 

 

728x90
๋ฐ˜์‘ํ˜•