본문 바로가기
반응형
SMALL

그룹 스터디 공부(IT 서적)/모던 자바 인 액션23

chapter 9 리펙터링, 테스팅, 디버깅 람다 표현식으로 코드 리팩터링하기 람다 표현식이 객체지향 설계 패턴에 미치는 영향 람다 표현식 테스팅 람다 표현식과 스트림 API 사용 코드 디버깅 9.1 가독성과 유연성을 개선하는 리팩터링 람다, 메서드 참조, 스트림 등의 기능을 이용해 가독성을 높이고 유연한 코드로 리팩토링하는것을 설명. 9.1.1 코드 가독성 개선 익명 클래스를 람다 표현식으로 리팩토링 람다 표현식을 메서드 참조로 리팩토링 명령형 데이터 처리를 스트림으로 리팩토링 9.1.2 익명 클래스를 람다 표현식으로 리팩터링하기 하나의 추상 메서드를 구현하는 익명 클래스는 람다 표현식으로 리팩토링 할 수 있다. Runnable r1 = new Runnable() { // 익명 클래스를 사용한 이전 코드 @Override public void r.. 2023. 7. 30.
chapter 8 컬렉션 API 개선 8.1 컬렉션 팩토리 자바에서 적은 요소를 포함하는 리스트를 어떻게 만들까? 다음 방법은 세 문자열을 저장하는데도 많은 코드가 필요하다. List friends = new ArrayList(); friends.add("Raphael"); friends.add("Olivia"); friends.add("Thibaut"); 다음처럼 Arrays.asList() 팩토리 메서드를 이용해 코드를 줄일 수 있지만, 고정 크기의 리스트이기 때문에 요소를 추가하려하면 Unsupported OperationException이 발생한다. List friends = Arrays.asList("Raphael", "Olivia"); friends.set(0, "Rechard"); friends.add("Thibaut"); Un.. 2023. 7. 26.
chapter 7 병렬 데이터 처리와 성능 자바 7이 등장하기 전에는 데이터 컬렉션을 병렬로 처리하기 어려웠음. 다음과 같은 일련의 과정을 거쳐야 했음. 1) 데이터를 서브파트로 분할해야 한다. 2) 분할된 서브파트를 각각의 스레드로 할당한다. 3) 스레드로 할당한 다음에는 의도치 않은 레이스 컨디션(역자주_경쟁 상태)이 발생하지 않도록 적절한 동기화를 추가해야 한다. 4) 부분 결과를 합쳐야 한다. 자바 7은 더 쉽게 병렬화를 수행하면서 에러를 최소화할 수 있도록 포크/조인 프레임워크(fork/join framework) 기능을 제공한다. 이 장에서는 스트림으로 데이터 컬렉션 관련 동작을 얼마나 쉽게 병렬로 실행할 수 있는지 설명한다. 7.1 병렬 스트림 컬렉션에 parallelStream을 추출하면 병렬 스트림(parallel stream)이.. 2023. 7. 24.
chapter 6 문제풀이 (6.5.2 응용하기 참고) reverse 구현 public static void main(String[] args) { List numbers = Arrays.asList(1, 2, 3, 4, 5); List result = numbers.stream() .collect(new ReverseCollector()); System.out.println(result); // [5, 4, 3, 2, 1]} ```java public class ReverseCollector implements Collector { @Override public Supplier supplier() { return ArrayList::new; //수집 연산의 시발점 } public BiConsumer accumulator() { return List::add.. 2023. 7. 22.
chapter 6 스트림으로 데이터 수집 02 분할 분할 함수(partitioning function)라 불리는 프레디케이트를 분류 함수로 사용하는 특수한 그룹화 기능 분할 함수는 불리언을 반환하므로 맵의 키 형식은 Boolean 그룹화 맵은 최대 (참 or 거짓을 갖기 때문에) 2개의 그룹으로 분류됨. Map vegetarianDishesByType =menu.stream().collect( partitioningBy(Dish::isVegetarian,// 분할 함수 groupingBy(Dish::getType) //두 번째 컬렉터 ) ); {false={FISH=[prawns, salmon], MEAT=[pork, beef, chicken]}, true={OTHER=[french fries, rice, season fruit, pizza]}}분할.. 2023. 7. 22.
chapter 6 스트림으로 데이터 수집 01 # 6.1 컬렉터란 무엇인가? Collector 인터페이스 구현은 스트림의 요소를 어떤 식으로 도출할지 지정한다. 리스트를 만들기위해 toList를 Collector 인터페이스의 구현으로 사용하거나 groupingBy를 이용해서 각 키 버킷에 대응하는 요소 별로 맵을 만들 수도 있다. ## 6.1.1 고급 리듀싱 기능을 수행하는 컬렉터 컬렉터의 최대 강점은 collect로 결과를 수집하는 과정을 간단하면서도 유연한 방식으로 정의할 수 있다는 점이다. 스트림에서 collect를 호출하면 collect에서는 리듀싱 연산을 이용해서 스트림의 각 요소를 방문하면서 컬렉터가 작업을 수행한다. 보통 함수를 요소로 변환할 때는 컬렉터를 적용하며 최종 결과를 저장하는 자료구조에 값을 누적한다. ## 6.1.2 미리 정.. 2023. 7. 22.
반응형
LIST