JAVA

[Java] enum이란? enum 활용하기

엘라 ELLA 2023. 1. 17. 15:32
728x90
반응형

enum의 개념

enum은 열거형(enumerated type)이라고 부른다. 열거형은 서로 연관된 상수들의 집합이다. (상수값은 변수와 다르지 않게 변하지 않는값을 갖는것이다.)

 


 

enum을 사용하는 이유

- 코드의 단순화

- 인스턴스 생성과 상속을 방지

- 키워드 enum을 사용하기 때문에 구현 의도가 열거임을 분명하게 나타낼 수 있다.

- 기존 코드보다 짧으면서 더 많은 기능을 구현할 수있다.(필드, 메소드 생성)

- class로 선언을 하면, 각각의 멤버들을 배열처럼 하나씩 꺼내서 사용 할 수 없다. enum에서는 이런 단점을 보완 할 수있다.

 


 

enum활용 예시

* eunm을 활용해야하는 이유

 

아래 예시는 색깔들의 집합과 크기들의 집합을 상수로 선언한 코드의 예시이다. 색에서 RED, GREEN, GRAY를 각각 1,2,3의 값으로 고정해주고, 가수에서는 GRAY, SOLAR, IU를 1,2,3으로 해줬다.

 

 

그런데, 이 코드에서는 가수들의 집합 GRAY에서 오류가 나게 된다. 왜냐, 이미 색에서 그레이를 상수로 사용했기 때문이다. 

public class EnumPractice {
    public static void main(String[] args) {
        //색깔들의 집합
        final int RED = 1;
        final int GREEN = 2;
        final int GRAY = 3;
        
        //가수들의 집합
        
        //이미 그레이는 상수로 선언되어서 에러
        final int GRAY = 1;
        
        final int SOLAR = 2;
        final int IU = 3;
}

 

이런 오류를 해결하기 위해선 아래와 같이 코드를 짜야한다.
 
순식간에 코드가 길어지고 같은부분을 반복하고 복잡해졌다.
 
public class EnumPractice {
    public static void main(String[] args) {
        class Colour {
            public final Colour RED = new Colour();
            public final Colour GREEN = new Colour();
            public final Colour GRAY = new Colour();
        }

        class Singer {
            public final Singer GRAY = new Singer();
            public final Singer SOLAR = new Singer();
            public final Singer IU = new Singer();
        }
    }
}

 

enum을 사용하면 바로 위의 코드를 아래와 같이 줄일 수 있다.

단순 열거형으로 내부에 상수명만 있을 경우 마지막에는 세미콜론(;)은 생략된다.

 

public class EnumPractice {
    public static void main(String[] args) {
        enum Colour{
        	//세미콜론 생략
            RED, GREEN, GRAY
        }

        enum Singer{
        	//세미콜론 생략
            GRAY, SOLAR, IU
        }
    }
}

 

enum에서 필드와 메서드 생성하기

 

public class EnumPractice {
    public static void main(String[] args) {
        enum Colour{
            RED("red"), GREEN("green"), GRAY("gray");
            private final String colour;
            private Colour(String colourName){
                this.colour = colourName;
            }
            public String getColour(){
                return colour;
            }
        }

        enum Singer{
            GRAY("gray"), SOLAR("solar"), IU("iu");
            private final String singer;
            private Singer(String singerName){
                this.singer = singerName;
            }
            public String getSinger(){
                return singer;
            }
        }

        Singer singer = Singer.GRAY;
        Colour colour = Colour.GREEN;

        System.out.println(singer.getSinger() + "가" + colour.getColour() +"색의 옷을 입었다." );
    }
}

 

실행 결과값

gray가green색의 옷을 입었다.
 

 

 
 

 

 

 

반응형