240605
오늘의 학습
● 1. Enum
● 2. 팀 프로젝트 게시글 기능 구현
Enum( 열거타입 )
자바 1.5버전부터 새롭게 추가된 기능이며, 자바에서 Enum은 한정된 값들의 집합상수들의 집합을 의미한다.
Enum은 Enumeration의 약자이며, Enumeration은 열거형이라고 부르며 목록, 알림표와 같은 의미를 가지고 있다.
Enum은 열거타입이며, 열거타입은 데이터 중에 한정된 값을 갖는 데이터를 열거타입이라고 한다.
즉, 한정된 값은 상수를 의미하며, 한정되어 있으므로 데이터의 변경이 있어서는 안된다는 규칙이 존재한다.
ex) 월, 화, 수, 목, 금, 토, 일 ( 7개 ) / 봄, 여름, 가을, 겨울 ( 4개 )
Enum 열거형
열거타입은 참조 타입이므로 null값으로 초기화가 가능하다.
Enum은 클래스가 로드되는 시점에 자동으로 heap영역에 상수들이 객체형태로 존재하게 되고 주소값을 static영역이 가지고 있으며 해당 주소값을 stack영역이 참조하므로 결국 하나의 공유되는 값으로 볼 수 있다. 즉, 싱글톤이 보장이 된다.
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
public class Main {
Week today = Week.MONDAY;
System.out.println(today); // 결과 : MONDAY
boolean isTrue = today == Week.MONDAY ? true : false; // 결과 : true
boolean isFalse = today == Week.THURSDAY ? true : false; // 결과 : false
}
위의 코드 예제처럼 열거 타입도 데이터 타입의 일종으로 변수를 선언하고 대입할 수 있다.
또한, Week Enum의 상수값은 각각의 고유한 인스턴스 즉, 객체로 취급을 받기에 Main클래스의 결과가 다르게 나온다.
여기서 알 수 있는 부분은 결국 값을 비교하는 것이아닌 주소값을 비교한다는걸 알 수 있다.
Heap영역의 상수값이 저장이 되어있고 static영역에서 해당 상수가 주소값을 가지고 있는다. static영역에 상수가 heap의 주소값을 가지고있으므로 호출할 때 마다 static의 주소를 받아오기 때문에 싱글톤이 보장이 된다. ( 공유 된다는 말이다. )
Enum 클래스
모든 Enum은 컴파일 시점에 자동으로 Enum클래스를 상속을 해주어서 Enum클래스의 메서드를 이용할 수 있게 된다.
내부적으로 java.lang.Enum 클래스를 확장하고 있는 것이다. 열거형의 기능을 이용할 수 있게 된다.
Enum 열거형 문법
public enum Week {
MONDAY("월요일"), // public static final Week MONDAY = new Week("월요일"); 하나의 객체
TUESDAY("화요일"),
WEDNESDAY("수요일"),
THURSDAY("목요일"),
FRIDAY("금요일"),
SATURDAY("토요일"),
SUNDAY("일요일");
private String week;
private Week(String week) {
this.week = week;
}
public String getWeek() {
return week;
}
}
public class Main {
System.out.println(Week.MONDAY); // 결과 : MONDAY
System.out.println(Week.MONDAY.getWeek()); // 결과 : 월요일
}
참고로 자바는 기본적으로 Object클래스를 모든 클래스가 상속을 받고 있으며 객체를 System.out.println()을 이용해 출력문을 찍게 되면 println() 메서드 내부적으로 valueOf() 메서드를 통해 toString() 메서드를 호출함으로써 해당 객체의 주소값을 반환하게 된다. 즉, Enum 열거형은 Enum클래스를 상속을 받고 있고 Enum클래스 내부에는 toString() 메서드를 상수필드명을 문자열로 반환하게 재정의 되어있 때문에 Enum을 출력문으로 찍게 되면 해당 상수필드명이 문자열로 찍히게 된다
위의 예제 코드로 보면 Main클래스의 첫번째 결과가 MONDAY로 나오게 되는데 주소값이 재정의 된 값으로 나온 것이다.
# 오늘의 회고
오늘은 Enum을 공부했고 Enum이 메모리에서 어떠한 방식으로 동작하는지도 알게되었다.
그리고 오늘은 프로젝트를 본격적으로 진행하였고 지금은 게시글 기능은 얼추 대부분 다 만든 상황이다.
'내일배움캠프 Spring 5기' 카테고리의 다른 글
내일배움캠프 37일차 TIL - 시큐리티 수정 중 (2) | 2024.06.10 |
---|---|
내일배움캠프 36일차 TIL - 스프링 빈 라이프사이클 (0) | 2024.06.07 |
내일배움캠프 34일차( [13일의 금요일] 뉴스피드 프로젝트 ) (2) | 2024.06.04 |
내일배움캠프 33일차 TIL - Git-Hub Fork (0) | 2024.06.03 |
내일배움캠프 32일차 TIL - JDBC & JPA (0) | 2024.05.31 |