일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- facade pattern
- 자바8인액션
- 클린코드
- Java8 in action
- Clean Code
- SERVLET
- CQRS
- Java
- Stream
- Java in action
- domain
- Template Method Pattern
- spring boot
- 자바8
- head first
- spring Batch
- 패스트캠퍼스
- Java8
- 스트림
- ddd
- 디자인 패턴
- 자바의 신
- web
- spring
- Design Pattern
- Java 8 in action
- jsp
- Was
- AWS101
- 자바
- Today
- Total
목록개발 성장기/JAVA (9)
주난v 개발 성장기

병렬 스트림 - parallelStream을 호출하면 병렬 스트림 생성 - 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림 순차 스트림을 병렬 스트림으로 변환하기 - 순차 스트림에 parallel 메서드를 호출하면 리듀싱 연산이 병렬로 처리 병렬 스트림에서 스레드 풀 설정 - 병렬 스트림은 내부적으로 ForkJoinPool 사용 -프로세서 수, Runtime.getRuntime().availableProcessors()가 반환하는 값에 상응하는 스레드를 가짐. - 전역 설정이므로, 모든 병렬 연산에 영향을 준다. 특정한 값을 따로 지정할 수는 없다. 스트림의 성능 측정 - (예제 7-1) 참고 - sequential sum :97ms, for : 2ms, parallel : ..
스트림의 연산은 filter, map과 같은 중간 연산 / count, findFirst, forEach, reduce 등의 최종 연산 중간 연산 : 한 스트림을 다른 스트림으로 변환, 여러 연산을 연결할 수 있다. 최종 연산 : 스트림 요소를 소비해서 최종 결과를 도출 컬렉터란? 스트림의 요소를 어떤 식으로 도출할지 지정 .collect(Collectors.toList()); collect를 호출하면 스트림의 요소에 리듀싱 연산이 수행된다. collect에서는 리듀싱 연산을 이용해서 스트림의 각 요소를 방문하면서 컬렉터가 작업을 처리한다. Collector 인터페이스의 메서드를 어떻게 구현하느냐에 따라 스트림에 어떤 리듀싱 연산을 수행할지 결정 Collectors 클래스는 정적 팩토리 메서드를 제공한다..
필터링과 슬라이싱 - 일부 요소를 무시하거나 스트림을 주어진 크기로 축소하는 방법 1. 프레디케이트로 필터링 - 프레디 케이트(boolean을 반환하는 함수)를 인수로 받아서 일치하는 모든 요소를 포함하는 스트림을 반환 2.고유 요소 필터링 - distinct() 메서드 반환 3. 스트림 축소 - limit(n) 4. 요소 건너뛰기 - skip(n) 매핑 - 스트림은 함수를 인수로 받는 map 메서드 지원 - 함수를 적용한 결과가 새로운 요소로 매핑된다. relationIds.stream().map(relationId -> likeCountVO(likeType, relationId, 0L)) .forEach(likeCountVOList::add); 스트림 평면화 - map, flatMap 검색과 매칭 1..
컬렉션은 데이터를 그룹화하고 처리할 수 있다. 프로그래밍 작업에 필수적인 요소다. 하지만, 특정 조건에 대한 처리에는 약하다. 많은 요소를 포함하는 커다란 컬렉션은 어떻게 처리할까? -> 성능을 높이려면 멀티코어 환경에서 병렬로 컬렉션 요소를 처리해야 한다. 하지만, 병렬 처리 코드를 구현하는 것은 어렵다. 따라서, "스트림"을 사용하는 것이 답이다. 스트림이란 무엇인가? - 자바 API에 추가된 기능, 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 또한 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. List lowCaloricDishes = new ArrayList(); for (Dish d : menu) { if (d.getCalories() < 400)..

람다 표현식 - 익명함수를 단순화한 것 람다 표현식에는 이름이 없지만, 파라미터 리스트, 바디, 반환 형식, 예외 리스트는 가질 수 있다. 익명 : 메소드 이름이 없다. 함수 : 람다 표현식은 특정 클래스에 종속되지 않으므로 함수라고 한다. 함수처럼 파라미터 리스트, 바디, 반환 형식, 예외 리스트를 가진다. 전달 : 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성 : 자질 구레한 코드가 필요 없다. Comparator byWeight = new Comparator() { public int compare(Apple apple1, Apple apple2) { return apple1.getWeight().compareTo(apple2.getWeight()); } }; (Apple ..

우리의 요구사항은 언제나 바뀐다. "동작 파라미터화"를 이용하면 효과적으로 대응할 수 있다. "동작 파라미터화"란 아직 어떻게 실행될지 정해지지 않은 코드 블록으로, 실행은 나중으로 미뤄진다. 이미 파일 필터링이나, List 정렬 등을 통해 경험을 해보았을 수 있지만, 동작 파라미터화를 추가하려면 코드가 늘어난다. 이는 3장 람다 표현식을 통해 해소된다. 변화하는 요구사항에 대응하자! 1. 녹색 사과만 필터링하자. public List filterGreenApples(List inventory) { List result = new ArrayList(); for (Apple apple : inventory) { if ("green".equals(apple.getColor()){ result.add(appl..
자바 8에서 변화가 많이 일어났다. 사과 리스트 정렬 코드 //JAVA8 이전 Collections.sort(inventory, new Comparator() { public int compare(Apple apple1, Apple apple2) { return apple1.getWeight().compareTo(apple2.getWeight()); } } //JAVA8 inventory.sort(comparing(Apple::getWeight()); 멀티코어 CPU 대중화와 같은 하드웨어적인 변화도 자바 8에 영향을 미쳤다. 대부분 쿼드 코어 이상의 CPU를 사용할 것이다. 자바8이 등장하기 이전에는 나머지 코어를 활용하려면 스레드를 사용하는 것이 좋다고 조언했지만, 관리하기 어렵고 문제가 발생 자바 ..
자바의 가장 단위는 '클래스' '클래스'는 상태와 행동이 있어야만 한다. * 자바 컴파일 및 실행 절차 (바이트 코드) (바이트 코드) (기계어) 소스(.java) ---------------> 컴파일러 ---------------> 디스크 ---------------> JVM ---------------> 운영체제 컴파일 : 내가 짠 코드는 컴퓨터가 이해할 수 있도록 엮어주는 작업 --> 컴파일을 마친 클래스 파일은 JVM에서 읽어들여 운영체제에서 실행한다. * 클래스와 객체를 구분하자! 각각의 실제 사물을 만들기 위한 것을 객체(Object) 혹은 인스턴스라고 한다. Car dogCar = new Car(); Car catCar = new Car(); --> dogCar, catCar 객체가 생성된다..