상세 컨텐츠

본문 제목

열거 타입 정리 (JAVA)

기록 - 프로그래밍/Java

by wjjun 2024. 1. 8. 00:15

본문

 

열거 타입

한정된 값을 갖는 데이터 타입을 의미합니다. 월요일 ~ 금요일이 될 수 있습니다. 열거 타입의 값은 열거 상수를 의미합니다. 열거 상수는 모두 대문자로 작성하며 여러 단어로 구성된 상수는 밑줄(_)을 이용하여 단어를 연결합니다.

 

 

열거 타입 변수

열거 상수는 단독으로 사용이 불가합니다. 열거타입.열거상수 형태로 사용이 가능합니다.

Week today = Week.SUNDAY;

 

열거 타입 변수는 null 값을 저장할 수 있습니다. 그 이유는 열거 타입도 참조 타입이기 때문입니다. today 와 같이 열거 타입 변수는 스택 영역에 생성됩니다. 그리고 today와 Week.SUNDAY는 같은 Week 객체를 참조합니다. 그 결과 today 변수와 Week.SUNDAY 상수를 == 연산을 하게 되면 결과는 true입니다.

 

Week week1 = Week.SUNDAY;

Week week2 = Week.SUNDAY;

week1, 2 역시 동일한 객체를 참조하기 때문에 == 연산 결과는 true 입니다.

 

 

열거 객체의 메서드

열거 객체는 상수의 문자열을 내부 데이터로 갖고 있습니다. 열거 객체는 열거 객체가 갖는 데이터와 메소드가 있습니다. 메소드는 java.lang.Enum 클래스에 선언된 메서드를 의미합니다. 열거 객체에서 사용이 가능한 이유는 모든 열거 타입은 컴파일 시 Enum 클래스를 상속하도록 되어 있기 때문입니다.

 

name() 메서드

열거 객체가 갖고 있는 문자열을 리턴합니다. 열거 타입을 정의할 때 사용된 상수 이름과 같습니다.

 

ordinal() 메서드

전체 열거 객체 중 몇 번째의 열거 객체인지 확인할 수 있습니다. 열거 객체 순서는 열거 타입을 정의할 때 주어지는 번호를 의미합니다. 0번부터 시작하며 MONDAY 번호는 1, TUESDAY 번호는 2 ...

today가 참조하고 있는 열거 객체가 전체 열거 객체에서 몇 번째 순서인지 알 수 있습니다.

 

valueOf() 메서드

매개값으로 주어지는 문자열과 동일한 문자열을 갖는 열거 객체를 리턴합니다. 메소드 외부에서 문자열을 입력받아 열거 객체로 변환하는데 사용하면 좋습니다.

 

Week weekDay = Week.valueOf("MONDAY")

MONDAY 객체를 참조주소를 얻을 수 있습니다.

 

values() 메서드

열거 객체들을 배열로 만들어 리턴합니다. 이때 for문 반복문을 통해 얻습니다.

 

 

열거 타입과 디자인패턴

Singleton 패턴은 하나의 인스턴스만 존재합니다. 열거 타입은 싱글톤 패턴을 구현할 때 객체를 안전하게 생성하고 사용이 가능합니다.

public enum 싱글톤 {
	INSTANCE;
    
    public void doSomething() {
    
    }
}

 

상태(State) 으로 객체의 상태를 캡슐화하고 각 상태의 동작을 정의할 때 이용할 수 있습니다.

public enum CarState {
	PARKED,
    DRIVING,
    STOPPED,
    IDLING
}

public class Car {
	private CarState state;
    
    public void setState(CarState newState) {
    	this.state = newState;
    }
    
    ...

}

관련글 더보기

댓글 영역