ITWILL학원 : 18강 JAVA BY 윤미영강사
1. enum(이넘)의 정의
- enum은 열거형 데이터 타입이라고 한다.
- 데이터가 몇 가지 한정된 상수값으로 구성될때 주로 사용.
- ex) 계절을 나타낼때 String타입보다 enum을 생성하여 봅, 여름, 가을, 겨울의 딱 4개의 값만 설정하는 것이다.
2. enum 사용법
- 키워드 class대신 enum사용,
- enum내부에는 상수값 나열 -> 이 상수값들을 enum상수라고 부름
- 대소문자 구분함
1 2 3
| enum Season{ SPRING, SUMMER, FALL, WINTER }
|
- 선언위치에 따른 변화
- 같은 클래스 내부에서 enum사용시 (innerEnum) : Season.SPRING
- 외부 클래스에서 enum사용시 (OuterEnum) : 해당클래스명.Season.SPRING
3. 일반 클래스와 enum 차이점
- 접근제어자 : public, default만 사용가능
- 내부적으로 java.lang.Enum클래스 상속 -> 따라서 별도로 다른 클래스 상속받을 수 없다.
- 여러 인터페이스를 구현하는 것은 상관없다.
- enum을 이용하면 비교할때 단순히 값만을 비교하는 것이 아니라 타입까지 비교한다. => 안정적인 프로그래밍가능
4. enum메서드
enum타입들은 java.lang.Enum 클래스를 기본적으로 상속받고 있기 때문에 java.lang.Enum 클래스에 선언된 메서드들을 사용가능하다.
메서드명 |
선언부 |
설명 |
name() |
public final String name() |
enum상수의 이름을 문자열로 리턴한다 |
ordinal() |
public final int ordinal() |
0부터 시작하는 enum 상수의 순서를 리턴한다 |
comparedTo() |
public final int com[aredTo(E o) |
enum상수의 ordinal 차이를 리턴한다 |
values() |
public static T[] values() |
enum타입에 선언된 enum상수를 배열로 리턴한다 |
valueOf() |
public static T<extends Enum<T>> T valueOf(Class<T> enumType, String name) |
문자열로 매핑된 enum상수 객체를 리턴한다 |
5. enum상수를 이용한 연산
enum을 사용하여 계절별로 다른 출력값을 나타내는 코드를 작성해보자.
- OuterEnum사용
- 첫번째방법 : if조건문 + comparedTo()
- 두번째방법 : switch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| enum Season{ SPRING, SUMMER, FALL, WINTER }
public class SeasonEnumTest { public void compareEnum(Season s){ if(s.equals(Season.SPRING)){ System.out.println(s.compareTo(Season.WINTER)); System.out.println("따뜻한 봄"); }else if(s.compareTo(Season.WINTER) < 0){ System.out.println(s.compareTo(Season.WINTER)); System.out.println("최소한 겨울은 아니잖아요"); }else{ System.out.println(s.compareTo(Season.WINTER)); System.out.println("추운 겨울"); } } public void enumSwitch(Season s){ switch(s){ case SPRING : System.out.println("봄"); break; case SUMMER : System.out.println("여름"); break; case FALL : System.out.println("가을"); break; default: System.out.println("겨울"); } } public static void main(String[] args) { SeasonEnumTest set = new SeasonEnumTest(); set.compareEnum(Season.SPRING); set.enumSwitch(Season.SPRING); } }
|
6. enum에 멤버 추가 가능
- enum에도 사용자가 원하는 멤버변수와 멤버메서드를 추가할 수 있다
- 주의점 : enum상수들만을 정의할때는 세미콜론이 필료없지만 별도의 멤버를 추가하는 경우에는 세미콜론을 추가해서 상수 선언이 끝나는 것을 표시해줘야한다.
7. enum에 생성자 추가 가능
- enum의 생성자의 접근 제어자 : private만 가능하고 생략가능.
- 외부에서 해당 생성자를 호출할 수는 없으며 내부에서 상수를 정의하면서 파라미터로 전달.