20.01.19-40일차

되자개발자·2021년 6월 23일
0

기록하기

목록 보기
40/46
post-thumbnail

⛄열거형(enum)

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


☃ 열거형의 정의와 사용

  • 열거형을 정의하는 방법
    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){  // true
  x++;
}else if(dir > Direction.WEST){ // 에러. 열거형 상수에 비교연산자 사용불가
  ...
}else if(dir.compareTo(Direction.WEST) > 0 { // compareTo()는 가능


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

  • 모든 열거형은 Enum의 자손이며, 아래의 메서드를 상속받음
    -> String name() : 열거형 상수의 이름을 문자열로 반환
    -> int ordinal() : 열거형 상수가 정의된 순서를 반환(0부터 시작)
    -> T valueOf(Class <T> enumType, String name) :
    지정된 열거형에서 name과 일치하는 열거형 상수를 반환
  • values(), valueOf()는 컴파일러가 자동으로 추가


☃ 열거형에 멤버 추가하기

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


👶 출처

자바의 정석 책 & 유튜브

profile
열심히가 되는 길♨_♨

0개의 댓글