Item 55 - 옵셔널 반환은 신중히 하라
메서드가 특정 조건에서 값을 반환할 수 없을 때 자바 8 이전 (1) 예외 던지기, (2) null 반환 두 가지 선택지가 존재했다. 하지만 이 방법들에는 모두 단점이 존재한다. 1. 예외를 던지는 방법 진짜 예외적인 상황에서만 사용해야 한다. 예외 생성 시, 스택 추적 전체를 캡처하는 비용이 만만치 않다. 2. null을 반환하...
메서드가 특정 조건에서 값을 반환할 수 없을 때 자바 8 이전 (1) 예외 던지기, (2) null 반환 두 가지 선택지가 존재했다. 하지만 이 방법들에는 모두 단점이 존재한다. 1. 예외를 던지는 방법 진짜 예외적인 상황에서만 사용해야 한다. 예외 생성 시, 스택 추적 전체를 캡처하는 비용이 만만치 않다. 2. null을 반환하...
컬렉션이나 배열이 비었을 때 null을 반환하면? 🐛 private final List<Cheese> cheesesInStock = ...; /** * @return 매장 안의 모든 치즈 목록 반환한다. * 단, 재고가 하나도 없다면 null 을 반환한다. */ public List<Cheese...
가변인수(varargs) 메서드 명시한 타입의 인수를 0개 이상 받을 수 있다. 가변인수 메서드 호출 시, 가장 먼저 인수의 개수와 길이가 같은 배열을 만들고 인수들을 이 배열에 저장하여 가변인수 메서드에 건네준다. 사용법 1 - 필수 인수를 지정하라 잘못 구현한 예시 🐛 static int min(int... args) { ...
다중정의(Overloading)의 경우 public class CollectionClassifier { public static String classify(Set<?> s) { return "집합"; } public static String classify(List<?> lst) { ...
메서드와 생성자 일반적으로 메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바란다. @Data @AllArgsConstructor public class Order { private String product; // 제품명 private double amount; // 가격 } public void proces...
자바와 동시성 프로그래밍 동시성 프로그래밍 측면에서 자바는 항상 앞서갔다. 스레드, 동기화, wait/notify - 처음 릴리즈부터 지원 동시성 컬렉션(java.util.concurrent), 실행자 프레임워크(Executor) - 자바 5부터 지원 고성능 병렬 분해 프레임워크(parallel decom-position), 포크-조인...
서론 자바7 까지는 메서드에서 원소 시퀀스 반환 시, 반환 타입으로 컬렉션 인터페이스, Iterable, 배열을 써왔다. 보통 컬렉션 인터페이스를 많이 사용한다. Iterable 인터페이스 for-each 문에서만 쓰일 경우 반환된 원소 시퀀스가 일부 Collec...
스트림 스트림 패러다임의 핵심은 계산을 일련의 변환(transformation)으로 재구성하는 것이다. 각 변환 단계는 가능한 이전 단계의 결과를 받아 처리하는 순수 함수 여야 한다. 순수함수란? 오직 입력만이 결과에 영향을 주는 함수 다른 가변상태를 참조 하지 않고, 함수 스스로도 다른 상태를 변경하지 않는다. 예를 들...
스트림 API 스트림은 다량의 데이터 처리 작업(순차/병렬)을 위해 자바 8에서 등장했다. 스트림 API 핵심 추상 개념 두 가지 핵심적인 추상 개념을 제공한다. 스트림 데이터 원소의 유한 또는 무한 시퀀스를 나타낸다. 스트림 파이프라인 스트림 원소들로 수행하는 연산단계를 표현하는 ...
자바가 람다를 지원하면서 상위 클래스의 기본 메서드를 재정의해 원하는 동작을 구현하는 템플릿 메서드 패턴의 매력은 크게 줄었다. 모던 자바에서는 템플릿 메서드 패턴 대신 함수 객체를 받는 정적 팩터리나 생성자를 제공하는 방식으로 해법을 제시하고 있다. LinkedHashMap의 removeEldestEntry를 재정의하여 Cache를 구현해보자. ...