GithubHelp home page GithubHelp logo

2022-modern-java-in-action's Introduction

모던 자바 인 액션 스터디

Modern Java in Action Book Cover

🔥 활동 개요

  1. 각 스터디 참가자는 매주 정해진 챕터를 읽어온다.
  2. 각 스터디 참가자는 매주 화요일 오전 10시까지 해당 챕터와 관련된 문제를 1개 이상 선정하여 이슈로 등록한다.
  3. 매주 수요일 오전 11시부터 오후 12시 반까지에 정기 모임을 가지며, 이슈로 등록된 문제들에 대해 토론하는 시간을 가진다.
  4. 각 스터디원은 그 다음주 화요일 오전 10시 까지 본인이 담당한 이슈에 대한 답변을 정리하여 등록한다.

📌 이슈

질문은 5~15분 정도 토론할 수 있는 것으로 준비한다.

가급적 서술형으로 답변할 수 있는 주제를 선정한다.

이미 먼저 등록된 이슈들과 서로 겹치지 않는 문제를 선정하여 이슈로 등록한다.

토론 목적의 문제 이외에도 자유롭게 책의 주제와 관련된 문제들을 등록할 수 있다.

세부 형식은 이슈 템플릿의 내용을 따른다.

오픈소스

토론이 끝난 챕터에 대해서도 생각해볼 만한 이슈가 생각나면 자유롭게 등록할 수 있다.

스터디원 외에도 자유롭게 이슈를 생성할 수 있으며, 스터디 내 토론 활동과 별개로 답변을 통해 의견을 공유할 수 있다.

👨‍💻 참여자

스터디원 Github 프로필
그린론 jaejae-yoo
라라 sure-why-not
syoun602
알파 bcc0830
야호 pup-paw
bugoverdose
토르 injoon2019
티키 yh20studio

🐾 발자취

No. 일시 주제
0 2022-02-24 OT
1 2022-03-02 [1장] 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?
2 2022-03-09 [2장] 동작 파라미터화 코드 전달하기
3 2022-03-16 [3장] 람다 표현식
4 2022-03-24 [4장] 스트림 소개
5 2022-03-30 [5장] 스트림 활용
6 2022-04-06 [6장] 스트림 데이터 수집

2022-modern-java-in-action's People

Contributors

bugoverdose avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

2022-modern-java-in-action's Issues

스트림이 게으르게 계산하면서 얻는 이점은 무엇일까?

문제

스트림이 게으르게 계산하면서 얻는 이점은 무엇일까?

선정 배경

스트림이 컬렉션과의 차이 중에서 중요하게 언급되는 것이 게으른 계산이다. 이를 통해서 얻을 수 있는 이점을 말해보는 것이 스트림을 더욱 잘 쓸 수 있고 더 잘 이해할 수 있지 않을까?

관련 챕터

[4장 스트림 소개

컬렉션과 스트림의 차이는 무엇일까?

문제

스트림 API와 컬렉션 API가 비슷한 방식으로 동작한다고 간주할 수 있다.
하지만 이 두 API는 데이터 접근 방법에 차이가 있는데 무엇일까?

선정 배경

스트림 사용을 시작하는 과정에서 스트림을 사용하는 이유에 대해 알면 좋을 것 같아서 선정했습니다.

관련 챕터

[7장] 병렬 데이터 처리와 성능

메서드 참조란 무엇일까

문제

메서드 참조란 무엇일까?

선정 배경

스트림을 쓸 때 메서드 참조에 익숙하지 않아 람다식을 적고나면 인털리제이가 추천해주는데로 메서드 참조를 하였다. 메서드 참조가 뭐길래 더 좋을까?

관련 챕터

Ch.3

스트림은 만능일까?

문제

스트림의 단점에 대해 알아보자

선정 배경

전반적으로 스트림의 장점에 대해서만 언급을 하는데
그렇게 스트림이 좋다면 굳이 for문이 있을 이유는 없지 않을까?
그럼에도 for문, forEach문이 있다는 건 스트림의 단점이 있다는 것을 반증하기 때문이다

관련 챕터

  • [4장] 스트림 소개

자바8 부터 추가된 일급시민과 람다란 무엇인가?

문제

자바8 에서는 왜 이급 시민인 메서드를 일급 시민으로 바꿀 수 있는 기능을 추가했을까?

선정 배경

책이 가장 크게 변화가 이뤄진 자바 8부터 설명하기 때문에 주요 변화에 대해서 알아보고자 해당 내용을 선정하게 되었다.

관련 챕터

[1장] 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?

  • p. 48~51
    [1장]
    [3장] 메소드 참조 개념, 람다

동작 파라미터화로 얻을 수 있는 이점은 무엇일까?

문제

자바 8에서는 코드를 넘겨주는 일이 가능해졌다. (예를 들어, 실행될 메서드의 인수로 코드를 넘겨주는 경우)
자바 8에서 해당 개념이 추가된 이유와 중요성에 대해 알아보자.

선정 배경

  • 스트림 API는 파라미터화할 수 있는 연산 코드를 전달한다는 것에 기반을 두고 있기 때문에, 해당 개념을 이해하는 것은 매우 중요하다.

1.2.3 [동작 파라미터화로 메서드에 코드전달하기, 1.3.2 [코드 넘겨주기]1.3.3 [메서드 전달에서 람다로] 예제를 통해,
간단하게나마 장점을 경험해 보고 이야기하면 좋을 것 같습니다!

관련 챕터

  • [1장] 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?
  • [2장] 동작 파라미터화 코드 전달하기
  • [3장] 람다 표현식

Thread 의 장점과 단점은 무엇일까?

문제

자바 8부터 지원하는 람다 표현식을 이용하면 스레드 코드를 구현할 수 있다고 한다.
그렇다면 스레드의 장점과 단점은 무엇일까?

선정 배경

가끔 멀티 스레드 환경에서의 충돌을 고려해야된다는 말을 듣고는 했는데,
여러 스레드가 각자 다른 코드를 실행할 수 있다는 것에는 어떤 장점과 단점이 있을지 궁금해졌다.

관련 챕터

[2장] 동작 파라미터화 코드 전달하기

Collectors.toMap 실습

주제

스트림의 collect() 연산을 통해 Map을 만드는 연습을 해보자

선정 배경

  • collect(Collectors.groupingBy())을 사용하면 Map<T, List> 형식으로 데이터를 그룹화하여 정리할 수 있고,
  • collect(Collectors.partitioningBy()`을 사용하면 Map<Boolean, List> 형식으로 데이터를 구분하여 정리할 수 있다.
  • 그런데 각 key에 해당되는 데이터가 언제나 1가지인 경우, 굳이 리스트로 만들 필요가 없다.
  • 해당 챕터에서 설명되지 않은 toMap()을 통해 Map<T, K> 형식으로 데이터를 모아보는 연습을 해보자.

관련 챕터

  • [6장] 스트림으로 데이터 수집

flatMap 이란?

문제

flatMap 은 어떤 상황에서 사용하는 것일까? 어떻게 동작하는 것일까?

선정 배경

map 을 주로 사용했기 때문에 flatMap 이 생소한데, 책의 예제만으로는 명확하게 이해되지 않아서 추가적인 정리와 실습을 해보면 좋을 것 같다.

관련 챕터

  • [5장] 스트림 활용

Optional을 사용해야 하는 적절한 경우는 언제일까?

문제

책에서 소개하고 있는 Optional을 사용해야 하는 적절한 경우는 언제일까?

선정 배경

책의 내용에서 값을 반환하지 않을 가능성이 있는 경우에는, Optional을 통해 해결할 수 있다고 설명하고 있다.
그렇다면 '반환 값이 없을 가능성이 있는 모든 경우에는 Optional을 사용하는 것이 옳을까?'라는 궁금증이 생겨 주제로 선정하였습니다.

관련 챕터

[5장] 스트림 활용 168p

다중상속은 반드시 지양해야만 하는 것인가?

문제

자바는 안되지만 파이썬은 가능하다. 기준이 대체 무엇인지 알아보자.

선정 배경

자바는 다중 상속을 지원하지 않으며 본 책의 본문에도 다중 상속에 대한 부정적 뉘앙스가 존재한다.
만일 다중 상속이 절대악이었다면 다른 언어에서도 다중 상속을 지원하지 않았을 것이다.
그렇다면 다중 상속은 어떤 장단점이 있는지 파악해야 할 필요가 있다고 생각한다.
자바가 왜 그토록 다중상속을 싫어하는지 알게되면 자바의 철학에 대해 더 잘 알 수 있다.

관련 챕터

[1장] 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?
[9장] 리팩터링, 테스팅, 디버깅

collect vs collector vs collectors (vs Collections vs Collection) 구분하기

문제

collect vs collector vs collectors (vs Collections vs Collection) 구분하기

선정 배경

책을 읽으면서 자꾸 헷갈렷다. 심지어 책을 읽기전에는 Collections의 일부 기능이라고 생각했다.
6장 초반에도 이것들을 잘 구분해라고 되어있어 선정했다.

관련 챕터

chp6

스트림 파이프라인은 무엇일까?

문제

스트림 파이프라인은 무엇일까?

선정 배경

책에서 스트림의 주요 특징 중 한 가지로 파이프라이닝을 들고 있다.
파이프라인은 어떤 구조로 이루어져 있고, 특징은 무엇일까?

관련 챕터

[4장] 스트림 소개

람다의 단점은 무엇일까?

문제

해당 챕터에서는 람다를 사용해 코드의 유연성을 높이는 방법들을 설명하고 있는데, 람다의 단점에는 무엇이 있을까?

선정 배경

람다의 장단점을 명확히 알고 있으면, 사용을 하는데 더욱 용이해질 것 같아 선정하게 되었다.

관련 챕터

  • [3장] 람다 표현식

groupingBy와 partitioningBy 비교

문제

groupingBy와 partitioningBy의 차이점 및 공통점

선정 배경

책에서 groupingBy와 partitioningBy 컬렉터의 비슷한 점에 대해 언급하고 있습니다.
둘의 비슷한 점과 차이점에 대해 더 알아보고 정리해 보고자 주제로 선정하였습니다.

관련 챕터

[6장] 스트림으로 데이터 수집 221p

병렬화란 무엇이고 장단점은 뭐가 있을까?

문제

1장에서 스트림에서 멀티코어 얘기와 함께 병렬화 얘기가 많이 나온다. 그렇다면 병렬화가 무엇이고 장단점은 뭐가 있을까?

선정 배경

이 책에서는 멀티코어 컴퓨터의 보급과 병렬화에 대한 필요성 때문에 스트림이 나온 것처럼 설명하고 있다.
그렇다면 병렬화는 무엇인지 자세히 알아볼 필요가 있다.

관련 챕터

  • [7장] 병렬 데이터 처리와 성능

Runnable이란 무엇일까?

문제

Thread 클래스와 Runnable 인터페이스

선정 배경

동작 파라미터화를 설명하기 위해 예시를 들었던 Runnable 인터페이스에 대해 궁금증이 생겨 알아보게 되었다.

관련 챕터

  • p. 84~85

람다를 잘 활용하는 방법

문제

우리가 Java에서 코드를 구현하면서 람다를 잘 활용하고 있는 예시가 있을까?

선정 배경

람다에 대해서 배우고, 사용하는 법을 알았으니 어떻게 하면 잘 사용하는지를 알아보아야 할 차례겠죠?

관련 챕터

ch.3

인터페이스는 어떤 특징이 있을까?

문제

책의 예제에서 저자가 Predicate 인터페이스를 선언하여, 선택 조건을 결정할 수 있도록 구현한 것을 볼 수 있다.
인터페이스에는 어떠한 특징이 있고, 더 나아가 추상 클래스와의 차이점은 무엇이 있는지 알아보자.

선정 배경

Predicate 인터페이스의 활용을 보고, 인터페이스의 정의와 이와 유사한 추상 클래스에 대해 짚고 넘어가면 좋을 것이라 생각하였다.

관련 챕터

[2장] 동작 파라미터화 코드 전달하기

스트림이란 무엇인가?

문제

자바 Stream API만이 아니라 스트림 자체가 무엇인지에 대해 정의 내려보아라.

선정 배경

  • Stream API를 제대로 사용하기 위해 머릿속에 나름대로의 정의를 잡고 가야 하는 용어
  • 굉장히 익숙한 개념이지만 한 줄로 명료하게 설명하지 못하는 용어라고 생각됨

관련 챕터

  • [4장] 스트림 소개
    • p. 141

reduce vs collect

문제

책 초반 부에서 나오는 reduce 와 collect 부분에서 비슷한 연산을 수행할 수 있지만 어떤 차이가 있을까?

선정 배경

collect의 내부적으로 reduce 연산이 된다고 하는데 어떤 차이가 있을까?

관련 챕터

  • [6장] 스트림으로 데이터 수집 p.200~207

람다 캡처링이란 무엇이며 제약 및 주의 사항은 무엇인가?

문제

자유변수라는 용어를 활용하여, 람다 캡처링이란 동작에 대해 서술하시오.
그리고 이러한 동작을 수행할 때 존재하는 제약 사항과 주의사항에 대해 서술하시오.

선정 배경

클로저, 스트림에서 공유 가변 자원을 사용하지 말아야 하는 이유 등 다양한 주제들과 연결된 핵심 개념으로 보임.

관련 챕터

  • [3장] 람다 표현식

쇼트서킷은 어떻게 작동하는 것일까?

문제

전체 스트림을 처리하지 않아도 결과를 반환할 수 있는 서킷 방식은 실제로 어떻게 작동하는 것일까?

선정 배경

스트림의 결과에만 집중했지, 내부적으로 어떻게 작동되고 있는지에 대해 집중해보진 못했었다.
책에서 간략하게 쇼트서킷을 언급했는데, 이 부분에 대해 찾아보고 실습해본 내용을 공유해보면 좋을 것 같다는 생각이 들어서 선정했다.

관련 챕터

  • [4장] 스트림 소개
    • p.151

익명클래스란 무엇인가?

문제

익명클래스(혹은 익명객체)라고 불리는 문법에 대해 최대한 자세하게 서술하시오.

선정 배경

<모던 자바 인 액션> 초반부부터 독자가 당연히 알 것이라고 간주하고 아무런 부연설명 없이 사용하고 있는 문법 중 하나이다. 동작 파라미터화, 특히 람다식에 대해 제대로 이해하기 위해서는 알고 있어야 하는 기초 지식이기 때문에 한 번 정리하고 들어갈 필요가 있어보인다.

관련 챕터

  • [2장] 동작 파라미터화 코드 전달하기

함수형 프로그래밍이란 무엇인가?

문제

많은 언어들에서 함수형 프로그래밍 패러다임을 도입하고 있으며, 이는 자바도 예외가 아니다.
이 함수형 프로그래밍의 주요 특징에 대해 체계적으로 정리하여 서술하시오.

선정 배경

  • 배경 지식 정리 : Java8에 등장한 문법들 중 상당수가 함수형 프로그래밍에 기반하고 있다고 한다. 이 개념에 대해 어느 정도 머릿속에 있어야 <모던 자바 인 액션>을 제대로 이해하며 읽을 수 있다고 생각한다. 1장에 나오는 내용들만이라도 한번 제대로 정리하도록 하자.
  • 면접 대비 : 개인적으로 면접에서 함수형 프로그래밍을 설명하라고 직접적으로 들은 적은 없다. 그 대신 함수형 프로그래밍을 응용한 질문을 들어본 적은 두 번 있다. FE, BE 무관하게 알고 있어야 하는 기초 지식이라는 점은 확실해보인다.
  • 클린 코드 : 기본적으로 함수형 프로그래밍 원칙을 이해해놓으면 더 깔끔하고 버그가 덜 발생하는 코드를 작성할 수 있다고 한다.

관련 챕터

  • [1장] 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?
  • [18장] 함수형 관점으로 생각하기
  • [19장] 함수형 프로그래밍 기법

자바는 왜 계속 진화하고 있는가?

문제

1996년 JDK 1.0 이 발표된 이후 JDK 8, 11 등을 거쳐서 현재 JDK 17 버전 까지 나왔다. 그렇다면 왜 자바는 초기에 갖추었던 객체지향 언어를 넘어서 여러가지의 변화를 하고 있을까?

선정 배경

앞으로의 책을 읽어갈 때 Java가 왜 이런 변화를 선택했고, 나아가고 있는지에 대해서 간단하게라도 짚고 넘어간다면 추후에 도움이 될 듯 하기에 선정했다.

관련 챕터

[1장] 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?

전략 패턴과 상속(템플릿 메서드 패턴)의 차이는 무엇일까?

문제

p.72 그림 2-1 예시를 보면 인터페이스를 사용하는 전략 패턴이 아닌 추상 클래스와 상속으로도 해결할 수 있다.
그렇다면 전략 패턴과 상속을 사용한 템플릿 메서드 패턴의 차이는 무엇이며, 각각 어떤 상황에서 사용하는 것이 적절할까?

선정 배경

미션을 하면서도 전략 패턴을 사용했지만, 상속을 사용할 수도 있지 않을까? 하는 생각이 들기도 했었다.
두 차이점에 대해 학습하고, 전략 패턴도 분명 단점이 있을 수 있기 때문에 적절한 상황에서 사용하도록 학습해보면 좋을 것 같다.

관련 챕터

[2장] 동작 파라미터화 코드 전달하기

  • p.72

컬렉션과 스트림의 차이는 뭘까?

문제

컬렉션과 스트림의 차이는 뭘까?

선정 배경

스트림에 대한 소개를 읽으면서, 컬렉션이 있는데 왜 굳이 스트림을 만들었을까에 대한 재고.

관련 챕터

chp.4

익명 클래스와 람다의 차이는 무엇일까?

문제

익명 클래스와 람다의 차이를 알아보자

선정 배경

본문에서는 익명 클래스가 람다에 비해 상당히 열등한 것으로 묘사되는데
무조건 익명 클래스를 람다로 대체해야하는지, 반대로 익명 클래스가 람다보다
우위를 점하는 상황은 어떤 상황인지 알면 구현 시 더 명확하게 구현할 수 있을 것이라 예상하기 때문

관련 챕터

  • [3장] 람다 표현식
    • p. 122

Comparator와 Comparable의 차이는 무엇일까?

문제

Comparator와 Comparable의 차이에 대하여 알아보자

선정 배경

흔히 sort시 필요한 구현으로 Comparator와 Comparable이 있는데
이름이 비슷하고 역할도 비슷한데 어떤 차이가 있는지 궁금했기 때문이다.
어떤 상황에 어떤 것이 더 적합한지 알면 구현 시 더 도움이 될것이라 생각한다

관련 챕터

  • [2장] 동작 파라미터화 코드 전달하기
    • pp. 83-84

자바 8에 추가된 함수형 인터페이스에 대해 알아보자

문제

책에서는 Predicate, Consumer, Function 함수형 인터페이스에 대해서만 설명해주었다. 그 외에 자바 8에 추가된 함수형 인터페이스에 대해 짚고 넘어가자.

선정 배경

최근 미션에서 BiPredicate 를 사용한 예시를 몇번 보았는데, 코드가 훨씬 간결해지고 가독성이 높아지는 것을 볼 수 있었다. 직접 함수형 인터페이스를 구현해서 잘 사용하는 것도 중요하지만, 자바에서 만든 검증된 표준 함수형 인터페이스를 잘 활용할 줄 아는 것도 중요하다고 생각한다.

관련 챕터

  • [3장] 람다 표현식
    • p.105

외부 반복과 내부 반복은 어떤 차이가 있을까?

문제

for-each 에서 사용되는 반복 방식을 외부 반복, 스트림에서 사용되는 반복 방식을 내부 반복이라고 한다.
이 둘의 차이점에는 어떤 것이 있을까?

선정 배경

외부 반복과 내부 반복이라는 단어가 어떤 의미를 갖는지 알아보면,
for 문과 스트림의 특징 또는 차이점에 대해 이해하는데 도움이 될 것 같아 선정했다.

관련 챕터

  • [1장] 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?
    • p. 56
  • [4장] 스트림 소개
    • p.146 ~ 149

디폴트 메서드란 무엇인가?

문제

기존에는 인터페이스에 메서드를 추가하게 되면 모든 구현 클래스들이 해당 메서드를 구현해야했다.
자바 8에서 인터페이스를 쉽게 바꿀 수 있도록 디폴트 메서드를 지원하게 되며, 이러한 고통을 덜어주었다.
그렇다면 디폴트 메서드란 무엇인가?

선정 배경

가장 큰 변화가 있었던 자바 8에서 추가된 기능이다.
해당 기능을 통해 Collectionstream 메서드를 구현 클래스(ex. ArrayList)에서 추가적으로 구현하지 않고도 사용할 수 있게 되었다. 이처럼 인터페이스 설계를 자유롭게 확장시켜준 디폴트 메서드에 대해 간략하게 알아보면 좋을 것 같다.

관련 챕터

  • [1장] 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?
    • p. 60
  • [13장] 디폴트 메서드

루프 퓨전이란 무엇인가?

문제

루프 퓨전이란 무엇일까?

선정 배경

책에서 filter와 map이 서로 다른 연산이지만 한 과정으로 병합되는 기법이 루프 퓨전이라고 언급했다.
루프 퓨전에 대해 알아보면 스트림의 중간 연산자에 대한 이해도를 높일 수 있을거라고 생각했다.

관련 챕터

[4장] 스트림 소개

람다는 뭐길래 매개변수로 넘길 수 있는가?

문제

책의 예시에 보면 ApplePredicate가 들어가야하는 자리에 그냥 람다식을 넣는다. 람다는 왜 이렇게 자유롭게 들어갈 수 있는가?

선정 배경

책에서는 자세히 나와있지 않아 헷갈렸다. 갑자기 왜 ApplePredicate 를 구현한 클래스들이 들어가다가 아무런 연관이 없어보이는 람다식이 들어갈 수 있는 것인지. 그래서 그 이유에 대해 궁금했다.

관련 챕터

[2장] 동작 파라미터화 코드 전달하기

Statement와 Expression은 어떻게 다를까?

문제

람다의 문법에는 표현식 스타일과 블록 스타일이 존재하는데, 그렇다면 statement(문) 와 expression(식)은 어떻게 다를까?

선정 배경

퀴즈를 틀려서.... statement와 expression에 대한 이해도가 부족하다고 생각되어 알아보았습니다.

관련 챕터

  • [3장] 람다 표현식

무한스트림과 가변, 불변 상태

문제

무한 스트림을 생성하는 방법에는 iterate 와 generate가 있다. 이 둘의 차이점은 무엇이며, 책의 후반부에 나오는 피보나치 수열을 만들 때
가변 상태 객체와 불변 상태 객체를 활용하는 차이점에 대해서 알아보자

선정 배경

무한 스트림을 생성하는 두가지 방법의 차이점을 알아보고, 책의 앞장 부터 나왔던 병렬성과 불변 상태 객체에 대해서 좀 더 이해해 보기 위해서

관련 챕터

[5장] 스트림 활용 190~195p

내장 Collector의 Characteristics 파악하기

문제

실질적으로 미션에 필요한 toList 같은 Collector는 어떤 Characteristic의 가지는가?

선정 배경

단순히 Enum 형태의 Characteristic가 있다고만 언급하고 비중이 크지 않았기 때문에
기본 내장 Collect의 Characteristics는 어떻게 되어 있는지 궁금해졌기 때문

관련 챕터

  • [6장] 스트림으로 데이터 수집
    • p. 229

collectionAndThen() 는 언제 사용하면 좋을까?

문제

collectionAndThen() 는 언제 사용하면 좋을까?
collectionAndThen() 을 사용해서 얻는 장점은 무엇이 있을까?

선정 배경

collectionAndThen() 의 코드는 이해가 됐지만, 언제 사용하면 좋을지 생각이 잘 안나서 여러분과 이야기해보고 싶습니다.
또, collectionAndThne() 을 아무때나 사용하면 가독성이 오히려 저하될 것 같다는 생각이 들어 이부분도 이야기해보고 싶습니다.

관련 챕터

  • [6장] 스트림으로 데이터 수집

무한 스트림의 존재 의의

문제

무한 스트림의 존재 의의를 묻는 문제이다
개인적으로 정답보다는 각자의 생각을 말하는 것을 의도한 문제이다

선정 배경

무한 스트림의 경우, 이를 병렬 스트림으로 구현하게 되면
멀티 코어 환경에서 CPU의 과부화 현상이 일어날 수 있다고 생각한다.
또한, 실질적으로 무한 스트림의 경우 sorted나 distinct와 같은 statefull한 연산을 하는 것이 불가능하다
그럼에도 불구하고 굳이 iterate, generator와 같이 무한스트림을 지원하는 이유는 무엇인가?

관련 챕터

  • [5장] 스트림 활용
    • pp. 190-195

함수형 인터페이스의 장점은 무엇일까?

문제

함수형 인터페이스의 특징과 어떠한 장점이 있는지 알아보자.

선정 배경

함수형 인터페이스를 사용함으로써 얻을 수 있는 이점이 무엇인지에 대한 설명이 부족한 것 같아 선정하였습니다.

관련 챕터

[3장] 람다 표현식

null에 안전한 스트림 생성 방법

문제

null에 안전한 스트림은 어떻게 생성할까?

선정 배경

null이 될 수 있는 객체로 스트림 만들기를 보고 스트림에서 null처리를 할 수 있는 방법에 대해 간략하게 조사해보았다.

관련 챕터

[5장] 스트림 활용
p.151

스트림 연산에 있어 상태가 있거나 없다는 의미가 무엇인가?

문제

스트림 연산은 중간연산과 최종연산으로만 분류되는 것이 아니다. 상태와 관련하여 스트림 연산을 분류하여 보시오.

선정 배경

  • Stream API의 내부 동작에 대해 옅볼 수 있는 개념이라고 생각함.
  • 공식문서에서도 언급되는 중요한 개념.
  • 개인적으로 스트림 연산 중 sorted()와 관련하여 꾸준히 느껴온 불편함을 해소해준 용어.

관련 챕터

  • [5장] 스트림 활용
    • pp. 175-176

스트림 연산은 어떻게 작동할까?

문제

스트림 연산의 시작과 끝이 어떻게 이루어지는 지에 대한 고찰

선정 배경

스트림 연산을 구분하는 방법에 대한 생각 정리하기.

관련 챕터

  • [4장] 스트림 소개
  • p. 150

전략 패턴 단점은 무엇일까?

문제

여기서 언급하는 동작 파라미터화의 기법 중 하나인 전략 패턴에 대한 장점이 많이 소개 되어있다. 그렇다면 단점은 무엇일까?

선정 배경

전략 패턴은 특정 상황에 맞을 때 큰 효과를 발휘하기에 책에서 언급하는 장점으로 인해서 무조건적으로 전략 패턴을 사용하면 안되기 때문이다.

관련 챕터

[2장] 동작 파라미터화 코드 전달하기

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.