슈퍼코딩/주특기(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
    }
}