일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JavaScript
- Codewars
- Python
- 이것이리눅스다
- 이클립스
- 오류
- 파이썬
- Oralce
- 사용자변경
- 주민번호마스킹
- 중첩쿼리
- CentOS
- 자바기초스터디
- 6kyu
- java
- Linux
- 남산타워뷰
- 7kyu
- monthPicker
- CentOS8
- 멀티쓰레드프로그래밍
- 8kyu
- 서울에어비앤비
- 시즌1
- Eclipse
- VMware
- SQL
- 서울복층에어비앤비
- https
- class파일바로보기
- Today
- Total
보통사람
[Study-11주차] Enum 본문
-
목표
-
자바의 열거형에 대해 학습하세요.
-
-
학습할 것 (필수)
-
enum 정의하는 방법
-
enum이 제공하는 메소드 (values()와 valueOf())
-
java.lang.Enum
-
EnumSet
-
0. Enum
-
변수가 상수 집합이 되도록 하는 특수한 데이터 유형으로 고정된 상수 집합인 경우에 사용함
-
상수값이 바뀌면 해당 상수를 참조하는 모든 소스를 다시 컴파일해야 하지만 열거형 상수를 이용하면 기존의 소스를 다시 컴파일하지 않아도 됨
-
값뿐만 아니라 타입까지 체크함(typesafe enum)
System.out.println( Season.FALL == Season.SPRING );
System.out.println( Season.FALL == Season.FALL );
[실행결과]
false
true
1. Enum 정의 방법
-
enum 키워드를 이용하여 정의함
-
상수이기 때문에 필드는 대문자로 함
enum 열거형명 { 상수명1, 상수명2 .... }
public enum Season {
SPRING
, SUMMER
, FALL
, WINTER
}
2. Enum 사용 방법
-
static 변수를 사용하는 것과 동일하게 열거형.상수명으로 호출하면 됨
-
열거형 상수 각각이 열거형 타입의 인스턴스로 상수값이 인스턴스의 주소를 의미
-
'==' 으로 비교 할 수 있으며 대소 비교는 compareTo()를 이용해야 함
-
상수에 여러값을 지정하는 경우 생성자 및 인스턴스 변수를 추가해주어야 함
-
인스턴스 변수와 생성자도 추가 할 수 있으나 생성자는 묵시적으로 private이며 new 연산자를 이용하여 인스턴스 생성할 수 없음
package com.study.halle.s1.week11;
import java.util.EnumSet;
public enum Direction {
EAST(1, "동")
, WEST(2, "서")
, SOUTH(3, "남")
, NORTH(4, "북")
;
Direction(int order, String name) {
this.order = order;
this.name = name;
}
private final int order;
private final String name;
public int getOrder() {
return order;
}
}
3. Enum이 제공하는 메소드 (values()와 valueOf())
-
values(), valueOf() 메소드는 컴파일러가 자동적으로 추가해주며 모든 열거형이 가지고 있음
staic E values()
staic E valueOf(String name)
package com.study.halle.s1.week11;
public enum Season {
SPRING
, SUMMER
, FALL
, WINTER
}
-
values()
-
열거형의 모든 상수를 순서대로 해당 열거형 배열로 반환해줌
-
Season tmp = Season.valueOf("WINTER");
switch (tmp) {
case SPRING :
System.out.println("봄");
break;
case SUMMER :
System.out.println("여름");
break;
case FALL :
System.out.println("가을");
break;
case WINTER :
System.out.println("겨울");
break;
default :
}
[실행결과]
겨울
-
valueOf()
-
String 타입의 상수명을 입력받아 열거형의 상수로 반환함
-
존재하지 않는 상수명이 들어오면 IllegalArgumentException 에러 발생함
-
Season[] arr = Season.values();
for ( Season s : arr) {
System.out.println(s);
}
[실행결과]
SPRING
SUMMER
FALL
WINTER
4. java.lang.Enum
-
모든 열거형의 조상
-
모든 열거형은 암시적으로 java.lang.Enum을 상속 받음
5. EnumSet
-
열거형 유형을 사용하기 위한 Set
-
내부적으로 bit vector로 표시됨
-
NULL을 허용하지 않음
EnumSet<Direction> enumSet = EnumSet.allOf(Direction.class);
System.out.println(enumSet);
[실행결과]
[EAST, WEST, SOUTH, NORTH]
※ 참조
Java의 정석
docs.oracle.com/javase/tutorial/java/javaOO/enum.html
docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html
'Study' 카테고리의 다른 글
[Study-13주차] I/O(입출력) (0) | 2021.02.12 |
---|---|
[Study-12주차] 어노테이션(Annotation) (0) | 2021.01.31 |
[Study-9주차] 예외 처리 (0) | 2021.01.12 |
[Study-8주차] 인터페이스 (0) | 2021.01.04 |
[Study-7주차] 패키지 (0) | 2020.12.29 |