Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바스크립트
- aws
- Keycloak 17.0.1
- vue.js
- Docker
- 글로벌
- JavaScript
- json
- keycloak
- gradle
- 메서드
- spring
- 알고리즘
- 에러
- jsp
- REACT
- 인텔리제이
- jQuery
- Flutter
- jpa
- java
- 현장학습
- vue
- nginx
- ES6
- SpringBoot
- arraylist
- 맥길대학교
- 스프링
- lightsail
Archives
- Today
- Total
korean IT student
[Java-Live-Study] 11주차 - Enum 본문
목표
자바의 열거형에 대해 학습하세요.
학습할 것 (필수)
- enum 정의하는 방법
- enum이 제공하는 메소드 (values()와 valueOf())
- java.lang.Enum
- EnumSet
Enum 이란?
enum Fruit { APPLE, BANANA, PEAR }
public class main {
public static void main(String[] args) {
System.out.println(Fruit.APPLE);
System.out.println(Fruit.BANANA);
System.out.println(Fruit.PEAR);
}
/*실행 결과
* APPLE
* BANANA
* PEAR
* */
}
enum(열거형)은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 상수를 여러 개 정의할 때 사용한다. enum은 여러 상수를 정의한 후, 정의된 것 이외의 값은 허용하지 않는다.
Enum 정의하는 방법
일반적인 생성 방법
enum 열거형이름 { 상수명1, 상수명2, 상수명3 ... }
enum Fruit { APPLE, BANANA, PEAR }
괄호 { } 안에 상수의 이름을 나열하기만 하면 된다.
이를 클래스로 정의하면 아래와 같이 표현할 수 있다.
class Fruit {
public static final Fruit APPLE = new Fruit("APPLE");
public static final Fruit BANANA = new Fruit("BANANA");
public static final Fruit PEACH = new Fruit("PEACH");
private String name;
private Fruit(String name) {
this.name = name;
}
}
생성자와 메서드 생성 방법
enum Fruit {
APPLE("사과"),
BANANA("바나나"),
PEAR("배");
private String name;
Fruit(String name){
this.name = name;
}
public String value() {
return name;
}
}
public class main {
public static void main(String[] args) {
System.out.println(Fruit.APPLE.value());
System.out.println(Fruit.BANANA.value());
System.out.println(Fruit.PEAR.value());
}
/*실행 결과
* 사과
* 바나나
* 배
* */
}
Enum 생성자는 왜 private인가?
- enum타입은 고정된 상수들의 값의 집합으로 Runtime이 아닌 컴파일 타임에 모든 값을 알고 있어야 하므로 다른 패키지나 클래스에서 enum 타입에 접근해서 동적으로 어떤 값을 정해줄 수 없다. 따라서 컴파일 시에 타입 안정성이 보장된다.
- 생성자의 접근 제어자를 private가 아닌 public, protected으로 할 수 없다.
- enum은 외부에서 접근할 수 있는 생성자가 없어 실제적으로 final이나 다름 없고 외부에서 인스턴스를 생성 할 수 없습니다.
Enum이 제공하는 메서드
values()
enum Fruit {
APPLE,BANANA,PEAR;
}
public class main {
public static void main(String[] args) {
for(Fruit x : Fruit.values()){
System.out.println(x);
}
for(var x : Fruit.values()){
System.out.println(x);
}
}
/*실행 결과
* APPLE
* BANANA
* PEAR
* */
}
해당 enum 타입에 정의된 상수 배열을 반환
valueOf()
enum Fruit {
APPLE,BANANA,PEAR;
}
public class main {
public static void main(String[] args) {
Enum.valueOf(Fruit.class,"APPLE");
Fruit.valueOf("PEAR");
}
/*실행 결과
* APPLE
* PEAR
* */
}
지정된 열거형에서 name과 일치하는 열거형 상수를 반환
java.lang.Enum
- Enum 클래스는 모든 자바 열거체의 공통된 조상 클래스입니다.
- Enum 클래스에는 열거체를 조작하기 위한 다양한 메소드가 포함되어 있습니다.
EnumSet
import java.util.EnumSet;
enum Fruit {
APPLE,BANANA,PEAR,GRAPE,WATERMELON;
}
public class main {
public static void main(String[] args) {
EnumSet<Fruit> fruitEnumSet1 = EnumSet.allOf(Fruit.class); //모든 요소를 포함한 enum셋트
System.out.println("fruitEnumSet1: " + fruitEnumSet1);
EnumSet<Fruit> fruitEnumSet2 = EnumSet.of(Fruit.GRAPE); // 지정된 요를 포함한 enum셋트
System.out.println("fruitEnumSet2: " + fruitEnumSet2);
fruitEnumSet2.add(Fruit.APPLE); // 지정한 요소를 추가
System.out.println("fruitEnumSet2: " + fruitEnumSet2);
fruitEnumSet2.remove(Fruit.GRAPE); // 지정한 요소를 삭제
System.out.println("fruitEnumSet2: " + fruitEnumSet2);
EnumSet<Fruit> fruitEnumSet3 = fruitEnumSet2.clone(); // 지정된 enum셋트와 같은 요소의 enum셋트 복체
System.out.println("fruitEnumSet3: " + fruitEnumSet3);
EnumSet<Fruit> fruitEnumSet4 = EnumSet.complementOf(fruitEnumSet2); //지정된 enum셋트외의 enum셋트
System.out.println("fruitEnumSet4: " + fruitEnumSet4);
EnumSet<Fruit> fruitEnumSet5 = EnumSet.noneOf(Fruit.class); //빈 상의 enum셋트
System.out.println("fruitEnumSet5: " + fruitEnumSet5);
EnumSet<Fruit> fruitEnumSet6 = EnumSet.range(Fruit.PEAR, Fruit.WATERMELON); // 지정된 2개의 enum셋트의 범위의 enum셋트
System.out.println("fruitEnumSet6: " + fruitEnumSet6);
}
}
- EnumSet은 Set 인터페이스를 기반으로 하여 enum 열거요소들을 다룰수 있는 기능을 제공
'back-end > JAVA' 카테고리의 다른 글
[Java-Live-Study] 10주차 - 멀티쓰레드 프로그래밍 (0) | 2021.11.25 |
---|---|
[Java-Live-Study] 9주차 - 예외 처리 (0) | 2021.11.03 |
[Java-Live-Study] 8주차 - 인터페이스 (0) | 2021.11.02 |
[Java-Live-Study] 7주차 - 패키지 (0) | 2021.10.26 |
[Java-Live-Study] 6주차 - 상속 (0) | 2021.09.27 |
Comments