[JAVA] 열거형

2024. 9. 2. 19:20·Back-End/Java

[작성일: 2023. 02. 08]

 

열거형(enum)

  • 관련된 상수들을 같이 묶어놓은 것. Java는 타입에 안전한 열거형을 제공함.
class Card { 
  enum CLOVER, HEART, DIAMOND, SPADE } // 열거형 Kind를 정의
  enum Value { TWO, THREE, FOUR } // 열거형 Value를 정의
                0     1      2
  final Kind kind; // 타입이 int가 아닌 Kind 임에 유의해야 함.
  final Value value;
}

if(Card.CLOVER==Card.TWO)  // true가 나오지만 false여야 의미상 맞음.
if(Card.Kind.CLOVER==Card.Value.TWO)  // 컴파일 에러. 타입이 달라서 비교 불가능

 

 

 

 

 

열거형의 정의와 사용

✏️ 열거형을 정의하는 방법
   enum 열거형이름 { 상수명1, 상수명2, ... }
   enum Direction { EAST, SOUTH, WEST, NORTH }

✏️ 열거형 타입의 변수를 선언하고 사용하는 방법
class Unit {
  int x, y;
  Direction dir; // 열거형 인스턴스 변수 선언
  
  void init() {
    dir = Direction.EAST; // 유닛의 방향을 EAST로 초기화
  }
}​


✏️ 열거형 상수의 비교에 ==와 compareTo() 사용가능

if(dir==Direction.EAST) {
  x++;
} else if (dir > Direction.WEST) { // 에러. 열거형 상수에 비교연산자 사용불가
 ...
} else if (dir.compareTo(Direction.WEST) > 0) { // compareTo()는 가능.
  ...
}

 

 

 

 

 

열거형의 조상 - java.lang.Enum

  • 모든 열거형은 Enum의 자손이며, 아래 메서드를 상속받음.
  • values(), valueOf()는 컴파일러가 자동으로 추가해 줌.

 

메서드 설명
Class<E> getDeclaringClass() - 잘 안 씀 열거형의 Class 객체(설계도) 반환
String name() 열거형 상수의 이름을 문자열로 반환
int ordinal() 열거형 상수가 정의된 순서를 반환(0부터 시작)
T valueOf(Class<T> enumType, String name) 지정된 열거형에서 name과 일치하는 열거형 상수를 반환
static E[] values() - 컴파일러 자동추가 Direction[] dArr = Direction.values();
열거형의 모든 상수를 배열로 반환
static E valueOf(String name) - 컴파일러 자동추가 Direction d = Direction.valueOf("WEST:");

 

 

 

 

 

열거형에 멤버 추가하기

  • 불연속적인 열거형 상수일 경우, 원하는 값을 괄호() 안에 적음. (여러 개도 가능)
  • 괄호()를 사용하려면 인스턴스 변수와 생성자를 새로 추가해줘야 함..
  • 열거형의 생성자는 묵시적으로 private이므로 외부에서 객체생성 불가능.
enum Direction {
  EAST(1), SOUTH(5), WEST(-1), NORTH(10); // 끝에 세미콜론 추가해줘야 함.
  
  private final int value; // 정수를 저장할 인스턴스 변수 추가, iv 선언
  Direction(int value) { this.value = value; } // 생성자 추가
  
  public int getValue() { return value; }
}

 

 

 

 

 

 

 

 

 

 


🐣 해당 게시글은 자바의 정석(남궁성 님) 영상으로 함께 공부하며 요약/정리한 글입니다.
🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

 

저작자표시 비영리 변경금지
'Back-End/Java' 카테고리의 다른 글
  • [JAVA] 스레드
  • [JAVA] 애노테이션
  • [JAVA] 지네릭스
  • [JAVA] 컬렉션 프레임워크
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    자바스크립트
    성능최적화
    프로그래머스
    백준
    게시판만들기
    다형성
    의존성주입
    Java
    Spring Security
    변수
    JPA
    javascript
    스프링
    김영한
    데이터베이스
    Swift
    최주호
    spring
    알고리즘
    jsp
    sql
    Database
    html
    생성자
    객체
    MVC
    자바
    HTTP
    Security
    DB
  • hELLO· Designed By정상우.v4.10.0
뚜비
[JAVA] 열거형
상단으로

티스토리툴바