https://youtu.be/R0WrMaKoLTE?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp
📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.
[열거형에 멤버 추가하기]
- 불연속적인 열거형 상수의 경우, 원하는 값을 괄호 안에 적는다.
- 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); //에러 열거형의 생성자는 외부에서 호출 불가!
[실습]
enum Direction {
EAST(1, ">"), SOUTH(2, "V"), WEST(3, "<"), NORTH(4, "^");
private static final Direction[] DIR_ARR = Direction.values();
private final int value;
private final String symbol;
Direction(int value, String symbol) {
this.value = value;
this.symbol = symbol;
}
public int getValue() {
return value;
}
public String getSymbol() {
return symbol;
}
public static Direction of(int dir) {
if(dir < 1 || dir > 4) {
throw new IllegalArgumentException("Invalid value : " + dir);
}
return DIR_ARR[dir - 1];
}
public Direction rotate(int num) { // 90도씩 회전, 음수면 시계 반대방향
num = num % 4;
if(num < 0)
num += 4;
return DIR_ARR[(value - 1 + num) % 4];
}
public String toString() {
return name() + getSymbol();
}
}
public class Java12_6 {
public static void main(String[] args) {
for(var d : Direction.values())
System.out.println(d.name() + " " + d.getValue());
// Direction d1 = new Direction(1, ">") -> 열거형의 생성자는 외부에서 호출 불가
Direction d1 = Direction.EAST;
Direction d2 = Direction.of(1);
System.out.println(d1.name() + " " + d1.getValue());
System.out.println(d2.name() + " " + d2.getValue());
System.out.println(d1.rotate(1));
System.out.println(d1.rotate(2));
System.out.println(d1.rotate(-1));
System.out.println(d1.rotate(-2));
}
}
'Java > 객체지향' 카테고리의 다른 글
[객체지향][애너테이션/Annotation] - 메타 애너테이션(Meta Annotation) (0) | 2022.02.25 |
---|---|
[객체지향][애너테이션/Annotation] - 애너테이션(Annotation) (0) | 2022.02.24 |
[객체지향][열거형] - 열거형(enum) (0) | 2022.02.21 |
[객체지향][제네릭스] - 제네릭 형변환 (0) | 2022.02.20 |
[객체지향][제네릭스] - 와일드카드, 제네릭 메서드 (0) | 2022.02.20 |