열거형 및 모든 기능 - 1

"안녕, 아미고!"

"안녕, 아미고!"

"나는 당신에게 매우 흥미로운 것에 대해 말할 것입니다. 꽤 간단하지만 그것이 훨씬 더 흥미로워집니다. 열거형이라고 합니다. 열거형은 변수가 가질 수 있는 특정 값 집합을 정의하는 유형입니다. 살펴봅시다. 바로 예를 들면:"

열거형 클래스의 정의
public enum Direction
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
}
열거형 사용
Direction direction = Direction.LEFT;

if (direction == Direction.LEFT)
 direction = Direction.RIGHT;
else
 direction = Direction.DOWN;

"그럼 그냥 일련의 값을 나열하면 되는 건가요?"

"예, 열거형을 선언하고 내부에 가능한 모든 값을 쉼표로 구분하여 나열합니다."

"사용하기도 매우 쉽습니다."

"널로 설정할 수 있습니까?"

"예, enum은 일반 클래스입니다. 또는 인터페이스가 클래스와 같은 방식과 유사한 클래스와 비슷합니다."

"그러면 클래스를 사용할 수 있는 곳이면 어디든 enum을 사용할 수 있습니까?"

"예."

"클래스 내에서 열거형을 선언할 수 있습니까?"

"예."

"그리고 enum을 상속받나요?"

"아니요, 열거형을 상속할 수 없고 열거형은 다른 클래스를 상속할 수 없습니다."

"왜 그런 겁니까?"

"Java 컴파일러가 열거형을 대략 다음과 같이 변환하기 때문입니다.

public final class Direction extends Enum
{
 public static final Direction UP = new Direction();
 public static final Direction DOWN = new Direction();
 public static final Direction LEFT = new Direction();
 public static final Direction RIGHT = new Direction();

 private Direction() {} // Private constructor
}

"이 예에서 볼 수 있듯이:"

1) Direction 클래스는 Enum 클래스를 절대적으로 상속하므로 다른 것을 상속할 수 없습니다.

2) Direction 클래스는 최종으로 선언되므로 다른 어떤 것도 상속할 수 없습니다.

3) Direction 클래스의 변수는 실제로 공개 정적 최종 방향 변수입니다. 이것은 그것들을 사용하는 코드에서 분명합니다:

방향 방향 = 방향 .LEFT ;

4) Direction 클래스에는 하나의 생성자만 포함되며 비공개입니다. 즉, Direction 개체는 클래스 내부의 코드를 사용해서만 만들 수 있습니다. 선언된 객체 외에는 객체를 생성할 수 없습니다.

5) 방향 변수는 기존 방향 개체에 대한 참조를 할당할 수 있습니다. 그것들은 모두 열거형 내에 설정됩니다. 이 유형의 다른 개체는 없으며 앞으로도 없을 것입니다.

6) 단순 참조 비교만 수행하는 «==»를 사용하여 방향 개체를 비교할 수 있습니다."

"매우 명확하다고 말할 수는 없지만 귀하의 예를 들면 훨씬 더 명확합니다."

"좋습니다. 그럼 여기 당신을 위한 약간의 추가 정보가 있습니다:"

1) 각 방향 개체에는 고유한 번호가 있습니다. 첫 번째(UP)는 0, 두 번째(DOWN)는 1, 세 번째(LEFT)는 2 등입니다. 이 숫자는 ordinal() 메서드를 사용하여 얻을 수 있습니다. "화면을 보세요.

Direction direction = Direction.LEFT;
int index = direction.ordinal();
int index2 = Direction.RIGHT.ordinal();

2) 각 열거형에는 열거형 값의 배열을 반환하는 values () 메서드가 있습니다.

int leftIndex = Direction.LEFT.ordinal();

Direction[] array = Direction.values();
Direction left = array[leftIndex];

"이것은 열거형 요소의 인덱스를 가져온 다음 해당 인덱스를 사용하여 요소를 다시 가져올 수 있음을 의미합니다."

"또한 foreach 루프 에서 열거형을 사용할 수 있습니다 ."

for (Direction direction : Direction.values())
{
 System.out.println(direction);
}
화면 출력:
UP
DOWN
LEFT
RIGHT

"enum이 toString 메서드를 재정의한다는 의미인가요? 결국 다음과 같은 내용이 표시되지 않습니다."
«com.codegym.Direction@123fd4»?

"예. 또한 각 열거형과 방향을 문자열로 변환할 수 있으며 그 반대도 가능합니다."

문자열로 변환:
String left = Direction.LEFT.toString(); // left == "LEFT";
문자열을 enum으로 변환:
Direction direction = Direction.valueOf("LEFT");

"아, 알았다."

"Direction에 없는 valueOf 함수에 문자열을 전달하면 어떻게 됩니까? 예를 들어 «AMIGO»?"

"어떻게 생각하나요?"

"예외?"

"예. IllegalArgumentException입니다."

"음, 이것으로 열거형 세계에 대한 소개를 마치겠습니다."