Future 활용

실전 예제로 보는 Future Runnable 방식의 한계 전통적인 Runnable 방식으로 1부터 100까지의 합을 병렬 처리해본다 Runnable 방식의 문제점 Callable과 Future로 개선 같은 작업을 Callable과 Future로 구현 개선된 점 💡 핵심: 마치 단일 스레드에서 일반 메서드를 호출하는 것처럼 느껴진다 Future가 필요한…

Callable과 Future

Runnable의 한계를 극복하고 반환 값을 받을 수 있는 Callable과 Future에 대해 알아본다 Runnable의 한계 기존 Runnable 인터페이스를 살펴본다 Runnable은 다음과 같은 명확한 한계가 있다 반환 값이 없음 예외 처리의 제약 자식은 부모의 예외 범위를 넘어설 수 없기 때문이다 💡 참고:…

스레드 풀과 Executor 프레임워크

스레드를 직접 사용할 때의 문제점 실무에서 스레드를 직접 생성해서 사용하면 다음과 같은 세 가지 문제가 발생한다 스레드 생성 비용으로 인한 성능 문제 스레드는 단순한 자바 객체가 아니다. 스레드를 생성하고 시작(start()) 하는 과정은 다음과 같은 이유로 매우 무겁다 메모리 할당 운영체제…

날짜와 시간 포맷팅과 파싱

실무에서 날짜와 시간을 다루다 보면 사용자에게 보여주기 위해 특정 형식으로 변환하거나, 반대로 사용자가 입력한 문자열을 날짜 객체로 변환해야 하는 경우가 빈번하다 핵심 개념 포맷팅은 날짜/시간 객체 → 문자열, 파싱은 문자열 → 날짜/시간 객체 변환이다 날짜 포맷팅과 파싱 (LocalDate) 기본 출력의…

날짜와 시간 조작하기

Java 8에서 도입된 java.time 패키지는 기존 Date와 Calendar의 문제점들을 해결한 현대적인 날짜/시간 API이다. 이번 포스트에는 ChronoUnit와 ChronoField에 대해 알아본다 날짜와 시간의 핵심 개념 날짜와 시간을 다룰 때 가장 먼저 이해해야 할 개념은 특정 시점의 시간과 시간의 간격을 명확히 구분하는 것이다.…

날짜 / 시간 정리

Java 8부터는 java.time 패키지(=JSR-310)가 기본 표준이 되었다. 이 API는 다음과 같은 특징을 갖는다. LocalDate / LocalTime / LocalDateTime 가장 기본이 되는 날짜/시간 클래스는 아래 3개이다 LocalDate LocalTime LocalDateTime 이름에 Local이 붙는 이유는 타임존(ZoneId)이 없기 때문이다. 즉, “서울 시간”, “런던 시간”같은…

전략 패턴을 활용한 다형성 결제 시스템 설계

비즈니스 요구사항 이커머스 시스템에서 주문(Order)은 다양한 결제 수단을 지원해야 한다 각 결제 수단마다 필요한 데이터가 다르고, 별도의 테이블로 관리된다 설계 목표 조회를 하나의 API로, 저장/수정도 하나의 API로 통합하되, 내부 구현은 결제 타입별로 분리 Domain Model & Enum JPA가 아닌 jOOQ를…

Enum – 타입 안전한 열거형

Java의 열거형(Enum Type)을 제대로 이해하려면 열거형이 생겨난 배경을 알아야 한다. 실무 예제를 통해 문제 상황부터 살펴보자 비즈니스 요구사항 다음과 같은 회원 등급 시스템을 구현한다고 가정해보자 예를 들어, GOLD 등급 회원이 10,000원을 구매하면 2,000원 할인 받는다 문자열 사용의 문제점 첫 번째…

자바 날짜와 시간 API

자바 개발을 하다 보면 날짜와 시간을 다루는 일이 빈번하다. 과거의 Date나 Calendar 클래스는 설계 결함이 많아 사용하기 매우 까다로웠으나, 자바 8에서 도입된 java.time 라이브러리는 이를 완벽하게 해결했다. 한눈에 보는 날짜와 시간 클래스 체계 자바가 제공하는 클래스들은 ‘무엇을 관리하느냐’에 따라 명확하게…

Java 동시성 컬렉션 (2) – Concurrent Collection

Java 동시성 컬렉션에서 Collections.synchronizedXxx()를 살펴보았다. 이번에는 그 한계를 극복한 java.util.concurrent 패키지와 고성능 동시성 컬렉션들을 알아보자 왜 별도의 동시성 컬렉션이 필요할까? Collections.synchronized의 문제 Concurrent 컬렉션의 해결책 동시성 컬렉션 개요 java.util.concurrent 패키지 핵심 특징 제공되는 컬렉션 종류 타입 일반 컬렉션 Concurrent 컬렉션…