728x90

1. Enum
- 관련된 상수들을 묶어 놓은 것
- java에서는 타입이 안전한 열거형을 제공 - 컴파일 시간에 타입 체크를 받으므로, 이는 런타임 시에 발생하는 오류를 줄여줌
1.1. 정의, 사용
enum 열거형이름 { 상수명1, 상수명2, ... }
<java />
enum Direction {
EAST,
SOUTH,
WEST,
NORTH
}
class Unit {
int x, y; //유닛의 위치
Direction dir; //열거형을 인스턴스 변수로 선언
void unit {
dir = Direction.EAST; //유닛의 방향을 EAST로 초기화
}
}
switch ~ case 사용
<java />
public enum Direction {
BASKETBALL,
SOCCER,
BASEBALL,
TENNIS,
SWIMMING,
MARATHON
}
Sports currnetSports = Sports.BASKETBALL;
System.out.println(currentSports); //BASKETBALL
//switch ~ case 사용
switch (currentSports) {
case BASKETBALL :
System.out.println("농구");
break;
case BASEBALL :
System.out.println("야구");
break;
case TENNIS :
System.out.println("테니스");
break;
case SWIMMING :
System.out.println("수영");
break;
case MARATHON :
System.out.println("마라톤");
break;
}
1.1.1. 비교 - ==, compareTo()
<java />
if(dir == Direction.EAST) {
x++;
} else if(dir > Direction.WEST) { //에러, 비교 연산자는 사용 불가
...
} else if(dir.compareTo(Direction.WEST) > 0) { //compareTo() 는 사용 가능
...
}
1.2. java.lang.Enum
- 모든 열거형은 Enum의 자손으며, 아래의 메서드를 상속 받음
메서드 | 설명 |
Class<E> getDeclaringClass() | 열거형의 Class 객체 반환 |
String name() | 열거형의 상수 이름을 문자열로 반환 |
int ordinal() | 열거형 상수가 정의된 순서를 반환 (0부터) |
T valueOf(Class<T> enum Type, String name) | 지정된 열거형에서 name과 일치하는 열거형 상수를 반환 |
- 컴파일러가 자동적으로 추가해주는 메서드도 있음
<java />
static E values()
static E valueOf(String name)
Direction d = Direction.valueOf("WEST");
1.3. 열거형에 멤버 추가
- 데이터들 간의 연관 관계 표현 - 같은 의미를 갖지만 표시 형식이 다를 경우에 사용 (우아한 형제들 참고)
- 상태와 행위를 한곳에서 관리
- 데이터 그룹 관리 - 열거형에서 열거형 사용 가능
- 관리 주체를 DB에서 객체로 변경
<java />
emum Direction {
//괄호 안에 원하는 값을 추가
EAST(1, "E"),
SOUTH(5, "S"),
WEST(-1, "W"),
NORTH(10, "N"); //끝에 ;를 추가 해야함
//정수를 저장할 필드(인스턴스 변수)를 추가
private final int value;
private final String initial;
//생성자를 추가
Direction(int value, String initial) {
this.value = value;
this.initial = initial;
}
//get 메서드 추가 (lombok의 @getter 사용가능)
public int getValue() { return value; }
public String getInitial() { return initial; }
}
- 불연속적인 열거형 상속의 경우, 원하는 값을 () 안에 넣음 - 끝에 ; 추가
- ()를 사용하려면, 인스턴스 변수와 생성자를 새로 추가해 줘야함
- 열거형의 생성자는 묵시적으로 private이므로, 외부에서 객체 생성 불가
참고 - 열거형에 멤버 추가해서 사용,
https://techblog.woowahan.com/2527/
Java Enum 활용기 | 우아한형제들 기술블로그
{{item.name}} 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 있는 이동욱입니다. 이번 사내 블로그 포스팅 주제로 저는 Java Enum 활용 경험을 선택하였습니다. 이전에 개인 블로그에 E
techblog.woowahan.com
728x90
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] java.io 패키지 - 로그 파일에서 ip 접속 횟수 출력 (0) | 2023.07.05 |
---|---|
[Heap] Priority Queue(우선 순위 큐) (0) | 2023.06.12 |
진법 변환 / StringBuilder & StringBuffer / Arrays.stream (0) | 2023.05.07 |
[Java] 정규 표현식, Network (0) | 2022.10.31 |
[Java] Process - Thread, synchronized, deadLock, semaphore (0) | 2022.10.31 |