티스토리 뷰
목표
자바의 열거형에 대해 학습하세요.
학습할 것 (필수)
- enum 정의하는 방법
- enum이 제공하는 메소드
- java.lang.Enum
- EnumSet
enum 정의하는 방법
enum Position {
TOP, JUG, MID, ADC, SUP;
}
- enum 키워드 사용
- enum은 엄연한 클래스이다.
- 모두 상수이기 때문에 대문자로 표기할 것
- 0부터 시작되는 정수값이 연속적으로 부여됨
- 생성자의 접근제어자는 private 이기에 외부에서 생성자 상수 추가 불가능
- 정의된 상수 하나당 실제로 하나의 인스턴스 생성 ( private static final )
- 열거형의 멤버중 하나가 호출 되면 열거된 모든 상수의 객체가 생성됨
- 열거형 상수의 비교에는 '==' , 'compareTo()' 사용 가능
- 비교 연산자 사용 불가능
- enum 에서 추상 메서드를 추가한 경우
public enum Season {
SPRING("봄"){
@Override
void describeSeaon() {
System.out.println("봄은 따듯합니다.");
}
}, SUMMER("여름"){
@Override
void describeSeaon() {
System.out.println("여름은 뜨겁습니다.");
}
}, FALL("가을"){
@Override
void describeSeaon() {
System.out.println("가을은 서늘합니다.");
}
}, WINTER("겨울"){
@Override
void describeSeaon() {
System.out.println("겨울은 춥습니다.");
}
};
private String description;
Season(String description){
this.description = description;
}
public String getDescription(){
return this.description;
}
abstract void describeSeaon();
}
---------
Season.SUMMER.describeSeaon(); // 여름은 뜨겁습니다.
System.out.println(Season.WINTER.getDescription()); // 겨울
- 데이터와 메소드가 있는 enum
public enum JuSik {
SAMSUNG(85600, -1.27),
APPLE(158450, 0.17),
TESLA(977313, -1.74),
AMD(104817, -3.48),
INTEL(61102, -0.91);
private final double closingPrice;
private final double fluctuationRate;
JuSik(double closingPrice, double fluctuationRate) {
this.closingPrice = closingPrice;
this.fluctuationRate = fluctuationRate;
}
public double getCP() {
return closingPrice;
}
public double getFR() {
return fluctuationRate;
}
}
enum 이 제공하는 메소드
values()
- enum 에서 정의한 상수들을 배열 형태로 반환해준다.
Position[] positions = Position.values();
for (Position p : positions) {
System.out.println(p);
}
/*
TOP
JUG
MID
ADC
SUP
*/
valueOf(String name)
- 지정된 enum에서 name과 일치하는 상수를 반환해준다.
- 전달된 문자열과 동일한 상수가 없을경우 Null Pointer Exception 발생
Postion position = Position.valueOf("MID");
System.out.println(position);
// MID
ordinal()
- enum 상수가 정의된 순서를 반환해준다.
- ordinal은 Enum 내부에서 사용하기 위해 만든 것이지 프로그래머가 사용하라고 만든 메서드가 아니다. (사용 X)
Position[] positions = Position.values();
for(Position p : positions){
System.out.println(p + " " + v.ordinal());
}
/*
TOP 0
JUG 1
MID 2
ADC 3
SUP 4
*/
name()
- 이름을 반환해준다.
- toString() 과 같은 역할을 하지만 차이점은 Override 의 가능 여부이다.
- name() 의 경우 final
Position[] positions = Position.values();
for(Position p : positions){
System.out.println(p + " " + p.name());
}
/*
TOP
JUG
MID
ADC
SUP
*/
java.lang.Enum
- 모든 enum 타입은 java.lang.Enum 을 상속받은 클래스이다.
- java.lang.Enum 은 추상 클래스이며 우리가 사용하는 enum은 java.lang.Enum 을 상속받았기에 다른 클래스를 상속받을 수 없다.
- 앞의 메서드 들은 모두 여기 정의되어 있다.
- 대부분의 메서드는 final 로 선언되어 있기에 별도의 오버라이딩을 할 수 없다.
EnumSet
- enum 을 위해 특별히 고안된 Set 인터페이스 구현체
- HashSet 과 비교시 성능 상의 이점이 많기에 enum을 위한 Set 이 필요한 경우 EnumSet 을 사용하는 것이 좋음
- null 값을 허용하지 않고, Null Pointer Exception을 throw 하는것도 허용하지 않는다.
- ordinal 값의 순서대로 요소가 저장된다.
- thread-safe 하지않다.
- 모든 메서드는 비트연산자를 사용하기에 기본 연산의 시간 복잡도가 O(1) 이다.
- 따른 컬렉션들과 달리 new 연산자를 사용할 수 없다.
public class EnumSetTester {
public static void main(String[] args) {
// allOf(enum type) -> 인자로 받은 열거형의 모든 상수를 받는다.
EnumSet<Season> seasonEnumSet = EnumSet.allOf(Season.class);
System.out.println(seasonEnumSet.size());
// copyOf(enumset) -> 인자로 받은 enumset 이 가지고 있는 값들을 모두 받는다.
EnumSet<Season> copySeasonEnumSet = EnumSet.copyOf(seasonEnumSet);
// of(e, e1) -> 인자로 받은 상수들만 받는다.
EnumSet<Region> regionEnumSet = EnumSet.of(Region.KOREA, Region.CHINA);
// complementOf(enumset) -> 인자로 받은 enumset 이 포함하지 않는 enum 의 상수들만 받는다.
EnumSet<Region> complementOfEnumSet = EnumSet.complementOf(regionEnumSet);
// range(e1, e2) -> 인자로 받은 e1 ~ e2 까지의 값들
EnumSet<Season> rangeEnumSet = EnumSet.range(Season.SPRING, Season.FALL);
}
}
---
seasonEnumSet
4
[SPRING,SUMMER, FALL, WINTER]
copySeasonEnumSet
[SPRING,SUMMER, FALL, WINTER]
regionEnumSet
[KOREA, CHINA]
complementOfEnumSet
[NORTHAMERICA, EUROPE]
rangeEnumSet
[SPRING, SUMMER, FALL]
※ 참조
간단 정리 글
velog.io/@jaden_94/11주차-항해일지-Enum
velog.io/@ljs0429777/11주차-과제-Enum
wisdom-and-record.tistory.com/52
자세한 정리 글
www.notion.so/Enum-6ffa87530c424d8ab7a1b585bfb26fa2
※ 스터디
- Total
- Today
- Yesterday
- 이펙티브자바
- JS 딥다이브
- 백준
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 이펙티브자바 아이템60
- 프로그래머스
- 이펙티브자바 아이템59
- java
- HTTP 완벽 가이드
- BOJ
- 백기선 스터디
- Spring Security
- http
- 프로그래머스 SQL
- GCP
- 집 구하기
- 김영한 JPA
- 드림코딩
- REST API
- HTTP 완벽가이드
- 모던자바스크립트
- 김영한 http
- js array
- 패스트캠퍼스 컴퓨터공학 완주반
- js promise
- 이펙티브자바 스터디
- 킹수빈닷컴
- dreamcoding
- js api
- JPA 연관관계 매핑
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |