"안녕, 아미고!"
"안녕, 아미고!"
"나는 당신에게 매우 흥미로운 것에 대해 말할 것입니다. 꽤 간단하지만 그것이 훨씬 더 흥미로워집니다. 열거형이라고 합니다. 열거형은 변수가 가질 수 있는 특정 값 집합을 정의하는 유형입니다. 살펴봅시다. 바로 예를 들면:"
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";
Direction direction = Direction.valueOf("LEFT");
"아, 알았다."
"Direction에 없는 valueOf 함수에 문자열을 전달하면 어떻게 됩니까? 예를 들어 «AMIGO»?"
"어떻게 생각하나요?"
"예외?"
"예. IllegalArgumentException입니다."
"음, 이것으로 열거형 세계에 대한 소개를 마치겠습니다."
GO TO FULL VERSION