Java enum

엉엉 자바는 어려워·2022년 8월 4일
0

JAVA

목록 보기
1/2

enum이란??

관련이 있는 열거 상수들의 집합이다. 자바에서는 final로 값을 고정할 수 있다. 이 고정된 값을 상수라고 한다.

상수를 정의하는 방법

1. 주석으로 상수의 의미 전달하기

/* 월요일 == 1
   화요일 == 2
   수요일 == 3 */

2. final static으로 상수 정의하기

private final static int MonDay = 1;
private final static int MonDay = 2;
private final static int MonDay = 3;

3. interface에서 상수 정의하기

interface Day{
	int MonDay = 1;
    int TuesDay = 2;
    int WendsDay = 3;
}

4. enum을 사용한 상수 정의하기

enum Day{
	Monday, Tuesday ,Wednsday;
}

_ enum 클래스에 메소드도 포함 가능

특징

  1. 클래스를 상수처럼 사용할 수 있다.
    • 다른 클래스나 인터페이스에서 상수가 로드 시점에 생성되는 것처럼 enum 클래스도 생성자가 로드되는 시점에서 생성된다. static이 붙어있어 Enum.상수명으로 사용 가능
  2. Enum 클래스로 구현하는 경우 상수 값과 같이 유일하게 하나의 인스턴스가 생성된다.
  3. 서로 관련 있는 상수 값들을 모아 enum으로 구현하는 경우 유용하다
  4. 클래스와 같은 문법 체계이다.
  5. 상속을 지원하지 않는다.

Enum 메모리 초기화

Week day = Week.Monday;

Heap 영역에 Week 객체들이 각각 java.lang.Enum 클래스를 상속받는 고유 객체가 만들어진다. day 변수는 JVM의 Stack영역에서 사용하므로 Stack영역의 day와 Method 영역의 Monday 객체의 주소 값을 복사해 둘다 Heap 영역의 같은 객체를 바라본다.

Enum의 내부 API

1. values()

  • Enum 클래스가 가지고 있는 모든 상수 값을 배열의 형태로 리턴 한다. String 의 형태로 단순 반환하는 것이 아니라 인스턴스를 반환하는 것이다. 즉 Enum 클래스가 가지고 있는 모든 인스턴스를 배열에 담아 반환하는 것이다.

2. valueOf()

  • String 을 파라미터로 받는데 인자로 들어온 String 과 일치하는 상수 인스턴스가 존재하면 그 인스턴스를 반환한다. 이 또한 마찬가지로 단순히 문자열을 반환하는 것이 아니라 인자로 들어온 문자열과 일치하는 인스턴스를 반환하는 것이다.

3. ordinal()

-Enum 클래스 내부에 있는 상수들의 Index 를 리턴하는 메소드이다. 배열과 마찬가지로 0부터 인덱스가 시작하며 인덱스의 length 는 상수의 수 - 1 이다.

0개의 댓글