리플렉션의 시작은 Class Class (Java Platform SE 8 ) (oracle.com) Class에 접근하는 방법 모든 클래스를 로딩 한 다음 Class의 인스턴스가 생긴다. "타입.class"로 접근할 수 있다. 모든 인스턴스는 getClass()메소드를 가지고 있다. "인스턴스.getClass()"로 접근할 수 있다. 클래스를 문자열로 읽어오는 방법 Class.forName("FQCN") 클래스패스에 해당 클래스가 없다면 ClassNotFoundException이 발생한다. Class를 통해 할 수 있는 것 필드(목록) 가져오기 메소드(목록) 가져오기 상위 클래스 가져오기 인터페이스(목록) 가져오기 어노테이션 가져오기 생성자 가져오기 ... Test public class Test { ..
Arrays.parallelSort() Fork/Join 프레임워크를 사용해서 배열을 병렬로 정렬하는 기능을 제공한다. 병렬 정렬 알고리즘 배열을 둘로 계속 쪼갠다. 합치면서 정렬한다. public static void main(String[] args) { int size = 1500; int[] numbers = new int[size]; Random random = new Random(); IntStream.range(0, size).forEach(i -> numbers[i] = random.nextInt()); long start = System.nanoTime(); // 시작 시간 Arrays.sort(numbers); // Thread를 하나만 쓴다. 퀵 정렬 System.out.println..
두가지 큰 변화 자바8 부터 어노테이션을 타입 선언부에도 사용할 수 있게 됨 자바8 부터 어노테이션을 중복해서 사용할 수 있게 됨 타입 선언 부 제네릭 타입 변수 타입 매개변수 타입 예외 타입 ... 타입에 사용할 수 있으려면 TYPE_PARAMETER - 타입 변수에만 사용할 수 있다. @Chicken @Retention(RetentionPolicy.RUNTIME) // 이 애노테이션 정보를 언제까지 유지할 것인가 @Target(ElementType.TYPE_PARAMETER) // 이 애노테이션을 사용할 곳 public @interface Chicken { } public static void main(String[] args) { } static class FeelsLikeChicken { // 는..
자바에서 비동기(Asynchronous) 프로그래밍을 가능케하는 인터페이스 Future를 사용해서 어느정도 가능했지만 하기 힘든일 들이 많았다. Future를 외부에서 완료 시킬 수 없다. 취소하거나 , get()에 타임아웃을 설정할 수는 있다. 블록킹 코드 get()을 사용하지 않고서는 작업이 끝났을 때 콜백을 실행할 수 없다. 여러 Future를 조합할 수 없다. 예) Event 정보 가져온 다음 Event에 참석하는 회원 목록 가져오기 예외 처리용 API를 제공하지 않는다. CompletableFuture - CompletableFuture (Java Platform SE 8 ) (oracle.com) Implements Future Implements CompletionStage - Complet..
Callable Runnable과 유사하지만 리턴 값을 받을 수 있다. Future 비동기적인 작업의 현재 상태를 조회하거나 가져올 수 있다. Future (Java Platform SE 8 ) (oracle.com) get() 결과를 가져오기 블록킹 콜이다. 타임아웃(최대한으로 기다릴시간)을 설정할 수 있다. public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService executorService = Executors.newSingleThreadExecutor(); Callable hello = () ->{ Thread.sleep(2000L); return "Hello"; };..
Thread 와 Runnable 처럼 Low-Level API를 직접 다루는게 아니다. (Runnable을 여전히 사용하긴 하지만) Executors 고수준 (High-Level) Concurrency 프로그래밍 Thread를 만들고 관리하는 작업을 애플리케이션에서 분리 그런 기능을 Executors에게 위임 Executros가 하는일 Thread 만들기 : 애플리케이션이 사용할 Thread Pool을 만들어 관리한다. Thread 관리 : Thread 생명 주기를 관리한다. 작업 처리 및 실행 : Thread로 실행할 작업을 제공할 수 있는 API를 제공한다. 주요 인터페이스 Executor execute(Runnable) ExecutorService Executor 상속 받은 인터페이스로 , Call..
Coucurrent 소프트웨어 동시에 여러 작업을 할 수 있는 소프트웨어 자바에서 지원하는 Concurrent 프로그래밍 멀티 프로세싱 (ProcessBuilder) 멀티 쓰레드 프로세스와 스레드의 차이 더보기 [OS] 프로세스와 스레드의 차이 - Heee's Development Blog Step by step goes a long way. gmlwjd9405.github.io 프로세스? 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 (독립적인 객체) 운영체제로 부터 시스템 자원을 할당받는 작업의 단위 즉, 동적인 개념으로는 실행된 프로그램을 의미한다. 할당받는 시스템 자원의 예 CPU 시간 운영되기 위해 필요한 주소 공간 Code , Data ,..
JAVA8에 새로운 날짜와 시간 API가 생긴 이유 그전까지 사용하던 java.util.Date클래스는 mutable하기 때문에 쓰레드에 안전하지 않다. java.util.Date 클래스를 피해야하는 이유 All about java.util.Date This post is an attempt to reduce the number of times I need to explain things in Stack Overflow comments. You may well be reading it via a link from Stack Overflow – I intend to refer to thi… codeblog.jonskeet.uk Date와 Time API 기계용 시간 과 인류용 시간으로 나눌 수 있다. 기계..
오직 값 한 개가 들어있을 수도 없을 수도 있는 컨테이너 자바 8부터 Optional을 리턴한다. (클라이언트 코드에게 명시적으로 빈 값일 수도 있다는 걸 알려주고 , 빈 값인 경우에 대한 처리를 강제한다.) 1. Optional만들기 Optional.of() Optional.ofNullable() Optional.empty() 2. Optional에 값이 있는지 없는지 확인하기 isPresent() isEmpty() - JAVA11부터 제공 3. Optional에 있는 값 가져오기 get() 4. Optional에 값이 있는 경우에 그 값을 가지고 ~~~을 하라. ifPresent(Consumer) 5. Optional에 값이 있으면 가져오고 없는 경우에 ~~~을 리턴하라. orElse(T) 6. Op..
걸러내기 Filter(Predicate) 예) 이름이 3글자 이상인 데이터만 새로운 스트림으로 변경하기 Map(Function) 또는 FlatMap(Function) 예) 각각의 Post 인스턴스에서 String title만 새로운 스트림으로 생성하기 generate(Supplier) 또는 Iterate(T seed , UnaryOperator) 예) 10부터 1씩 증가하는 무제한 숫자 스트림 예) 랜덤 int 무제한 스트림 제한하기 limit(long) 또는 skip(long) 예) 최대 5개의 요소가 담긴 스트림을 리턴한다. 예) 앞에서 3개를 뺀 나머지 스트림을 리턴한다. public class ClassForStreamAPIPractice { private Integer id; private St..
기록/JAVA 2021. 2. 7. 22:02
리플렉션의 시작은 Class Class (Java Platform SE 8 ) (oracle.com) Class에 접근하는 방법 모든 클래스를 로딩 한 다음 Class의 인스턴스가 생긴다. "타입.class"로 접근할 수 있다. 모든 인스턴스는 getClass()메소드를 가지고 있다. "인스턴스.getClass()"로 접근할 수 있다. 클래스를 문자열로 읽어오는 방법 Class.forName("FQCN") 클래스패스에 해당 클래스가 없다면 ClassNotFoundException이 발생한다. Class를 통해 할 수 있는 것 필드(목록) 가져오기 메소드(목록) 가져오기 상위 클래스 가져오기 인터페이스(목록) 가져오기 어노테이션 가져오기 생성자 가져오기 ... Test public class Test { ..
기록/JAVA 2021. 1. 17. 14:53
Arrays.parallelSort() Fork/Join 프레임워크를 사용해서 배열을 병렬로 정렬하는 기능을 제공한다. 병렬 정렬 알고리즘 배열을 둘로 계속 쪼갠다. 합치면서 정렬한다. public static void main(String[] args) { int size = 1500; int[] numbers = new int[size]; Random random = new Random(); IntStream.range(0, size).forEach(i -> numbers[i] = random.nextInt()); long start = System.nanoTime(); // 시작 시간 Arrays.sort(numbers); // Thread를 하나만 쓴다. 퀵 정렬 System.out.println..
기록/JAVA 2021. 1. 17. 14:45
두가지 큰 변화 자바8 부터 어노테이션을 타입 선언부에도 사용할 수 있게 됨 자바8 부터 어노테이션을 중복해서 사용할 수 있게 됨 타입 선언 부 제네릭 타입 변수 타입 매개변수 타입 예외 타입 ... 타입에 사용할 수 있으려면 TYPE_PARAMETER - 타입 변수에만 사용할 수 있다. @Chicken @Retention(RetentionPolicy.RUNTIME) // 이 애노테이션 정보를 언제까지 유지할 것인가 @Target(ElementType.TYPE_PARAMETER) // 이 애노테이션을 사용할 곳 public @interface Chicken { } public static void main(String[] args) { } static class FeelsLikeChicken { // 는..
기록/JAVA 2021. 1. 17. 14:10
자바에서 비동기(Asynchronous) 프로그래밍을 가능케하는 인터페이스 Future를 사용해서 어느정도 가능했지만 하기 힘든일 들이 많았다. Future를 외부에서 완료 시킬 수 없다. 취소하거나 , get()에 타임아웃을 설정할 수는 있다. 블록킹 코드 get()을 사용하지 않고서는 작업이 끝났을 때 콜백을 실행할 수 없다. 여러 Future를 조합할 수 없다. 예) Event 정보 가져온 다음 Event에 참석하는 회원 목록 가져오기 예외 처리용 API를 제공하지 않는다. CompletableFuture - CompletableFuture (Java Platform SE 8 ) (oracle.com) Implements Future Implements CompletionStage - Complet..
기록/JAVA 2021. 1. 16. 22:58
Callable Runnable과 유사하지만 리턴 값을 받을 수 있다. Future 비동기적인 작업의 현재 상태를 조회하거나 가져올 수 있다. Future (Java Platform SE 8 ) (oracle.com) get() 결과를 가져오기 블록킹 콜이다. 타임아웃(최대한으로 기다릴시간)을 설정할 수 있다. public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService executorService = Executors.newSingleThreadExecutor(); Callable hello = () ->{ Thread.sleep(2000L); return "Hello"; };..
기록/JAVA 2021. 1. 16. 22:13
Thread 와 Runnable 처럼 Low-Level API를 직접 다루는게 아니다. (Runnable을 여전히 사용하긴 하지만) Executors 고수준 (High-Level) Concurrency 프로그래밍 Thread를 만들고 관리하는 작업을 애플리케이션에서 분리 그런 기능을 Executors에게 위임 Executros가 하는일 Thread 만들기 : 애플리케이션이 사용할 Thread Pool을 만들어 관리한다. Thread 관리 : Thread 생명 주기를 관리한다. 작업 처리 및 실행 : Thread로 실행할 작업을 제공할 수 있는 API를 제공한다. 주요 인터페이스 Executor execute(Runnable) ExecutorService Executor 상속 받은 인터페이스로 , Call..
기록/JAVA 2021. 1. 16. 21:30
Coucurrent 소프트웨어 동시에 여러 작업을 할 수 있는 소프트웨어 자바에서 지원하는 Concurrent 프로그래밍 멀티 프로세싱 (ProcessBuilder) 멀티 쓰레드 프로세스와 스레드의 차이 더보기 [OS] 프로세스와 스레드의 차이 - Heee's Development Blog Step by step goes a long way. gmlwjd9405.github.io 프로세스? 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 (독립적인 객체) 운영체제로 부터 시스템 자원을 할당받는 작업의 단위 즉, 동적인 개념으로는 실행된 프로그램을 의미한다. 할당받는 시스템 자원의 예 CPU 시간 운영되기 위해 필요한 주소 공간 Code , Data ,..
기록/JAVA 2021. 1. 14. 22:52
JAVA8에 새로운 날짜와 시간 API가 생긴 이유 그전까지 사용하던 java.util.Date클래스는 mutable하기 때문에 쓰레드에 안전하지 않다. java.util.Date 클래스를 피해야하는 이유 All about java.util.Date This post is an attempt to reduce the number of times I need to explain things in Stack Overflow comments. You may well be reading it via a link from Stack Overflow – I intend to refer to thi… codeblog.jonskeet.uk Date와 Time API 기계용 시간 과 인류용 시간으로 나눌 수 있다. 기계..
기록/JAVA 2021. 1. 12. 22:45
오직 값 한 개가 들어있을 수도 없을 수도 있는 컨테이너 자바 8부터 Optional을 리턴한다. (클라이언트 코드에게 명시적으로 빈 값일 수도 있다는 걸 알려주고 , 빈 값인 경우에 대한 처리를 강제한다.) 1. Optional만들기 Optional.of() Optional.ofNullable() Optional.empty() 2. Optional에 값이 있는지 없는지 확인하기 isPresent() isEmpty() - JAVA11부터 제공 3. Optional에 있는 값 가져오기 get() 4. Optional에 값이 있는 경우에 그 값을 가지고 ~~~을 하라. ifPresent(Consumer) 5. Optional에 값이 있으면 가져오고 없는 경우에 ~~~을 리턴하라. orElse(T) 6. Op..
기록/JAVA 2021. 1. 10. 20:31
걸러내기 Filter(Predicate) 예) 이름이 3글자 이상인 데이터만 새로운 스트림으로 변경하기 Map(Function) 또는 FlatMap(Function) 예) 각각의 Post 인스턴스에서 String title만 새로운 스트림으로 생성하기 generate(Supplier) 또는 Iterate(T seed , UnaryOperator) 예) 10부터 1씩 증가하는 무제한 숫자 스트림 예) 랜덤 int 무제한 스트림 제한하기 limit(long) 또는 skip(long) 예) 최대 5개의 요소가 담긴 스트림을 리턴한다. 예) 앞에서 3개를 뺀 나머지 스트림을 리턴한다. public class ClassForStreamAPIPractice { private Integer id; private St..