자바/모던 자바 인 액션 15

[모던 자바 인 액션] 5장. 스트림 활용

스트림에서 쓸 수 있는 다양한 기술들을 알아보겠습니다. 5.1 필터링 스트림의 요소를 선택하는 방법, 즉 프레디케이트 필터링 방법과 고유 요소만 필터링을 할 수 있다. 5.1.1 프레디케이트로 필터링 프레디케이트(boolean을 반환하는 함수)를 인수로 받아서 일치하는 모든 요소를 포함하는 스트림을 반환한다. List vegtarianMenu = menu.stream() .filter(Dish::isVegtarian) // 채식 o x 확인하는 메서드 .collect(toList()); 5.1.2 고유 요소 필터링 스트림은 고유 요소로 이루어진 스트림을 반환하는 distinct 메서드를 지원한다. List numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4); numbers.s..

[모던 자바 인 액션] 4장. 스트림이란

모든 자바 애플리케이션은 컬렉션을 만들고 처리하는 과정이 있다. 컬렉션으로는 데이터를 그룹화하고 처리할 수 있다. 여기서 많은 요소가 포함되는 커다란 컬렉션은 어떻게 처리해야 할까? 병렬 처리 코드? 단순 반복 코드? 이렇게 짜면 다른 개발자가 보기 불편할 뿐만 아니라 디버깅을 하기도 어렵다. 이 문제를 처리하기 위해 나온것이 스트림이다. 4.1 스트림이란? 정확한 의미는 '데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소로' 정의할 수 있다. 스트림은 자바8 API에 새로 추가된 기능이다. 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 데이터 컬렉션 반복을 처리하고 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. filter, sorted, map,..

[모던 자바 인 액션] 3장. 람다 표현식

2장에서는 클라이언트의 요구사항에 효과적으로 대응할 수 있는 코드를 동작 파라미터화를 이용하여 만들어 보았습니다. 이번에는 람다 표현식을 어떻게 만들고 어떻게 사용하는지 설명해보겠습니다. 3.1 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다의 특징 익명: 보통의 메서드와 달리 이름이 없어 익명이라고 표현한다. 함수: 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 표현한다. 전달: 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성: 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. 예를 들어 Comparator 객체를..

[모던 자바 인 액션] 2장. 동작 파라미터화 코드 전달하기

어떤 상황에서 일을 하든 소바자의 요구 사항은 항상 바뀐다. 시시각각 변하는 사용자 요구 사항에는 어떻게 대응해야 할까? 동작 파라미터화를 이용하면 자주 바뀌는 요구사항에 효과적으로 대응할 수 있다. 동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미한다. 2.1 녹색 사과 필터링 예제를 통하여 코드를 점차 개선하면서 유연한 코드로 만들어 보자. public static List filterGreenApples(List inventory) { List result = new ArrayList(); for (Apple apple : inventory) { if (GREEN.equals(apple.getColor())) { result.add(apple); } } return re..

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

1.1 역사의 흐름은 무엇인가? 자바 역사를 통틀어 가장 큰 변화가 자바 8에서 일어났다. 자바 8이 등장하기 이전에는 나머지 코어를 활용하려면 스레드를 사용했다. 하지만 스레드를 사용하면 관리하기 어렵고 많은 문제가 발생할 수 있었다. 자바는 이러한 병렬 실행 환경을 쉽게 관리하고 에러가 덜 발생하는 방향으로 진화하려고 노력했다. 자바 1.0 : 스레드, 락, 메모리 모델 자바 5 : 스레드 풀, 병렬 실행 컬렉션 자바 7 : 포크/조인 프레임워크 이렇게 많은 프레임워크가 추가됐지만, 개발의 활용하기는 쉽지 않았다. 하지만 자바 8은 간결한 코드, 멀티코어 프로세서의 쉬운 활용이라는 두 가지 요구사항을 기반으로 한다. 자바 8 : 스트림 API, 메서드에 코드를 전달하는 기법, 인터페이스의 디폴트 메서..