분류 전체보기

    Java time - LocalDateTime 파싱과 포맷

    파싱과 포맷 날짜와 시간을 원하는 형식으로 출력하고 해석(파싱, parsing)하는 방법 형식화(formatting)와 관련된 클래스들은java.time.format패키지에 들어있음 이 중 DateTimeFormatter가 핵심 LocalDate date = LocalDate.of(2016, 1, 2); String yyyymmdd = DateTimeFormatter.ISO_LOCAL_DATE.format(date); // "2016-01-02" String yyyymmdd = date.format(DateTimeFormatter.ISO_LOCAL_DATE); // "2016-01-02" DateTimeFormatter 자주 쓰이는 다양한 형식들을 기본적으로 정의 그 외의 형식이 필요하다면 직접 정의해서..

    Java 형식화 클래스 - Format, DecimalFormat, SimpleDateFormat

    형식화 클래스 DecimalFormat DecimalFormat을 이용하면 숫자 데이터를 정수, 부동소수점, 금액 등의 다양한 형식으로 표현할 수 있다. 반대로 일정한 형식의 텍스트 데이터를 숫자로 쉽게 변환도 가능하다. 형식화 클래스는 패턴을 정의하는 것이 전부다. DecimalFormat 사용법 double number = 1234567.89; // 1.원하는 출력형식의 패턴을 작성하여 DecimalFormat 인스턴스를 생성 DecimalFormat df = new DecimalFormat("#.#E0"); // 2.출력하고자 하는 문자열로 format 메소드를 호출 String result = df.format(number); docs : https://docs.oracle.com/javase/7..

    Java time 패키지 - TemporalAdjusters 클래스

    TemporalAdjusters 자주 쓰일만한 날짜 계산들을 대신 해주는 메서드를 정의해 놓은 클래스 예시 : 다음 주 월요일의 날짜를 계산할 때 TemporalAdjusters에 정의된 next()를 사용한 예 LocalDate today = LocalDate.now(); LocalDate nextMonday = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); 메서드 종류 메서드 설명 firstDayOfNextYear() 다음 해의 첫 날 firstDayOfNextMonth() 다음 달의 첫 날 firstDayOfYear() 올 해의 첫 날 firstDayOfMonth() 이번 달의 첫 날 lastDayOfYear() 올 해의 마지막 날 lastDayOf..

    Java time 패키지 - Period, Duration 클래스

    Period와 Duration Period 클래스 : 두 날짜 간의 차이를 표현하기 위한것. 날짜 - 날짜 Duration 클래스 : 시간의 차이를 표현하기 위한 클래스. 시간 - 시간 duration에서 시/분/초/나노초 구하기 duration에서 시/분/초/나노초 구하기 - 1 ( 덜 안전함) 불편하지만 사용할 수 있는 방법 시간 : long hour = du.getSeconds() / 3600; 분 : long min = (du.getSeconds() - hour*3600) / 60; 초 : long sec = (du.getSeconds() - hour*3600 - min * 60) % 60; 나노 : nano = du.getNano(); duration에서 시/분/초/나노초 구하기 - 2 (좀 더..

    Java time 패키지 - Calendar와 Date

    1. Calendar 와 Date Date는 JDK1.0, Calendar는 JDK1.1 부터 제공되었다. JDK1.8부터 java.time 패키지로 Calendar와 Date의 단점을 개선한 클래스들이 추가되었다. Calendar는 추상클래스라서 객체를 직접 생성할 수 없고, 메소드를 통해서 완전히 구현된 클래스의 인스턴스를 얻어야 한다. // 에러. 추상클래스는 인스턴스를 생성할 수 없다. Calendar cal = new Calendar(); // 굿. getInstance()는 Calendar 클래스를 구현한 클래스의 인스턴스를 반환 Calendar cal = Calendar.getInstance(); Calendar.getInstance() 가 static인이유 Calendar는 추상클래스 메소..

    Java time 패키지 - LocalDateTime, ZoneDateTime, OffsetDateTime

    ' 연산은 LocalDate, LocalTime 을 보면서 하면 된다. LocalDateTime LocalDate와 LocalTime을 합쳐서 LocalDateTime을 만들 수 있다. (둘의 기능을 합쳐놓았다고 보면 된다) LocalDate date = LocalDate.of(2018, 10, 05); LocalTime time = LocalTime.of(12,34,56); LocalDateTime dt = LocalDateTime.of(date, time); LocalDateTime dt2 = date.atTime(time); LocalDateTime dt3 = time.atDate(date); LocalDateTime dt4 = date.atTime(12, 34 ,56); LocalDateTime ..

    Java time 패키지 - LocalDate, LocalTime, Instant

    java.time 패키지 - LocalDate, LocalTime Java의 탄생과 함께한 Date와 Calendar의 단점을 해소하기 위해 JDK 1.8부터 java.time 패키지가 추가되었다. 이 패키지는 4개의 하위 패키지가 있다. 패키지 설명 java.time 날짜와 시간을 다루는데 필요한 핵심 클래스들 제공 java.time.chrono 표준(ISO)이 아닌 달력 시스템을 위한 클래스들 제공 java.time.format 날짜와 시간을 파싱, 형식화하기 위한 클래스들 제공 java.time.temporal 날짜와 시간의 필드와 단위(unit)을 위한 클래스들 제공 java.time.zone 시간대(time-zone)와 관련된 클래스들 제공 이 패키지의 클래스들은 다 불변이다. Immutable..

    Java UUID (+ IN MySQL )

    UUID란 UUID(Universally Unique Identifier)는 온라인 대전 시스템이나 랭킹 시스템 등에서 전 세계에서 유일한 값으로 서버에 연결하지 않고 만들 경우 활용하는 식별자다. UUID는 전 세계에 중복 없는 독특한 값이 되도록 설계되어 있으며 고유성이 중앙 서버 등 요소에 의존하지 않도록 되어 있다. 이런 특징을 가진 UUID를 데이터베이스 기본키에 이용하면 타인 데이터베이스와 결합하거나 데이터를 다른 데이터베이스로 이동하는 걸 자유롭게 할 수 있게 된다. 반면 누구나 UUID를 생성할 수 있기 때문에 현재 전 세계에 존재하는 UUID를 추적할 수 없다는 단점도 함께 갖고 있다. 전 세계에 중복이 없는 독특한 가치를 실현하는 방법은 다수 존재한다. 하지만 UUID 구현은 IETF의..

    예외 처리 방법(Exception Handling) - 복구, 회피, 전환

    예외 처리 방법(Exception Handling) 예외를 처리하는 방법에는 예외 복구, 예외 처리 회피, 예외 전환 방법이 있다. 예외 복구 예외 상황을 파악하고 문제를 해결해서 정상 상태로 돌려놓는 방법 예외를 잡아서 일정 시간, 조건만큼 대기하고 다시 재시도를 반복한다. 최대 재시도 횟수를 넘기게 되는 경우 예외를 발생시킨다. final int MAX_RETRY = 100; public Object someMethod() { int maxRetry = MAX_RETRY; while(maxRetry > 0) { try { ... } catch(SomeException e) { // 로그 출력. 정해진 시간만큼 대기한다. } finally { // 리소스 반납 및 정리 작업 } } // 최대 재시도 횟..

    JpaRepository에서 save시 select 쿼리가 먼저 실행되는 이유

    Spring Data Jpa - JpaRepository에서 save시 select 쿼리가 먼저 실행되는 이유 Entity의 id가 GeneratedValue가 sequence(또는 identity)가 아니고, 직접 id를 set 할 때, 하이버네이트에서 엔티티 Id 생성 전략이, 개발자가 직접 Id를 만들 고 엔티티 객체 저장 시 select 쿼리가 나간다. 결론부터 JpaRepository.save(entity) 를 이용해서 엔티티 객체를 저장할 때, entityManager.persist or entityManager.merge 를 호출한다. 이 때, JpaRepository의 구현체인 SimpleJpaRepository는 isNew 메서드를 통해 id값이 없으면 새 엔티티라고 판단하고, em.pe..