Item 48. 스트림 병렬화는 주의해서 적용하라
서론주류 언어 중, 동시성 프로그래밍 측면에서는 항상 자바는 앞서왔다.처음 릴리즈된 1996년부터 스레드, 동기화, wait/notify를 지원했다. 자바 5부터는 동시성 컬렉션인 java.util.concurrent 라이브러리와 실행자(Excutor) 프 ...
Read more
Item 47. 반환 타입으로는 스트림보다 컬렉션이 낫다
서론Array형태의 Linear한 자료구조를 반환하는 메서드는 수없이 많다.이런 메서드의 반환타입으로 아래와 같은 타입을 사용했다. Collection, Set, List와 같은 컬렉션 인터페이스 E[]와 같은 배열 Iterable 인터페이스 기본은 Collecti ...
Read more
Item 45. 스트림은 주의해서 사용하라
서론스트림 API는 다량의 데이터 처리 작업(순차적이든 병렬적이든)을 돕고자 자바8에 추가되었다.이 API가 제공하는 추상 개념 중 핵심은 두 가지다. 스트림(Stream)은 데이터 원소의 유한 혹은 무한 시퀀스(sequence)를 의미 스트림 파이프라인(Strea ...
Read more
Item 41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라
서론아무 메서드도 담고 있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시 해주는 인터페이스를 마커 인터페이스라고 한다.Serializeable 인터페이스가 가장 좋은 예이다. 아무런 메서드도 없다.단지 타입 정보만 알려주는 인터페이스이다. 마커 인터 ...
Read more
Item 40. @Override 애너테이션을 일관되게 사용하라
서론자바가 기본으로 제공하는 애너테이션 중 보통의 프로그래머에게 가장 중요한 것은 @Override일 것이다.@Override는 메서드 선언에만 달 수 있으며, 이 애너테이션의 의미는 상위 클래스의 메서드를 재정의 했음을 의미한다. @Override를 선언하지 않은 메 ...
Read more
Item 39. 명명 패턴보다 애너테이션을 사용하라
서론전통적으로 도구나 프레임워크가 특별히 다뤄야 할 프로그램 요소에는 딱 구분되는 명명 패턴을 적용해 왔다.예컨데 테스트 프레임워크인 JUnit3에서는 테스트 메서드 이름을 test로 시작하게 지어야 했다. 단점은 아래와 같다. 오타가 나면 안된다.실수로 이름을 ...
Read more
Item 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라
서론타입 안전 열거 패턴은 확장이 가능하나, 열거 타입은 확장을 할 수 없다다시 말해 타입 안전 열거 패턴은 값을 그대로 가져온 다음 값을 더 추가하여 다른 목적으로 쓸 수 있지만,열거 타입은 그럴 수 없다. 하지만 열거타입도 확장할 수 있는 방법이 한 가지 존재한다. ...
Read more
Item 37. Ordinal 인덱싱 대신 EnumMap을 사용하라
ordinal()을 배열 인덱스로 사용해선 안된다.12345678910class Plant { enum Lifecycle { ANNUAL, PERENNIAL, BIENNIAL } final String name; final L ...
Read more
Item 36. 비트 필드 대신 EnumSet을 사용하라
서론 열거한 값들이 주로 단독이 아닌 집합으로 사용 될 경우, 예전에는 각 상수에 서로 다른 2의 거듭제곱 값을 할당한 정수 열거 패턴을 사용해왔다. 123456789public class Text { public static final int STYLE ...
Read more
Item 35. Ordinal 메서드 대신 인스턴스 필드를 사용하라
서론대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응된다.모든 열거 타입은 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환하는 ordinal이라는 메서드를 제공한다. ordinal을 잘못 사용한 예123456public enum Ensemble ...
Read more