슈퍼코딩/주특기(JAVA)
2024.05.13(월) 슈퍼코딩 신입연수원 7주차 Day 1 후기 - Enum, Optional, DataTime
곰돌이볼
2024. 5. 13. 19:51
- 강의
- 52강(예외처리) ~ 54강(강력한 데이터 관리)
Enum
- 열거형 데이터 타입
- 보통 전부 대문자로 작성함
- Enum의 각 요소들은 독립된 특수한 클래스로 구분되는 인스턴스
- Enum 클래스는 method 영역에 저장 → 다른 클래스에서 Enum의 인스턴스를 선언하게 되면 heap에 객체가 구현되고, 이때 인스턴스는 method 영역의 주소를 참고함
- Switch문과 함께 사용하면 좋음
- 장점
- 가독성, 직관성 ↑
- 허용된 값만 사용가능해서 안전성 ↑
- 구현(Day.java)
// Day.java public enum Day { MONDAY("월요일"), TUESDAY("화요일"), WEDNESDAY("수요일"), THURSDAY("목요일"), FRIDAY("금요일"), SATURDAY("토요일"), SUNDAY("일요일"); // final 필드 private String koreaName; // 생성자 Day(String koreaName) { this.koreaName = koreaName; } public String getKoreaName() { return koreaName; } }
- 선언
public class Main { public static void main(Stirng[] args) { Day monday = Day.MONDAY; } }
- 메모리구조
- 메서드
- ordinal() : index값 반환
- enum_객체1.compareTo(enum_객체2)
- index값 비교
- {enum_객체1의 index} - {enum_객체2의 index} 값 반환
- Enum클래스.values() : enum 클래스의 모든 값을 배열로 반환
- string값을 Enum으로 변경
- valuOfTerm 메서드 선언
// Day.java
public enum Day {
MONDAY("월요일"),
TUESDAY("화요일"),
WEDNESDAY("수요일"),
THURSDAY("목요일"),
FRIDAY("금요일"),
SATURDAY("토요일"),
SUNDAY("일요일");
// final 필드
private String koreaName;
// 생성자
Day(String koreaName) {
this.koreaName = koreaName;
}
public String getKoreaName() {
return koreaName;
}
public static Day valueOfTerm(String term) {
for(Day day : values()) {
if(term.equals(day.koreaName) return day;
}
return Day.MONDAY;
}
}
Optional
- Optional : null 방지 메소드 지원하는 Wrapper 클래스
- Wrapper 클래스 = 기존 클래스 호환 + 특수 기능
- NPE(Null Point Exception) 처리하기 위한 클래스
- java 8부터 지원
- 선언
- Optional<Wrapper 클래스> 객체명 = Optional.of(값)
- Optional<Wrapper 클래스> 객체명 = Optional.ofNullable(값)
- 메서드
- orElseThrow(() -> { 사용자 정의 예외 던지기 }) : NPE 발생할 때 사용자 정의 예외 던지기
- orElseGet(() -> { 기본값 }) : NPE 발생시 기본값 반환, 아닐 경우 객체값 반환
DateTime
- 날짜, 시간 API
- 종류
- LocalDate : 날짜 클래스
- LocalTime : 시간 클래스
- LocalDateTime : 날짜, 시간 클래스
- 장점
- 가독성, 명확성, 안정성 ↑
- 메서드
- LocalDateTime.now() : 현재 날짜, 시간
- LocalDate.of(year, month, dayOfMonth) : 특정 년/월/일 가져오기
- getDayOfWeek() : 요일 반환
- DateTimeFormatter.ofPattern("dd/MM/yyyy") : 원하는 형식으로 날짜 포맷 변경
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// 현재 시간, 날짜
LocalDateTime now = LocalDateTime.now();
System.out.println(now); // 2024-05-18T12:15:07.777887700
// 특정 년/월/일 가져오기
LocalDate date = LocalDate.of(2024, 05, 05);
System.out.println(date); // 2024-05-05
// 요일 반환
String day = date.getDayOfWeek().toString();
System.out.println("요일 : " + day); // 요일 : WEDNESDAY
// 포맷 변경
DateTimeFormatter formmter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String formatDatTime = LocalDate.of(2024,05,05).format(formmter);
System.out.println("포맷 변경 : " + formatDatTime); // 포맷 변경 : 05/05/2024
}
}