JAVA 7

모던 자바 인 액션 - CH06. 스트림으로 데이터 수집(2)

6.4 분할 분할은 분할 함수라 불리는 프레디케이트를 분류 함수로 사용하는 특수한 그룹화 기능이다. 분할 함수는 불리언을 반환하므로 맵의 키 형식은 Boolean이다. -> 그룹화 맵은 최대 (참 or 거짓) 두 개의 그룹으로 분류됨 // 채익 요리와 채식이 아닌 요리로 분류 Map partitionedMenu = menu.stream().collect(partitioningBy(Dish::isVegetarian)); // 분할 함수 // 채식 요리를 얻기 List vegitarianDishes = partitionedMenu.get(true); // 프레디케이트로 필터링한 다음에 별도의 리스트에 결과를 수집해도 같은 결과를 얻을 수 있다. List vegitarianDishes = menu.stream..

JAVA 2023.09.12

모던 자바 인 액션 - CH06. 스트림으로 데이터 수집(1)

들어가기 전에... 이 장에서는 reduce가 그랬던 것처럼 collect 역시 다양한 요소 누적 방식을 인수로 받아서 스트림을 최종 결과로 도출하는 리듀싱 연산을 수행할 수 있음을 설명한다. Stream에 toList를 사용하는 대신 더 범용적인 컬렉터 파라미터를 collect 메서드에 전달함으로써 원하는 연산을 간결하게 구현할 수 있음을 지금부터 배우게 될 것이다. Map transactionsByCurrencies = transactions.stream().collect(groupingBy(Transaction::getCurrency)); 6.1 컬렉터란 무엇인가? 이전 예제엇 collect 메서드로 Collector 인터페이스 구현을 전달했다. Collector 인터페이스의 구현은 스트림의 요소를..

JAVA 2023.09.04

모던 자바 인 액션 - CH05. 스트림 활용

5.1 필터링 스트림의 요소를 선택하는 방법, 즉 프레디케이트 필터링 방법과 고유 요소만 필터링하는 방법을 배운다. 5.1.1 프레디케이트로 필터링 스트림 인터페이스는 filter 메서드를 지원한다. filter 메서드는 프레디케이트(불리언을 반환하는 함수)를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다. List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) .collect(toList()); 5.1.2 고유 요소 필터링 스트림은 고유 요소로 이루어진 스트림을 반환하는 distinct 메서드도 지원한다. 고유 여부는 스트림에서 만든 객체의 hashCode, equals로 결정된다. List numbers = Ar..

JAVA 2023.08.22

모던 자바 인 액션 - CH04. 스트림 소개

4.1 스트림이란 무엇인가? 스트림(Streams)은 자바 8 API에 새로 추가된 기능이다. 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. 다음 예제는 저칼로리 요리명을 반환하고, 칼로리를 기준으로 요리를 정렬하는 자바7 코드이다. List lowCaloricDishes = new ArrayList(); for(Dish dish: menu) { if(dish.getCalories() < 400) { lowCaloricDishes.add(dish); } } Collections.sort(lowCaloricDishes, new Comparator() { public int compare(Dish ..

JAVA 2023.08.15

모던 자바 인 액션 - CH03. 람다 표현식

들어가기에 앞서 ... 이 장에서는 람다 표현식을 어떻게 만드는지, 어떻게 사용하는지, 어떻게 코드를 간결하게 만들 수 있는지 설명한다. 또한 자바 8 API에 추가된 중요한 인터페이스와 형식 추론 등의 기능도 확인한다. 마지막으로 람다 표현식과 함께 위력을 발휘하는 새로운 기능인 메서드 참조를 설명한다. 3.1 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다 표현식에는 이름이 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다. 람다의 특징 익명 : 보통의 메서드와 달리 이름이 없다. 구현해야 할 코드에 대한 걱정거리가 줄어든다. 함수 : 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다...

JAVA 2023.07.30

모던 자바 인 액션 - CH02. 동작 파라미터화 코드 전달하기

들어가기에 앞서.. 동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미한다.이 코드 블록은 나중에 프로그램에서 호출한다. 즉, 코드 블록의 실행은 나중으로 미뤄진다. 나중에 실행될 메서드의 인수로 코드 블록을 전달할 수 있다. 결과적으로 코드 블록에 따라 메서드의 동작이 파라미터화 된다. 따라서, 변화하는 요구 사항에 유연하게 대응할 수 있다. 그런데, 동작 파라미터화를 추가하려면 쓸데없는 코드가 늘어난다. 자바 8은 이 문제를 람다 표현식으로 해결한다. 2.1 변화하는 요구사항에 대응하기 하나의 예제를 선정한 다음에 예제 코드를 점차 개션하면서 유연한 코드를 만드는 모범사례로 설명할 것이다. 기존의 농장 재고목록 애플리케이션에 리스트에서 녹색 사과만 필터링하는 기능을 추가한다..

JAVA 2023.07.29

모던 자바 인 액션 - CH01. 자바 8, 9, 10,11 : 무슨 일이 일어나고 있는가?

1.1 역사의 흐름은 무엇인가? 가장 큰 변화는 자바 8에서 일어남 멀티코어 CPU 대중화가 영향을 미침 -> 자바8은 간결한 코드, 멀티코어 프로세서의 쉬운 활용을 바탕으로 탄생 스트림 API - 병렬 연산을 지원 메서드 코드를 전달하는 기법 - 새롭고 간결한 방식으로 동작 파라미터화를 구현 가능 인터페이스의 디폴트 메서드 자바 8은 함수형 프로그래밍에서 위력을 발휘한다. 1.2 왜 아직도 자바는 변화하는가? 특정 분야에서 장점은 가진 언어는 다른 경쟁 언어를 도태시킨다. 1.2.1 프로그래밍 언어 생태계에서 자바의 위치 이전에 자바는 객체지향 모델 덕분에 대중적인 프로그래밍 언어로 성장할 수 있었다. 하지만 이후에, 빅데이터를 효과적으로 처리할 필요성이 커졌다. 이전의 자바로는 충분히 대응할 수 없었..

JAVA 2023.07.25