BackEnd/Java
-
Java8. parallelSortBackEnd/Java 2022. 1. 25. 22:44
Arrays.parallelSort(): Fort/Join 프레임워크를 사용해서 배열을 병렬로 정렬하는 기능을 제공합니다. 병렬 정렬 알고리즘은 배열을 둘로 계속 쪼개고 합치면서 정렬합니다. import java.util.Arrays; import java.util.Random; import java.util.stream.IntStream; public class ParallelSortClass { public static void main(String[] args) { // 정렬하는 배열의 크기에 따라 결과는 달라질 수 있습니다. int size = 1500; int[] numbers = new int[size]; Random random = new Random(); IntStream.range(0, ..
-
Java8. CompletableFutureBackEnd/Java 2022. 1. 23. 22:20
CompletableFuture는 자바에서 비동기(Asynchronous) 프로그래밍을 가능하게 하는 인터페이스입니다. Future를 사용해서도 어느정도는 가능했지만 다음과 같은 문제점이 있었습니다. Future를 외부에서 완료 시킬 수 없다. 취소하거나 get()에 타임아웃을 설정할 수는 있다. 블로킹 코드(get())를 사용하지 않고서는 작업이 끝났을 때 콜백을 실행할 수 없다. 여러 Future를 조합할 수 없다. 예외 처리용 API를 제공하지 앟는다. CompletableFuture API runAsync(): 비동기로 작업을 실행합니다. (리턴 값이 없는 경우) supplyAsync(): 비동기로 작업을 실행합니다. (리턴 값이 있는 경우) 원하는 Executor(ThreadPool)를 사용해서..
-
Callable과 FutureBackEnd/Java 2022. 1. 23. 04:40
Callable Runnable과 유사하지만 작업의 결과를 받을 수 있습니다. Future 비동기 작업의 현재 상태를 조회하거나 결과를 가져올 수 있습니다. 주요 API get(): 결과를 가져옵니다. 블록킹 콜(작업이 완료될 때까지 기다립니다.)이며, 타임아웃을 설정할 수 있습니다. isDone(): 작업 상태를 확인합니다. 완료 시 ture 아니면 false를 리턴합니다. cancel(): 취소 시 true 아니면 false를 리턴합니다. parameter로 ture를 전달하면 현재 진행중인 쓰레드를 interrupt합니다. import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.u..
-
Multi-Thread ProgrammingBackEnd/Java 2022. 1. 23. 03:13
Concurrent Software란 동시에 여러 작업을 할 수 있는 Software를 말합니다. Java에서 지원하는 Concurrent Progmming은 멀티프로세싱 (ProcessBuilder)과 멀티쓰레드가 있습니다. Multi-Thread Progmming 생성 방식 1. Thread 상속 public class MultiThread { public static void main(String[] args) { // 코드 상으로는 Thread-0 출력 이후 main이 출력되어야 하지만, 멀티쓰레드는 동시에 수행되기에 출력 순서를 보장하지 않습니다. MyThread myThread = new MyThread(); myThread.start(); System.out.println(Thread.cur..
-
Java8. Date-Time APIBackEnd/Java 2022. 1. 22. 15:19
기존 java.util.Date 클래스의 경우 mutable(값을 변경할 수 있다.)하기 때문에 thread safe하지 않았습니다. 또한, 클래스 이름이 명확하지 않고(Date인데 Time까지 다룬다.), 버그가 발생할 여지가 많았습니다(타입 안정성이 없고, 월이 0부터 시작한다.). 이로 인해 날짜 시간 처리가 복잡한 애플리케이션에서는 보통 Joda Time을 사용했습니다. Java8에서 제공하는 Date-Time API는 JSR-310 Spec.의 구현체를 제공합니다. Date-Time Design Principles Clear: API가 명확해야 합니다. Fluent: 코드가 읽기 쉽고, 메서드 호출을 연결할 수 있습니다. Immutable: 기존의 인스턴스는 변경할 수 없고, 새로운 인스턴스를 ..
-
Java8. OptionalBackEnd/Java 2022. 1. 22. 08:13
Optional은 비어있을 수도 있고, 오직 값 한개가 들어있을 수도 있는 컨테이너 인스턴스입니다. 메소드 매개변수 타입, 맵의 키 타입, 인스턴스 필드 타입으로도 사용이 가능하지만 리턴값으로만 사용하도록 권장합니다. 프리미티브 타입용 Optional(OptionalInt, OptionalLong 등)은 따로 존재하며, Collection, Map, Stream, Array, Optional은 자체적으로 비어있는 것을 확인할 수 있기 때문에 Optional로 감싸지 않습니다. Person과 Info 도메인이 존재할 때 아래와 같이 호출을 하게 되면 NullPointerException이 발생합니다. public class Person { private int age; private String name;..
-
Java8. 스트림 (Stream)BackEnd/Java 2022. 1. 22. 06:29
스트림(Stream)이란 순차 또는 병렬 집계 작업을 지원하는 오퍼레이션들의 모음입니다(Sequence of elements supporting sequential and parallel aggregate operations). 스트림의 특징 데이터를 담고 있는 저장소(Collection)가 아닙니다. Functional in nature, 스트림이 처리하는 데이터 소스를 변경하지 않습니다. 스트림으로 처리하는 데이터는 오직 한 번만 처리됩니다. 무제한일 수도 있습니다. (Short Circuit 메소드를 사용해서 제한할 수 있습니다.) 중개 오퍼레이션은 근본적으로 lazy 합니다. (lazy하다는 것은 종료 오퍼레이션이 오기 전까지 실행되지 않는 것을 의미합니다.) 손쉽게 병렬 처리할 수 있습니다. (..
-
Java8. 기본 메소드 (Default Method)와 스태틱 메소드 (Static Method)BackEnd/Java 2022. 1. 22. 04:10
기본 메소드 (Default Method) 기본 메소드란 인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법으로 해당 인터페이스를 구현한 클래스를 깨트리지 않고 새 기능을 추가할 수 있습니다. 단, Object가 제공하는 기능 (equals, hashCode)는 기본 메소드로 제공할 수 없습니다. 아래 Default 인터페이스와 Default 인터페이스를 구현한 DefaultClass가 있습니다. public class Application { public static void main(String[] args) { Default defaultClass = new DefaultClass(); defaultClass.printJava(); } } public interface Default { voi..