이글은 백기선님 스터디 할래? 스터디를 뒤늦게 따라간 기록입니다.
스터디할래 링크 >> https://github.com/whiteship/live-study
이필기를 시작으로 공부했습니다 >> https://xxxelppa.tistory.com/204?category=858435 ,
여기 없는내용은 스터디 할래 강의 내용 혹은 제가 java Doc보고작성하거나 예제를 만들어 추가했습니다.
그외는 같이 출처가 써있습니다.
enum정의 | public enum TODAY { MORNING, AFTERNOON } public enum TODAY_TIME { MORNING(6, 11), AFTERNOON(12, 6); private int startTime; private int endTime; TODAY_TIME(int startTime, int endTime) { this.startTime = startTime; this.endTime = endTime; } public int getStartTime() { return this.startTime; } public int getEndTime() { return this.endTime; } } 내부 static |
values() vs valueOf() | values : 선언 상수를 배열로 반환, 컴파일되며 생김 valueOf : enum 존재 상수를 가져올때. 상속 받음, jdk8기준 없으면 illegalArgumentException |
ordinal() | TODAY_TIME.AFTERNOON.ordinal() //1 ordinal 서수 , enum 클래스에 나열된 상수가 몇번째 나열되어있는지. zero base 로 넘버링 한 위치를 반환. EnumSet, EnumMap 에서 사용.. 내부용 |
java.lang.Enum | enum 은 java.lang.Enum 클래스 상속받음. - 아래 바이트 코드 참고. 생성자 : Sole constructor : 컴파일러 사용, 사용자 직접 호출사용불가. /** * Sole constructor. Programmers cannot invoke this constructor. * It is for use by code emitted by the compiler in response to * enum type declarations. * * @param name - The name of this enum constant, which is the identifier * used to declare it. * @param ordinal - The ordinal of this enumeration constant (its position * in the enum declaration, where the initial constant is assigned * an ordinal of zero). */ protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } |
EnumSet | java.util Set자료구조특징. 중복허용 안함. EnumSet<TODAY_TIME> todayTimeAllSet = EnumSet.allOf(TODAY_TIME.class); EnumSet todayTimeSet = EnumSet.of(TODAY_TIME.AFTERNOON); EnumSet todayTimeAt =todayTimeAllSet.complementOf(todayTimeSet); //특정상수제외 System.out.println(todayTimeAllSet.range(TODAY_TIME.MORNING,TODAY_TIME.AFTERNOON)); // 출력 : [MORNING, AFTERNOON][MORNING, AFTERNOON] EnumSet은 왜 생성자를 사용자가 호출할수있게만들었을까? 1. ReqularEnumSet 개수적을때 JumboEnumSet 많을때 개발한 사람이 구현 객체 발환해준다면.. 사용입장에서 접합한지 몰라도된다 2. 사용자는 빈번하게 EnumSet초기화 진행가능 3. 확장성, 유지보수 |
EnumMap | EnumMap<TODAY_TIME> enumMap = new EnumMap<>(TODAY_TIME.class) |
enum 에넘, 이늄, 열거형
추천책 : 토비의 스프링.
하이버네이트 : java persistence ,> 번역서 하이버네이트
JPA 프로그래밍
----------
type safey
- 타입에 안정적
- query DSR 각광. http://www.querydsl.com/
------------
jpa 맵핑시
enum Fruit{
kiwi, apple, banana
}
@Enumerated(EnumType.STRING)
Fruit fruit;
EnumType.STRING
EnumType.ORDINAL
--------------------
private final static String hello = "/hello";
@GetMapping(hello) << final 만 참조. "변하지않는값'
---------------------
순서 정의할때 1,2,3 보다는 10,20,30으로 정의
---------------------
Enum 싱글톤으로 쓸수 있다.
spring에서 @Component 하면 싱글톤을 사용할수 있다.
---------
리플렉션 : 객체를 통해 클래스의 정보 분석해내는 기법
Calss c = Data.class;
바이트코드
// class version 52.0 (52)
// access flags 0x4031
// signature Ljava/lang/Enum<Lstudy/TODAY_TIME;>;
// declaration: study/TODAY_TIME extends java.lang.Enum<study.TODAY_TIME>
public final enum study/TODAY_TIME extends java/lang/Enum {
// compiled from: TODAY_TIME.java
// access flags 0x4019
public final static enum Lstudy/TODAY_TIME; MORNING
// access flags 0x4019
public final static enum Lstudy/TODAY_TIME; AFTERNOON
// access flags 0x2
private I startTime
// access flags 0x2
private I endTime
// access flags 0x101A
private final static synthetic [Lstudy/TODAY_TIME; $VALUES
// access flags 0x9
public static values()[Lstudy/TODAY_TIME;
L0
LINENUMBER 5 L0
GETSTATIC study/TODAY_TIME.$VALUES : [Lstudy/TODAY_TIME;
INVOKEVIRTUAL [Lstudy/TODAY_TIME;.clone ()Ljava/lang/Object;
CHECKCAST [Lstudy/TODAY_TIME;
ARETURN
MAXSTACK = 1
MAXLOCALS = 0
// access flags 0x9
public static valueOf(Ljava/lang/String;)Lstudy/TODAY_TIME;
// parameter mandated name
L0
LINENUMBER 5 L0
LDC Lstudy/TODAY_TIME;.class
ALOAD 0
INVOKESTATIC java/lang/Enum.valueOf (Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
CHECKCAST study/TODAY_TIME
ARETURN
L1
LOCALVARIABLE name Ljava/lang/String; L0 L1 0
MAXSTACK = 2
MAXLOCALS = 1
// access flags 0x2
// signature (II)V
// declaration: void <init>(int, int)
private <init>(Ljava/lang/String;III)V
// parameter synthetic $enum$name
// parameter synthetic $enum$ordinal
// parameter startTime
// parameter endTime
L0
LINENUMBER 11 L0
ALOAD 0
ALOAD 1
ILOAD 2
INVOKESPECIAL java/lang/Enum.<init> (Ljava/lang/String;I)V
L1
LINENUMBER 12 L1
ALOAD 0
ILOAD 3
PUTFIELD study/TODAY_TIME.startTime : I
L2
LINENUMBER 13 L2
ALOAD 0
ILOAD 4
PUTFIELD study/TODAY_TIME.endTime : I
L3
LINENUMBER 14 L3
RETURN
L4
LOCALVARIABLE this Lstudy/TODAY_TIME; L0 L4 0
LOCALVARIABLE startTime I L0 L4 3
LOCALVARIABLE endTime I L0 L4 4
MAXSTACK = 3
MAXLOCALS = 5
// access flags 0x1
public getStartTime()I
L0
LINENUMBER 17 L0
ALOAD 0
GETFIELD study/TODAY_TIME.startTime : I
IRETURN
L1
LOCALVARIABLE this Lstudy/TODAY_TIME; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
// access flags 0x1
public getEndTime()I
L0
LINENUMBER 21 L0
ALOAD 0
GETFIELD study/TODAY_TIME.endTime : I
IRETURN
L1
LOCALVARIABLE this Lstudy/TODAY_TIME; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
// access flags 0x8
static <clinit>()V
L0
LINENUMBER 6 L0
NEW study/TODAY_TIME
DUP
LDC "MORNING"
ICONST_0
BIPUSH 6
BIPUSH 11
INVOKESPECIAL study/TODAY_TIME.<init> (Ljava/lang/String;III)V
PUTSTATIC study/TODAY_TIME.MORNING : Lstudy/TODAY_TIME;
L1
LINENUMBER 7 L1
NEW study/TODAY_TIME
DUP
LDC "AFTERNOON"
ICONST_1
BIPUSH 12
BIPUSH 6
INVOKESPECIAL study/TODAY_TIME.<init> (Ljava/lang/String;III)V
PUTSTATIC study/TODAY_TIME.AFTERNOON : Lstudy/TODAY_TIME;
L2
LINENUMBER 5 L2
ICONST_2
ANEWARRAY study/TODAY_TIME
DUP
ICONST_0
GETSTATIC study/TODAY_TIME.MORNING : Lstudy/TODAY_TIME;
AASTORE
DUP
ICONST_1
GETSTATIC study/TODAY_TIME.AFTERNOON : Lstudy/TODAY_TIME;
AASTORE
PUTSTATIC study/TODAY_TIME.$VALUES : [Lstudy/TODAY_TIME;
RETURN
MAXSTACK = 6
MAXLOCALS = 0
}
- enum 정의하는 방법
- enum이 제공하는 메소드 (values()와 valueOf())
- java.lang.Enum
- EnumSet
'JAVA > Basic' 카테고리의 다른 글
[스터디할래? Java 13]I/O (0) | 2021.05.15 |
---|---|
[스터디할래? Java 12]애노테이션 (0) | 2021.05.15 |
[스터디할래? Java 10]멀티쓰레드 프로그래밍 (0) | 2021.05.15 |
[스터디할래? Java 09]예외처리 (0) | 2021.05.14 |
[스터디할래? Java 08]인터페이스 (0) | 2021.05.14 |