본문 바로가기

공부방/JAVA

[JAVA] enum 이란?

Enum class란?

 

우리가 흔히 상수를 정의할 때 final static string 과 같은 방식으로 상수를 정의를합니다. 하지만 이렇게 상수를 정의해서 코딩하는 경우 다양한 문제가 발생됩니다. 

따라서 이러한 문제점들을 보완하기 위해 자바 1.5버전부터 새롭게 추가된 것이 바로 "Enum" 입니다.

Enum은 열거형이라고 불리며, 서로 연관된 상수들의 집합을 의미합니다.

기존에 상수를 정의하는 방법이였던 final static string 과 같이 문자열이나 숫자들을 나타내는 기본자료형의 값을 enum을 이용해서 같은 효과를 낼 수 있습니다.

 

Enum의 장점

 

Enum을 사용하면서 우리가 얻을 수 있는 이점은 다음과 같습니다.

 

1. 코드가 단순해지며, 가독성이 좋습니다.

2. 인스턴스 생성과 상속을 방지하여 상수값의 타입안정성이 보장됩니다.

3. enum class를 사용해 새로운 상수들의 타입을 정의함으로 정의한 타입이외의 타입을 가진 데이터값을 컴파일시 체크한다.

4. 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 알 수 있습니다.

 

 

public class EnumExample {
    public static final String MALE = "MALE";
    public static final String FEMALE = "FEMALE";
    public static void main(String[] args) {
        String gender1;

        gender1 = EnumExample.MALE;
        gender1 = EnumExample.FEMALE;

        // 오류 발생하지 않음
        gender1 = "boy";
        
        Gender gender2;
        gender2 = Gender.MALE;
        gender2 = Gender.FEMALE;

        // 오류 발생
        // gender2 = "MALE";
        // gender2 = "boy";
        
        gender2 = Gender.FEMALE;
    }
}

enum Gender{
    MALE, FEMALE;
}

 

 

enum 클래스를 사용함으로 써 엉뚱한 값이 상수에 들어가는 것을 미연에 방지할 수 있습니다.

gender2 와 같은 경우에는 Gender 타입으로 설정이 되어있기 때문에 Gender 타입에 존재하는 Female 과 Male 만 값으로 받을 수 있습니다. 다른 값 ("MALE", "boy") 이 들어오게 된다면 컴파일 에러가 발생합니다.

 

 

enum class의 인스턴스를 따로 생성하지 않고 바로 MALE, FEMALE 접근하였는데.

내부적으로 생략되었을 뿐 다음 class와 같습니다.

 

class Gender{

public static final Gender MALE = new Gender();

public static final Gender FEMALE = new Gender();

}

 

 

 

 

enum 메소드

 

 
public class Developer {
     
    public String name;
    public int career;
    public DevType type;
     
    public static void main(String[] args){
        Developer developer = new Developer();
         
        developer.name = "홍길동";
        developer.career = 3;
        developer.type = DevType.WEB;
         
        System.out.println("개발자 이름 : "+ developer.name);
        System.out.println("개발자 경력 : "+ developer.career);
        System.out.println("직무파트     : "+ developer.type);
    }
 
}
 
enum DevType {
 
    MOBILE, WEB, SERVER
}

// 개발자 이름 : 홍길동
// 개발자 경력 : 3
// 직무파트     : WEB

 

values() : 열거된 모든 원소를 배열에 담아 순서대로 리턴

 
public class Developer {
     
    public static void main(String[] args){ 
        for(DevType type : DevType.values()){
            System.out.println(type);
        }
    }
 
}
 
enum DevType {
 
    MOBILE, WEB, SERVER
}

 

ordinal() : 원소에 열거된 순서(index)를 정수 값으로 리턴

import java.util.Arrays;

public class Developer {
     
    public static void main(String[] args) {
        Rank[] values = Rank.values();
        System.out.println(Arrays.toString(values));
        for(int i = 0; i< values.length; i++) {
            System.out.println(values[i] + "인덱스는 : " + values[i].ordinal());
        }
    }
 
}
 
enum Rank {
 
    MOBILE, WEB, SERVER
}

// [MOBILE, WEB, SERVER]
// MOBILE인덱스는 : 0
// WEB인덱스는 : 1
// SERVER인덱스는 : 2

 

valueOf() : 매개변수로 주어진 String과 열거형에서 일치하는 이름을 갖는 원소를 리턴

public class Developer {
     
    public String name;
    public int career;
    public DevType type;
     
    public static void main(String[] args){
         
        DevType tp1 = DevType.MOBILE;
        DevType tp2 = DevType.valueOf("WEB");
         
        System.out.println(tp1);
        System.out.println(tp2);
         
    }
 
}
 
enum DevType {
 
    MOBILE, WEB, SERVER
}

// MOBILE
// WEB

 

'공부방 > JAVA' 카테고리의 다른 글

mysql  (0) 2022.07.07
Map, Hash table  (0) 2022.06.19
일급 컬렉션  (0) 2021.08.15
예외처리  (0) 2021.07.14
상속  (0) 2021.07.13