아자 와자 아자
Published 2023. 3. 15. 21:21
[Java] 열거형 💻 Study/Java
728x90
728x90
이 게시글은 남궁성의 정석코딩 - 자바의 정석 기초편(2020최신)을 보고 공부한 내용을 정리한 게시글입니다.
틀린 내용이 있을 수 있습니다.

 

 

 

열거형

- 관련된 상수들을 하나로 묶어 놓은 것을 말한다.

- 열거형에는 상수만 올 수 있다.

- enum으로 묶인 각각의 상수는 객체이다.

 

enum 열거형이름 {상수명1, 상수명2, ...}

// 열거형으로 변경 전
class Season{
  static final String SPRING;
  static final String SUMMER;
  static final String AUTUMN;
  static final String WINTER;
}

// 열거형으로 변경
enum Season{SPRING, SUMMER, AUTUMN, WINTER};

// 호출
public class Test {
  public static void main(String[] args){     
    Season season = Season.AUTUMN;
    System.out.println(season); //AUTUMN
    System.out.println(Season.WINTER); //WINTER
  }
}
간단 설명
- Season 클래스 안에 있는 SPRING, SUMMER, AUTUMN, WINTER 상수를 열거형으로 변환했다.
- 호출할 때는 클래스명을 앞에 붙여주고 상수를 적어주면 된다.
- Season season에는 Season 안에 있는 값만 들어올 수 있다.

 

 

 

열거형 비교

- Java의 열거형은 타입에 안전하다.

비교할 때 타입과 값이 있는데, C언어는 값만 비교해서 타입이 달라도 값이 같으면 true를 반환한다.

반면에 Java는 타입과 값을 모두 비교한다.

- ==compareTo(), equals()는 사용할 수 있지만 비교연산자는 사용할 수 없다. (객체이기 때문에)

Season season = Season.AUTUMN; 

System.out.println(season == Season.AUTUMN); // true
System.out.println(season.compareTo(Season.AUTUMN)); // 0
System.out.println(season.compareTo(Season.WINTER)); // -1
System.out.println(season.compareTo(Season.SPRING)); // 2
System.out.println(season > Season.SPRING); // 에러

 

 

 

Enum 클래스의 메서드

아래 열거형 Season은 공통으로 들어간다.

enum Season{SPRING, SUMMER, AUTUMN, WINTER };

 

String name()

열거형 상수의 이름을 문자열로 반환한다.

public class Test {
  public static void main(String[] args){     
    Season season = Season.AUTUMN;     
    System.out.println(season.name()); // AUTUMN
  }
}

 

int ordinal()

열거형 상수가 정의된 순서를 반환한다.

public class Test {
  public static void main(String[] args){     
    Season season = Season.AUTUMN;     
    System.out.println(season.ordinal()); // 2
  }
}

 

values()

열거형의 모든 객체들을 배열로 반환한다.

public class Test {
  public static void main(String[] args){ 
    System.out.println(Season.values()); //[Ltest.Season;@5ca881b5
    for(Season season : Season.values()) {
      System.out.print(season + " "); //SPRING SUMMER AUTUMN WINTER 
    }
  }
}

 

valueOf()

매개변수 값으로 주어지는 문자열과 동일한 문자열을 가지는 객체를 반환한다.

public class Test {
  public static void main(String[] args){     
    Season season = Season.valueOf("WINTER");
    System.out.println(season); //WINTER
  }
}

 

 

열거형에 멤버 추가하기

열거형 상수에 원하는 값을 추가할 수 있다.

enum Season{SPRING("봄", 3), SUMMER("여름", 7), AUTUMN("가을", 9), WINTER("겨울", 12) };

 

이 값들이 제 기능을 하기 위해선 값의 개수만큼 변수를 선언해야 하고, 이 값을 받을 수 있는 생성자를 추가해야 한다.

enum Season{
  SPRING("봄", 3), SUMMER("여름", 7), AUTUMN("가을", 9), WINTER("겨울", 12);
  
  private final String KOR;
  private final int MONTH;
  
  Season(String KOR, int MONTH){
    this.KOR = KOR;
    this.MONTH = MONTH;
  }
};

 

KORMONTH를 가져오는 메서드를 추가하면 아래와 같이 만들 수 있다.

enum Season{
  SPRING("봄", 3), SUMMER("여름", 7), AUTUMN("가을", 9), WINTER("겨울", 12);
  
  private final String KOR;
  private final int MONTH;
  
  Season(String KOR, int MONTH){
    this.KOR = KOR;
    this.MONTH = MONTH;
  }
  
  public String getKOR() {
    return KOR;
  }
  public int getMONTH() {
    return MONTH;
  }
};

public class Test {
  public static void main(String[] args){     
    System.out.println(Season.SPRING.getKOR()); //봄
    System.out.println(Season.SPRING.getMONTH()); //3
  }
}

 

 

 

 

728x90
728x90

'💻 Study > Java' 카테고리의 다른 글

[Java] 어노테이션  (0) 2023.03.16
[Java] 제네릭스2  (0) 2023.03.14
[Java] 제네릭스1  (0) 2023.03.13
profile

아자 와자 아자

@와자!

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!