Scroll indicator done

개발서적 (54)

  1. Chap06. 스트림으로 데이터 수집 2021.03.05

    중간연산은 스트림 파이프라인을 구성하며, 스트림의 요소를 소비하지 않는다. 반면 최종 연산은 스트림의 요소를 소비해서 최종 결과를 도출한다. reduce가 그랬던 것처럼 collect 역시 다양한 요소 누적 방식을 인수로 받아서 스트림을 최종 결과로 도출하는 리듀싱 연산을 수행할 수 있다. 다양한 요소 누적 방식은 Collector 인터페이스에 정의되어 있다. 지금부터 컬렉션, 컬렉터, collect를 헷갈리지 않도록 주의해야한다. 컬렉터란? 함수형 프로그래밍에서는 '무엇'을 원하는지 직접 명시할 수 있어서 어떤 방법으로 이를 얻을지는 신경 쓸 필요가 없다. 이전 예제에서 collect 메서드로 Collector 인터페이스 구현을 전달했다. Collector 인터페이스 구현은 스트림의 요소..

  2. Chap05. 스트림 활용 2021.03.05

    필터링 프레디케이트로 필터링 프레디케이트(불리언을 반환하는 함수)를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다. 예제 List vegetarianMenu = menu.stream() .filter(Dish::isVegatarian) .collect(toList()); 고유 요소 필터링 스트림은 고유 요소로 이루어진 스트림을 반환하는 distinct 메서드도 지원한다. (고유 여부는 스트림에서 만든 객체의 hashCode, equals로 결정된다). List numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4); numbers.stream() .filter(i -> i % 2 == 0) .distinct() .forEach(System.out::..

  3. Chap04. 스트림 소개 2021.02.26

    스트림이란 무엇인가? 스트림stream은 자바 8 API에 새로 추가된 기능이다. 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 또한 스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다(단순히 stream()을 paralleStream() 로 변경하면..). 스트림의 새로운 기능은 다음과 같은 다양한 이득을 준다는 사실을 기억하자. 선언형으로 코드를 구현할 수 있다. 즉, 선언형 코드와 동작 파라미터화를 활용하면 변하는 요구사항에 쉽게 대응할 수 있다. filter, sorted, map, collect 같은 여러 빌등 블록 연산을 연결해서 복잡한 데이터 처리 파이프라인을 만들 수 있다. 여러 연산을 파이프라인으로 연결해도 여전히 가독성과 명확성이..

  4. Chap03. 람다 표현식 2021.02.25

    익명 클래스로 다양한 동작을 구현할 수 있지만 만족할 만큼 코드가 깔끔하지는 않았다. 깔끔하지 않은 코드는 동작 파라미터를 실전에 적용하는 것을 막는 요소다. 3장에서는 더 깔끔한 코드로 동작을 구현하고 전달하는 자바 8의 새로운 기능인 람다 표현식을 설명한다. 람다 표현식은 익명 클래스처럼 이름이 없는 함수이고 메서드를 인수로 전달할 수 있으므로 일.단.은 익명 클래스와 비슷하다고 생각하자(람다 표현식은 정확히는 조금 특수한 익명클래스이다). 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 표현할 수 있다. 람다 표현식에는 이름은 없지만 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다. 람다의 특징을 하나씩 자세히 살펴보자. 익명..

  5. Chap02. 동작 파라미터화 코드 전달하기 2021.02.23

    모던 자바 인 액션 책을 작년 이맘때쯤에 우형 없는 우테코에서 진행했었는데, 아이러니하게도 우형 있는 우테코(라임을 맞추고 싶은 욕구가 들끓었다)에서 다시 진행하고있다. 스터디를 할지말지 고민을 했는데 다시 공부하게 된 원인은 아무래도 처음 공부할 때 어려운 챕터들은 스킵했었고, 이해가 안됨에도 억지로 읽고 지나갔던 내용들도 꽤 많았기 때문에 이번 2회차는 확실하게 이해하고 넘어가겠다는 전제를 깔고 스터디에 임하려고한다. 동작 파라미터화 코드 전달하기 시시각각 변하는 사용자 요구사항에 어떻게 대응해야 할까? 엔지니어링적인 비용이 가장 최소화되어야 한다. 새로 추가한 기능은 쉽게 구현할 수 있어야 한다. 장기적인 관점에서 유지보수가 쉬어야 한다. 동작 파라미터화(behavior parameterizatio..

  6. 아이템30 - 이왕이면 제네릭 메서드로 만들라 2021.02.07

    클래스와 마찬가지로, 메서드도 제네릭으로 만들 수 있다. 매개변수화 타입을 받는 정적 유틸리티 메서드는 보통 제네릭이다. Collections의 알고리즘 메서드는 모두 제네릭이다. 제네릭 메서드 작성법은 제네릭 타입 작성법과 비슷하다. 다음은 두 집합의 합집합을 반환하는, 문제가 있는 메서드다. public static Set union(Set s1, Set s2) { Set result = new HashSet(s1); result.addAll(s2); return result; } 컴파일은 되지만 경고가 두 개 발생한다. 경고를 없애려면 이 메서드를 타입 안전하게 만들어야 한다. 메서드 선언에서의 세 집합(입력 2개, 반환 1개)의 원소 타입을 타입 매개변수로 명시하고, 메서드 안에서도 이 타입 매개..