book/modern java in action12 Chapter 16 CompletableFuture : 안정적 비동기 프로그래밍 이번 Chapter에서는 자바 8이 제공하는 Future 인터페이스와 구현 클래스인 CompletableFuture가 비동기 프로그램에 얼마나 도움을 주는가를 중심으로 설명한다. 앞의 15장에서 Future와 CompletableFuture의 기본적인 구현 과정과 동작 원리를 설명했다면 16장에서는 실제 사용 예시와 응용을 통해 더욱 자세하게 설명한다. Future의 단순 활용 Future란 비동기 계산을 모델링하는 인터페이스이다. 비동기 계산이란 무엇일까? 간단하게 설명하자면 시간이 오래 걸리는 작업을 Future 내부에서 설정하여 호출자 쓰레드가 결과를 기다리는 동안 다른 작업을 할 수 있도록 하는 것이다. 즉 여러 작업을 처리할 때 한 작업씩 순차적으로 처리하는 것이 아닌 지연되는 작업이 있어도 동.. 2023. 2. 25. Chapter 15 CompletableFuture와 리액티브 프로그래밍 컨셉의 기초 (부제: 쓰레드를 통한 병렬 처리와 쓰레드 풀의 정의 및 기능) 이번 Chapter를 읽고 정리하면서 쉽게 이해가 가지 않았던 부분들이 많았다. 글 내용의 전반적인 흐름이나 주제 자체가 낯설게 느껴진 것도 있었지만 무엇보다 기본적인 CS 관련 용어를 정확히 알고 이해하지 못했기 때문이라 생각됐다. 그래서 이번 Chapter에 대한 정리를 하기 앞서 간단한 CS 용어를 먼저 정리하려고 한다. 1. 프로세스(Process) - 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 - 운영체제에 의해 메모리 공간을 할당받아 단순 실행 중인 프로그램 2. 코어(Core) - CPU에서 연산 작업을 수행하며 하나의 프로세스만 처리 3. 쓰레드(Thread) - CPU 내에서 실제 작업을 실행하는 주체로 가장 작은 단위 코어와 쓰레드의 차이? 코어와 쓰레드 둘 다 CPU에서 연산.. 2023. 2. 20. Chapter 13 디폴트 메서드 인터페이스와 구현 클래스가 존재할 때 인터페이스에 새로운 메서드를 추가한다면 구현 클래스에도 새로운 메서드의 구현을 해야 할 것이다. 하지만 메서드를 추가할 때 클래스를 관리할 수 있는 상황이라면 상관이 없겠지만 관리할 수 없는 상황이라면 문제가 발생할 것이다. 위와 같은 상활을 예로 들어, 어떤 한 설계자가 미리 설계한 API가 있고 이를 배포까지 한 상태이다. 배포 후 API를 사용하다 추가해야 할 기능이 생겼고 이를 위해 설계자는 인터페이스에 새로운 메서드를 추가했다. 그런데 만약 메서드 추가 이전에 기존 API를 구현하여 사용하고 있는 사용자의 구현 클래스는 어떻게 될까? 아마 사용자가 직접 구현한 메서드는 동작하지 않을 것이다. 물론 인터페이스에 새로운 메서드를 추가했지만 이를 구현하지 않고 사.. 2023. 2. 11. Chapter 11 null 대신 Optional 클래스 개발하면서 자주 발생하는 예외 중 하나로 NullPointException가 있다. NullPointException이란 null을 가지고 있는 객체나 변수를 호출할 때 발생하게 된다. 이러한 null 값 발생에 대한 예외로 인해 생길 수 있는 문제에는 무엇이 있을까? - null 값을 가지는 값을 반환하면서 예외가 발생하고 프로그램이 중단된다. - null 값을 가지는지 확인하기 위해 일일이 확인 코드를 추가해서 예외 문제를 해결해야 한다. - if문과 같은 코드를 계속해서 추가하다 보면 코드의 들여 쓰기가 증가하고 이로 인해 가독성이 떨어질 수 있다. 이러한 문제를 해결하기 위해 자바에서는 새로운 방법을 제시했는데 자바 8에서는 null 참조를 해결하기 위해 Optional이라는 클래스를 제공한다. .. 2023. 2. 4. Chapter 10 람다를 이용한 도메인 언어(DSL, domain-specific languages) 이 챕터에서는 DSL에 대한 정의와 자바를 활용한 DSL의 쓰임을 중점으로 다루고 있다. 책을 이해하는 과정에서 DSL이라는 단어가 낯설게 느껴져 이를 먼저 잘 이해하고 넘어가기로 했다. 1. DSL이란? DSL이란 domain specific languages의 줄임말로 도메인 특화 언어라는 뜻이다. 처음 도메인 특화 언어라는 말이 쉽게 다가오지 않을 수 있다. 이를 쉽게 이해하기 위해서는 기존 언어와의 차이점을 예로 들 수 있다. 우리가 기존에 알고 있는 자바나 C 같은 언어는 소프트웨어 분야에서 다양하게 쓰이기 때문에 범용 언어라고 한다. 하지만 이는 도메인 특화 언어와 반대되는 개념이다. 즉 DSL은 범용 언어와 달리 여러 분야가 아닌 특정 분야에만 최적화된 언어이다. 그렇다면 자바와 같은 범용언.. 2023. 1. 27. Chapter 9 리팩터링, 테스팅, 디버깅 (전략 디자인 패턴의 리팩터링) 기존의 코드를 기반으로 가독성과 유연성을 높이기 위해 어떻게 리펙토링 하는지가 중요한데 특히 자바 8의 람다 표현식을 이용하면 전략, 템플릿 메서드, 옵저버, 의무체인, 팩토리 등 다양한 객체지향의 디자인 패턴의 간소화가 가능해진다. 다음 설명을 통해 자세히 알아보자 1. 람다로 객체지향 디자인 패턴 리팩터링하기 디자인 패턴은 다음과 같은 특징을 지닌다. - 공통적인 소프트웨어 문제를 설계할 때 이를 재사용할 수 있는 검증된 청사진을 제공한다. - 여러 문제의 상황에 따라 미리 설계된 디자인 패턴을 사용하여 해결하는 것이 가능하다. - 기존의 디자인 패턴에서 람다 표현식이 더해지면 문제를 더 쉽고 간단하게 해결할 수 있다. 각각의 디자인 패턴에 따른 리팩터링 예시를 살펴보자 1. 전략 패턴 문제 상황에 .. 2023. 1. 23. 이전 1 2 다음