DEV ℧ Developer Diary

[EffectiveJava] item45 - 스트림은 주의해서 사용하라

스트림 API는 다량의 데이터 처리 작업(순차 또는 병령)을 돕고자 자바8에 추가된 기능이다.

Stream API

스트림 API가 제공하는 추상 개념 중 핵심은 두가지이다.

  • 스트림(stream)은 데이터 원소의 유한 혹은 무한 시퀀스(sequence)를 뜻한다.
  • 스트림 파이프라인(stream pipeline)은 이 원소들로 수행하는 연산 단계를 표현하는 개념이다.

스트림은 대표적으로...

[EffectiveJava] item44 - 표준 함수형 인터페이스를 사용하라

자바가 람다를 지원하면서 API를 작성하는 모범 사례도 템플릿 메서드 패턴에서 정적 팩터리나 생성자를 제공하는 형태로 많이 변화했다.

위의 내용을 풀어 말하자면, 함수 객체를 매개변수로 받는 생성자와 메서드를 더 많이 많들어야 한다는 것이다. 이때 함수형 매개변수 타입을 올바르게 선택하도록 해야한다.

함수형 매개변수 타입

예를 들어...

[EffectiveJava] item43 - 람다보다는 메서드 참조를 사용하라

람다가 익명 클래스보다 나은 점 중에서 가장 큰 특징은 간결함이다.

하지만 메서드 참조(method reference)를 사용하면 함수 객체를 람다보다 더 간결하게 만들어 줄 수 있다.

간단하게 예시를 들어보자.

map.merge(key, 1, (count,...

[EffectiveJava] item42 - 익명 클래스보다는 람다를 사용해라

자바에서 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스(드물게는 추상 클래스)를 사용했다. 이런 인터페이스의 인스턴스를 함수객체(function Object)라고 하여 , 특정 함수나 동작을 나타내는 데 썻다.

JDK1.1 등장 이후 함수객체를 만드는 주요 수단은 익명 클래스가 되었고, 다음과 같은 예시로 쓰였다.

<pre...

[EffectiveJava] item41 - 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라

아무 메서드도 담고 있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스를 마커 인터페이스(marker interface)라 한다.

Serializable 인터페이스가 좋은 예다.
Serializable는 자신을 구현한 클래스의 인스턴스는 ObjectOutputStream을 통해 직렬화(Serialization)할 수 있다고 알려준다.

public interface Serializable <span...