JAVA/JAVA8 관련
-
애노테이션의 변화JAVA/JAVA8 관련 2022. 6. 3. 12:57
애노테이션 관련 두가지 큰 변화 - 자바 8부터 애노테이션을 타입 선언부에도 사용할 수 있게 됨. - 자바 8부터 애노테이션을 중복해서 사용할 수 있게 됨. 타입 선언 부 - 제네릭 타입 - 변수 타입 - 매개변수 타입 - 예외 타입 - ... 타입에 사용할 수 있으려면 - TYPE_PARAMETER : 타입 변수에만 사용할 수 있다. - TYPE_USE : 타입 변수를 포함해서 모든 타입 선언부에 사용할 수 있다. @Retention 애노테이션 - 해당 애노테이션이 언제까지 유지할지 알려주는 애노테이션이다. RetentionPolicy - Retention에는 3가지 속성이 존재한다. - SOURCE, CLASS, RUNTIME Source : 커스텀 애노테이션을 주석처럼 사용하고 싶으면 옵션을 Sou..
-
CompletableFuture2JAVA/JAVA8 관련 2022. 5. 31. 16:54
CompletableFuture는 별다른 Executor를 사용하지 않아도 ForkJoinPool에 있는 Common Pool을 사용한다. 하지만 원한다면 직접 쓰레드풀을 만들어서 사용할 수 있다. 아래 예제와 같이 runAsync()나 supplyAsync() 메서드를 호출할 때 2번째 인자로 줄 수 있다. 콜백을 실행할 풀을 다른곳에서 실행할때에는 thenRunAsync, thenAcceptAsync, thenRunAsync 등을 사용하면된다. public class CompletableFutureP2 { public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService execu..
-
CompletableFuture1JAVA/JAVA8 관련 2022. 5. 31. 14:55
CompletableFuture : - 자바에서 비동기 프로그래밍을 지원하는 인터페이스임. - Future에서 하기 어려웠던 작업들을 수월하게 할 수 있음. Future에서 하기 어려웠던 작업들 1) Future를 외부에서 완료시킬 수 없다. 취소하거나 get()에 타임아웃을 설정할 수 없다. 2) 블로킹 코드(get())를 사용하지 않고서는 작업이 끝났을 때 콜백을 실행할 수 없음. -> Future를 통해 결과값을 만들고 무언가를 하는 작업은 get() 이후에 와야한다. 3) 여러 Future를 조합할 수 없다. 예) 이벤트 정보를 가져온 다음에 이벤트에 참여한 회원 목록 가져오기 4) 예외처리용 API를 제공하지 않는다. 비동기로 작업 실행하기 - 리턴값이 없는 작업 : runAsync() 사용 -..
-
Callable과 FutureJAVA/JAVA8 관련 2022. 5. 28. 17:39
Callable - Runnable과 유사하지만 작업의 결과를 받을 수 있다. (return) Callabel 관련 메서드 get() - 블록킹 콜이다. - 타임아웃을 설정할 수 있다. - 아래 예제의 경우 Started!!!을 출력하고 Callable 작업이 완료 된 이후(2초 Thread.sleep) End!!!를 출력한다. isDone() - 작업을 종료 했으면 true, 종료하지 못했으면 false를 리턴한다. public class CallabeAndFuture { public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService executorService = Executo..
-
Concurrent - ExecutorJAVA/JAVA8 관련 2022. 5. 22. 01:13
앞서 다룬 Thread나 Runnable와 같이 Low-Level API를 직접 다루는 것이 아닌, 쓰레드를 만들고 관리하는 작업을 고수준 API인 Executors에 위임하는 것 고수준 (High-Level) Concurrency 프로그래밍 쓰레드를 만들고 관리하는 작업을 애플리케이션에서 분리. 그런 기능을 Executors에게 위임. Executors가 하는 일 쓰레드 만들기: 애플리케이션이 사용할 쓰레드 풀을 만들어 관리한다. 쓰레드 관리: 쓰레드 생명 주기를 관리한다. 작업 처리 및 실행: 쓰레드로 실행할 작업을 제공할 수 있는 API를 제공한다. 단일 쓰레드 사용 public class Executor1 { public static void main(String[] args) { // 쓰레드를 ..
-
Concurrent 프로그래밍 소개JAVA/JAVA8 관련 2022. 5. 20. 16:48
Concurrent 소프트웨어 동시에 여러 작업을 할 수 있는 소프트웨어 예) 웹 브라우저로 유튜브를 보면서 키보드로 문서에 타이핑을 할 수 있음. 예) 녹화를 하면서 인텔리J로 코딩을 하고 워드에 적어둔 문서를 보거나 수정할 수 있음. 자바에서 지원하는 컨커런트 프로그래밍 멀티프로세싱 (ProcessBuilder) 멀티쓰레드 자바 멀티쓰레드 프로그래밍 Thread / Runnable - 실행 순서가 보장되지 않음. public class Thread1 { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); System.out.println("main Thread : " + Thread...
-
Date와 TimeJAVA/JAVA8 관련 2022. 5. 15. 17:12
기계적인 시간과 인류용 시간 표현방법 1. 기계적인 시간 Instant.now(): 현재 UTC (GMT)를 리턴한다. Universal Time Coordinated == Greenwich Mean Time public class MachineTime { public static void main(String[] args) { Instant instant = Instant.now();//기준 시 UTC (GMT) System.out.println("Instant :: " + instant); ZoneId zone = ZoneId.systemDefault(); System.out.println("Zone :: " + zone); ZonedDateTime zonedDateTime = instant.atZo..
-
Date 와 Time 소개JAVA/JAVA8 관련 2022. 5. 15. 14:56
자바 8에 새로운 날짜와 시간 API가 생긴 이유 Date 클래스의 문제 1. 그전까지 사용하던 java.util.Date 클래스는 mutable 하기 때문에 thead safe하지 않다. 2. 클래스 이름이 명확하지 않다. Date인데 시간까지 다룬다. 3. 버그 발생할 여지가 많다. (타입 안정성이 없고, 월이 0부터 시작한다거나..) 4. 날짜 시간 처리가 복잡한 애플리케이션에서는 보통 Joda Time을 쓰곤했다. 1. Mutable하여 Thread Safe하지 않은 부분 public class DateThread { public static void main(String[] args) { Date date = new Date(); long time = date.getTime(); System.o..