날짜 / 시간 정리
Java 8부터는 java.time 패키지(=JSR-310)가 기본 표준이 되었다. 이 API는 다음과 같은 특징을 갖는다. LocalDate / LocalTime / LocalDateTime 가장 기본이 되는 날짜/시간 클래스는 아래 3개이다 LocalDate LocalTime LocalDateTime 이름에 Local이 붙는 이유는 타임존(ZoneId)이 없기 때문이다. 즉, “서울 시간”, “런던 시간”같은…
Java 8부터는 java.time 패키지(=JSR-310)가 기본 표준이 되었다. 이 API는 다음과 같은 특징을 갖는다. LocalDate / LocalTime / LocalDateTime 가장 기본이 되는 날짜/시간 클래스는 아래 3개이다 LocalDate LocalTime LocalDateTime 이름에 Local이 붙는 이유는 타임존(ZoneId)이 없기 때문이다. 즉, “서울 시간”, “런던 시간”같은…
이커머스 시스템에서 연동해야 하는 POS사가 하이픈POS, 나이스POS, 이지POS, OKPOS, 메이트POS, 드림하이테크POS, fodiPOS까지 7개였다가 KpnpPOS가 추가되면서 8개로 늘었다. 그 시점에 코드에는 POS 타입마다 if-else 분기가 controller, service, repository 곳곳에 흩어져 있었다. POS사 하나를 추가하면 건드려야 할 파일이 최소 5개였고, 그 중…
Java의 열거형(Enum Type)을 제대로 이해하려면 열거형이 생겨난 배경을 알아야 한다. 실무 예제를 통해 문제 상황부터 살펴보자 비즈니스 요구사항 다음과 같은 회원 등급 시스템을 구현한다고 가정해보자 예를 들어, GOLD 등급 회원이 10,000원을 구매하면 2,000원 할인 받는다 문자열 사용의 문제점 첫 번째…
자바 개발을 하다 보면 날짜와 시간을 다루는 일이 빈번하다. 과거의 Date나 Calendar 클래스는 설계 결함이 많아 사용하기 매우 까다로웠으나, 자바 8에서 도입된 java.time 라이브러리는 이를 완벽하게 해결했다. 한눈에 보는 날짜와 시간 클래스 체계 자바가 제공하는 클래스들은 ‘무엇을 관리하느냐’에 따라 명확하게…
Java 동시성 컬렉션에서 Collections.synchronizedXxx()를 살펴보았다. 이번에는 그 한계를 극복한 java.util.concurrent 패키지와 고성능 동시성 컬렉션들을 알아보자 왜 별도의 동시성 컬렉션이 필요할까? Collections.synchronized의 문제 Concurrent 컬렉션의 해결책 동시성 컬렉션 개요 java.util.concurrent 패키지 핵심 특징 제공되는 컬렉션 종류 타입 일반 컬렉션 Concurrent 컬렉션…
Java 컬렉션의 근본적인 특징 java.util 패키지의 컬렉션 프레임워크는 기본적으로 Thread-safe하지 않다. 그렇다면 왜 처음부터 모든 컬렉션에 synchronized를 걸어두지 않았을까? 그 이유는 동기화는 성능 비용을 수반하기 때문이다 Vector의 교훈 Java는 과거 이런 실수를 했다 결과 교훈: 동기화의 필요성을 정확히 판단하고 필요한…
분명 값을 보냈는데 400이 떴다. 처음엔 @NotBlank 문제인 줄 알고 어노테이션을 바꿔가며 한참을 헤맸다. 원인은 필드명이었다 문제 상황 프로젝트에서 데이터 매핑 오류를 경험했다. 분명 JSON으로 값을 보냈는데, Controller에서 @Valid 검증에 걸려 400 에러가 발생했다 studentName은 정상 매핑됐다. sId만 계속 null이었다…
java.util 패키지의 컬렉션 프레임워크(ArrayList, HashMap, LinkedList 등)는 멀티스레드 환경에서 안전할까? 결론부터 말하자면, 대부분의 컬렉션은 Thread-Safe하지 않는다 Java 컬렉션 프레임워크는 Thread-Safe한가? Thread-Safe의 정의 thread-safe란 여러 스레드가 동시에 접근해도 문제없이 동작하는 것을 의미한다 위 코드를 보면 add() 메서드가 단순히 컬렉션에 데이터 하나를…
문제 정의 생산자 – 소비자 문제는 한정된 크기의 버퍼를 통해 데이터를 주고 받는 멀티스레드 환경에서 발생하는 동시성 문제이다 핵심 문제 해결 방안의 진화 단순 synchronized (문제 발생) sleep()으로 대기 (더 심각한 문제) wait/nofity 사용 (비효율 존재) Lock + Condition으로 개선…
코틀린을 배우기 위해서 인프런에서 강의를 구매하고 코틀린과 친해지고 기본기를 다지기 위해서 공부하는 중이다. 글 내용은 배열과 컬렉션 중 Kotlin, Java와 함께 Collection을 다루는 방법이고 최태현님의 자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide) 강의에 소금을 조금 친 내용이다 Kotlin과 Java는 상호…