본문 바로가기

Java8

[모던 자바 인 액션] 15장 - CompletableFuture와 리액티브 프로그래밍 컨셉의 기초 CompletableFuture와 리액티브 프로그래밍 컨셉의 기초 동시성을 구현하는 자바 지원의 진화 처음 Runnable, Thread를 동기화된 클래스와 메서드를 이용해 잠갔다. Java5 ExecutorService 인터페이스, Callable, Future Java7 분할 정복, 포크/조인을 지원하는 java.util.concurrent.RecursiveTask Java8 스트림, 람다에 기반한 병렬 프로세싱 Java9 분산 비동기 프로그래밍을 명시적으로 지원 발행-구독 프로토콜(Flow API) Executor와 스레드 풀 자바5는 Executor 프레임워크와 스레드 풀을 통해 스레드의 성능을 고도화 함. 스레드의 문제 스레드를 만들고 종료하는 비용은 비싸다. 따라서 기존 스레드가 실행되는 상태.. 2022. 12. 30.
Easy Random을 이용한 객체 생성 Easy Random 테스트를 위해 Dummy 객체를 만들 때 굉장히 번거롭다. 그 때 도움을 받을 수 있는 Easy Random 라이브러리를 알게 되어 소개하려고 한다. public class Member { private final Long id; private final String username; private final String email; private final LocalDate birthDate; private final LocalDateTime createdAt; public Member(Long id, String username, String email, LocalDate birthDate, LocalDateTime createdAt) { this.id = id; this.use.. 2022. 12. 22.
Strategy Pattern 전략 패턴 (Strategy Pattern) 템플릿 메서드 패턴은 상속을 통해 문제를 해결했다. 전략패턴은 Context 라는 곳에 변하지 않는 부분을 두고, 변하는 부분을 Strategy 라는 인터페이스에서 구현하도록 하여 상속이 아닌 위임을 통해 문제를 해결한다. 전략 패턴의 의도 알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만들자. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. Context @Slf4j public class Context { private final Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void e.. 2022. 12. 2.
Template Method Pattern 템플릿 메서드 패턴 템플릿 메서드 패턴의 의도 작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기합니다. 템플릿 메서드를 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의할 수 있습니다. 로깅 부분은 변하지 않지만, 비즈니스 로직은 변경. 이 둘을 분리해서 모듈화 해야 한다. @Slf4j public abstract class AbstractTemplate { public void execute() { long startTime = System.currentTimeMillis(); // Logic Start call(); // 상속 // Logic End long endTime = System.currentTimeMillis(); long result.. 2022. 12. 2.