300x250
✍️ Singleton, 인스턴스를 하나만 제공하는 클래스 싱글톤 패턴은 두 가지 목적이 있다. 1. 클래스의 인스턴스를 오직 하나만 제공한다. 2. 하나만 존재하는 인스턴스의 전역적인 접근점을 제공한다. 예를 들어 어떤 소프트웨어의 환경설정은 오직 한 개만 존재해야 한다. 가령 게임의 환경설정이 여러 개일 때 혼란을 야기할 뿐이다. 🍊 Singleton, 가장 단순한 구현 App 클래스에서 Settings 클래스의 인스턴스를 얼마든지 new를 통해 만들 수 있다. public class Settings { } public class App { public static void main(String[] args) { Settings settings1 = new Settings(); Settings set..
✍️ CompletableFuture, 작업의 조합 Future만으론 작업을 이어서 수행하는 것이 어려웠다. = Callback이 없었기에 비동기적인 작업 두 개를 연결하는 것 자체가 어려웠다. 가령, hello가 끝나고 world를 해야 한다면 두 번의 get 호출이 이어져야 했다. CompletableFuture hello = CompletableFuture.supplyAsync(() -> { System.out.println("hello " + Thread.currentThread().getName()); return "hello"; }); CompletableFuture world = CompletableFuture.supplyAsync(() -> { System.out.println("world..
✍️ 지금까지의 Future 드디어, 자바8에 추가된 CompletableFuture를 학습할 시간으로 CompletableFuture를 사용하면 조금 더 쉽게 비동기 프로그래밍을 할 수 있다. 이전까지 사용한 Future는 몇 가지 문제점을 가지고 있다. 예외 처리가 안되며, 여러 Future를 조합하는 것이 어렵다. 무엇보다 Future에서 반환하는 결괏값을 가지고 어떤 작업을 수행해야 한다면 그 작업은 get 이후에 작성돼야 한다. 반면 CompletableFuture를 사용하면 작업이 끝난 이후에 수행할 일련의 추가 작업을 Callback 메서드에서 수행할 수 있으며 원한다면 비동기적으로도 처리할 수 있다. Future ExecutorService executorService = Executors..
✍️ Callable Callable은 Runnable과 매우 유사하지만 작업의 결과를 반환할 수 있다. 정의한 Callable 작업을 수행하기 위해 submit 메서드의 인자로 넘겨준다. 재밌는 점은 submit 메서드는 Future라는 걸 반환한다. 즉, Callable이 반환하는 타입의 Future를 반환한다. ExecutorService executorService = Executors.newSingleThreadExecutor(); Callable hello = () -> { Thread.sleep(3000); return "hello world!"; }; Future future = executorService.submit(hello); get(), 작업의 결과를 가져오기 Callable이 반..
✍️ Executors Thread나 Runnable처럼 Low-Level API를 직접 다루는 것이 아닌, 쓰레드를 만들고 관리하는 작업을 고수준 API, Executors에 위임하는 것 Executors, 고수준(High-Level) Concurrency 프로그래밍 쓰레드를 만들고 관리하는 작업을 어플리케이션에서 분리한다. Executors가 쓰레드를 만들고 개발자는 Runnable에 해야 할 일을 정의해서 넘겨준다. Executors가 하는 일 쓰레드 만들기 : 어플리케이션이 사용할 쓰레드 풀을 만들어 관리한다. 쓰레드 관리 : 쓰레드 생명 주기를 관리한다. 작업 처리 및 실행 : 쓰레드로 실행할 작업을 제공할 수 있는 API를 제공한다. 주요 인터페이스 Executor : execute(Runna..
✍️ Java Concurrent 프로그래밍 동시에 여러 작업을 할 수 있는 소프트웨어 예) 웹 브라우저로 유튜브를 보면서 키보드로 문서에 타이핑을 할 수 있음 예) 이클립스에 코드를 타이핑하면 코드가 입력됨과 동시에 추천 코드를 제안함 자바에서 지원하는 Concurrent 프로그래밍 멀티 프로세싱 (ProcessBuilder) 멀티 쓰레드 (본 포스팅에서 다룰 주제) 자바 멀티 쓰레드 프로그래밍 Thread Runnable 🍊 자바 멀티 쓰레드 프로그래밍 Java 프로세스의 기본 쓰레드는 main 쓰레드다. public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); } // main 하나의 쓰..