JAVA < 날짜&시간 , 제네릭 >

Zero·2022년 4월 2일
0

날짜와 시간 다루기

JDK8 이후부터는 java.time 패키지의 클래스로 많은 부분이 대체 되었음

날짜, 시간 구하기

LocalDate, LocalTime , LocalDataTime

가장 기본이 되는 클래스들로 각각 날짜, 시간 , 날짜와 시간을 다루는 클래스
new()를 통해 직접적인 인스턴스 생성이 불가하고, static 메서드를 이용하는 방식을 사용

  • now() : 현재 날짜, 시간에 기반해 인스턴스 생성
  • of() : 인자로 전달되는 특정 날짜, 시간에 기반한 인스턴스 생성
  • atTime() : 특정 시간정보에 기반해 LocalDateTime 인스턴스를 생성

-> 실행결과

별도의 형식을 지정하지 않았기 때문에 해당 객체에서 제공하는 기본 형식으로 출력됩니다. 2019-07-28T00:00 과 같은 형식은 UTC 시간이라고 하는 협정세계시간의 표기법 입니다.

  • now() 는 현재 날짜 및 시간, of() 는 특정 날짜 및 시간 객체 생성
  • LocalDate 에 Time 을 추가하려면 atTime() 을 사용하며 , LocalDateTime 이 리턴됨.
  • LocalTime.MIDNIGHT , MAX, MIN, NOON 등 사용 가능

형식 지정하기

java.time.format 패키지의 클래스들이 사용되면 대표적인 것은 DateTimeFormatter 클래스이다.

  • ofLocalizedDate() : 현재 지역에 따른 기본 표기 형식으로 출력
  • ofPattern() : 인자로 특정 포맷을 지정

날짜와 시간차이 계산하기

  • peroid : 날짜 사이의 간격을 년/월/일 단위로 나타냄
  • Duration : 시간 사이의 간격을 나노초 단위로 나타냄

제네릭(Generics)

타입 안정성(Type Safe)

Ex) 예시

  • Color 객체를 생성하는데 "red"라는 문자열 데이터가 사용됨
  • 컴파일상에는 문제가 없으나 만일 문자열 값이 잘못된 것이라면 실행중 에러가 발생

이와 같이 객체 타입으로 지정하면 컴파일시 잘못된 색상을 사용할 가능성의 원천 차단

제네릭

예를들어 ArrayList는 배열과 유사한 자료구조를 제공하는 클래스로 Object 타입의 데이터를 저장할 수 있다 이는 모든 자바 클래스 원소가 들어갈 수 있다는 의미이고 원소들을 꺼내 사용할 때 타입들이 서로 다를 수 있기 때문에 타입비교를 해야하는 문제가 발생한다

-> 다양한 타입의 객체들을 메서드나 컬렉션 클래스에 컴파일 과정에 타입체크를 해주는 기능을 제네릭이라고 한다

  • 제네릭 클래스 타입의 객체를 생성할 때 개발자가 원하는 타입 지정 가능
  • 타입 안정성 제공
  • 의도하지 않은 타입의 객체가 저장되는 것을 막아 잘못 형변환 되는 오류 방지
  • 형변환의 번거로움 줄여줌 -> 간결한 코드 유지 가능

  • <T>는 타입 파라미터를 의미하며 임의의 객체타입 지정 가능
  • 타입파라미터는 원시형은 안되고 객체 타입만 가능하므로 int의 경우 Integer 랩퍼클래스를 사용
  • new() 에서는 <> 타입 명시 하지 않아도 됨

주의점

  • T는 인스턴스 변수로 간주되기 때문에 static멤버에는 타입변수 T를 사용 불가
  • 제네릭 타입의 배열을 생성하는 것을 불가
  • new , instanceof 연산자의 경우 컴파일 시점에 타입T를 명확하게 알아야 하기 때문에 T를 피연산자로 사용 불가

  • 동일한 Storage 클래스를 사용하지만 각각 StringInteger타입으로 선언
  • 선언된 타입 파라미터에 따라 setItem() 의 값의 타입 일치를 컴파일러가 체크

제네릭 메서드

  • 인자에 제네릭 클래스를 사용한 경우 메서드 앞에 T를 붙여주어야 함

  • 리턴 타입 역시 제네릭 클래스 사용 가능

  • 인자와 리턴이 모두 제네릭을 가지는 경우 다소 복잡할 수 있다

0개의 댓글