일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바8인액션
- 자바의 신
- Design Pattern
- 스트림
- Clean Code
- spring boot
- CQRS
- 패스트캠퍼스
- jsp
- Java in action
- 디자인 패턴
- 자바8
- spring Batch
- Java 8 in action
- head first
- domain
- Java
- Stream
- 자바
- ddd
- spring
- Was
- Java8
- web
- Template Method Pattern
- 클린코드
- facade pattern
- Java8 in action
- AWS101
- SERVLET
- Today
- Total
목록자바 (7)
주난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..
DB 데이터와 LDAP을 이용해서 인증을 처리하는 클래스를 만들었을 때... 두 클래스는 거의 유사한 코드를 갖게 된다. 실행의 과정 / 단계는 동일한데 일부의 구현이 다른 경우에 사용하는 패턴을 "템플릿 메서드 패턴"이라고 한다. public abstract authenticator { public Auth authenticate(String id, String pw) { if (!doAuthenticate(id, pw) { throw createException(); } return createAuth(id); } protected abstract boolean doAuthenticate(String id, String pw); protected abstract Auth createAuth(Strin..
전략 패턴 - 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성 - 유사한 행위들을 캡슐화하는 인터페이스 생성 - 객체의 행위를 직접 수정하지 않고, 런타임 시점에 전략을 바꿔주어서 행위를 유연하게 확장 기능 위임. 기존 코드의 변경 없이 외부 주입만 변경하면서 사용하는 패턴 as-is - 계산 클래스에서 모든 처리를 다해줌 - 조건이 추가된다면 코드가 무한정 증가되는 단점을 가짐 public class Calculator { public int calculate(boolean firstGuest, List items) { int sum = 0; for (Item item : items) { if (firstGuest) { sum += (int) (item.getPrice() * 0.9);// ..
컬렉션은 데이터를 그룹화하고 처리할 수 있다. 프로그래밍 작업에 필수적인 요소다. 하지만, 특정 조건에 대한 처리에는 약하다. 많은 요소를 포함하는 커다란 컬렉션은 어떻게 처리할까? -> 성능을 높이려면 멀티코어 환경에서 병렬로 컬렉션 요소를 처리해야 한다. 하지만, 병렬 처리 코드를 구현하는 것은 어렵다. 따라서, "스트림"을 사용하는 것이 답이다. 스트림이란 무엇인가? - 자바 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 ..