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..
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..
Stream 소개 데이터를 담고 있는 저장소(컬렉션)가 아니다. Functional in nature , 스트림이 처리하는 데이터 소스를 변경하지 않는다. 스트림으로 처리하는 데이터는 오직 한 번만 처리한다. (실시간으로 들어오는 데이터)무제한일 수도 있다. (무제한 이지만 특정 조건으로)Short Circuit 메서드를 사용해서 제한할 수 있다. 중개 오퍼레이션은 근본적으로 lazy하다. 손쉽게 병렬 처리할 수 있다. 병렬 처리를 쓴다고 꼭 빨라지는 것은 아니다. 스트림 파이프라인 0 또는 다수의 중개 오퍼레이션 (intermediate operation)과 한 개의 종료 오퍼레이션 (terminal operation)으로 구성한다. 스트림의 데이터 소스는 오직 종료 오퍼레이션을 실행할 때에만 처리한다..
자바 8에서 추가한 기본 메서드로 인한 API 변화 Iterable의 기본 메서드 forEach() spliterator() public static void main(String[] args) { ArrayList strList = new ArrayList(); strList.add("test1"); strList.add("test2"); strList.add("test3"); strList.add("test4"); strList.add("test5"); //strList.forEach(Consumer
기본 메서드 (Default Methods) 인터페이스에 메서드 선언이 아니라 구현체를 제공하는 방법 해당 인터페이스를 구현한 클래스를 깨뜨리지 않고 새 기능을 추가할 수 있다. 기본 메서드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 있다. 컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있다. 반드시 문서화 할 것(@implSpec 자바독 태그 사용 , 자바8에서 추가되었음) Object 제공하는 기능 (equals , hashCode , toString 등등..)은 기본 메서드로 제공 할 수 없다. 구현체를 재정의 해야 한다. 본인이 수정할 수 있는 인터페이스 에만 기본 메서드를 제공할 수 있다. 인터페이스를 상속받는 인터페이스에서 다시 추상 메서드로 변경할 수 있다. 인터페이스..
메서드 레퍼런스 람다가 하는 일이 기존 메서드 또는 생성자를 호출하는 거라면 , 메서드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다. 메서드 참조 방법 스태틱 메서드 참조 타입::스태틱 메서드 특정 객체의 인스턴스 메서드 참조 객체 레퍼런스::인스턴스 메서드 임의 객체의 인스턴스 메서드 참조 타입::인스턴스 메서드 생성자 참조 타입::new 메서드 또는 생성자의 매개변수로 람다의 입력값을 받는다. 리턴값 또는 생성한 객체는 람다의 리턴값이다. public static void main(String[] args) { // 인스턴스를 자세히 봐야 한다. // 스태틱 메서드 참조 UnaryOperator hi = Greeting::hi; String strHi = hi.apply("2021-01-10")..
람다 (인자 리스트) -> {바디} BinaryOperator test = (a , b) -> a + b; 인자 리스트 인자가 없을 때 : () 인자가 한 개 일 때 : (one) 또는 one 인자가 여러 개 일 때 : (one , two) 인자의 타입은 생략 가능 , 컴파일러가 추론 (infer) 하지만 명시할 수도 있다. (Integer one , Integer two) 바디 화살표 오른쪽에 함수 본문을 정의한다. 여러 줄인 경우에 {}를 사용해서 묶는다. 한 줄인 경우에 생략 가능 , return도 생략 가능 변수 캡처 (Variable Capture) 로컬 변수 캡처 final 이거나 effective final 인 경우에만 참조할 수 있다. 그렇지 않을 경우 concurrency(동시성) 문제가..
- Total
- Today
- Yesterday
- 프로토타입 빈
- @configuration
- 티스토리 Open API
- 빈 생명주기
- 스태틱 메서드
- annotation container
- 싱글 톤 빈
- 람다 표현식
- 준영속 엔티티
- stream
- Iterable
- 싱글 톤
- H2 DB
- Functional Interface
- 스프링 빈 등록
- java8
- HTTP 메시지
- 생성자 주입
- JPA
- 싱글톤 빈
- function패키지
- completablefuture
- 의존관계 주입
- 메서드 레퍼런스
- 클라이언트 서버 구조
- 함수형 인터페이스
- 기본 메서드
- 기본 제공 함수형 인터페이스
- 변경감지
- 스프링부트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |