[JAVA] ENUM클래스

윤재열·2023년 2월 20일
0

Java

목록 보기
67/71

Enum 을 통해 얻을 수 있는 장점들

  • 문자열과 비교하여, IDE의 적극적인 지원을 받을 수 있습니다.
    • 자동완성, 오타검증, 텍스트 리팩토링 등등
  • 허용 가능한 값들을 제한 할 수 있습니다.
  • 리팩토링시 변경 범위가 최소화 됩니다.
    • 내용의 추가가 필요하더라도, Enum 코드 외에 수정할 필요가 없습니다.
  • 코드가 단순해지고, 가독성이 좋아집니다.
  • 인스턴스의 생성과 상속을 방지하여 상수값의 안전성이 보장됩니다.
  • 새로운 상수들의 타입을 정의하므로써 정의한 타입 외의 타입을 가진 데이터값을 컴파일시 체크 할 수 있스빈다.

데어터들 간의 연관관계 표현

public class Example{
/** 기존에 상수를 정의하는 방법 */
	public static final String MALE = "MALE";
    public static final String FEMALE = "FEMALE";
    
    public static void main (String[] args) {
    	String gender1;
        gender1 = Example.MALE;
        gender1 = Example.FEMAILE;
        
        // MALE,FEMALE 이 아닌 상수 값이 할당 될때
		// 컴파일시 에러가 나지 않음 -> 문제점 발생
        gender1 = "boy";
        
        Gender gender2;
        gender2 = Gender.MALE;
        gender2 = Gender.FEMALE;
        
        // 컴파일 시 의도하지 않는 상수 값을 체크 할 수 있습니다.
        // Enum으로 정의한 상수값만 할당 받을 수 있습니다.
        gender2 = "body";
    }
}

// Enum class를 이용해 Gender라는 새로운 상수들의 타비을 정의합니다.
enum Gender {
	MALE,FEMAILE;
}

  • gender1에서 상수 "boy"가 할당되었을 때, 유효성 검사가 없다면 이것이 잘못된건지 잘못된건지 알수가 없습니다.
  • gender2에서는 Gender라는 상수타입으로 설정되어있는데, String타입인 boy를 출력하려고하면 컴파일시점에 에러가 발생합니다.

Enum 생성 방법

독립된 .java 선언

Class 내부에서 선언

Class 외부에서 선언

Enum의 특징

  • 열거형으로 선언된 순서에 따라 0부터 index를 가집니다.(auto-increment)
  • enum 열거형으로 지정된 상수들은 모두 대문자로 선언
  • 마지막 열거형 변수 선언 이후에는 세미콜론(;)을 찍지 않습니다.
  • 상수와 연결된 문자를 연결 시킬 경우에는 세미콜론을 찍어줍니다.

Enum의 Method

  • static Methods
    • valueOf(String arg) : String 값을 enum에서 가지고옴. 없다면 예외 발생
    • valueOf(Class<T>class, String args) : 넘겨받은 class에서 String을 찾아서 enum에서 가져옵니다.
      valueOf(String args)는 내부적으로 자기자신 Class를 가져옵니다.
    • valeus() : enum의 요소들을 순서대로 enum타입의 배열로 리턴합니다.
  • non-static Methods
    • name() : 호출된 값의 이름을 String으로 리턴
    • oridinal() : 해당 값이 enum에 정의된 순서를 리턴
    • compareTo(E o) : enum과 지정된 객체의 순서를 비교, 지정된 객체보다 작은 경우 음의정수,동일하면 0, 크면 양의 정수 return
    • equals(Object other) : 지정된 객체가 enum 정수와 같은 경우 true를 return 아니라면 false

enum 예제

  • [결과값]
    학생 이름 : 윤재열
    학생 학년 : 7
    선호하는 브랜드 : PUMA

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

  • [결과값]
    NIKE
    ADIDAS
    PUMA

valueOf() : 매개변수로 주어진 String과 열거형에서 일치하는 이름을 갖는 값을 return

  • 값이 있을 때 [결과값]
    NIKE
    NIKE

  • 값이 없을 때 예외발생

열거형 상수를 다른값과 연결


  • [결과값]
    나이키
    아디다스
    퓨마

  • 이렇게 enum class 를 사용하면 상수값을 보다 편하게 관리 할 수 있습니다.

profile
블로그 이전합니다! https://jyyoun1022.tistory.com/

0개의 댓글