디폴트 메서드 전통적인 자바 인터페이스를 구현하는 클래스는 인터페이스의 모든 메서드 구현을 제공하거나 슈퍼 클래스의 구현을 상속받아야 한다. 인터페이스를 바꾸고 싶을 때 문제 발생 -> 모든 구현체를 다 고쳐야 함 자바 8 인터페이스의 변화 인터페이스 내부에 정적 메서드 사용 디폴트 메서드 기능 사용 즉 메서드 구현을 포함한 인터페이스를 정의할 수 있다. 기존 코드 구현을 바꾸지 않도록 하면서 인터페이스를 바꿀 수 있다. 결국 추상 클래스? 디폴트 메서드는 주로 라이브러리 설계자들이 사용한다. 정적 메서드와 인터페이스 보통 자바에서는 인터페이스와 인터페이스를 활용할 수 있는 정적 메서드를 정의하는 유틸리티 클래스를 활용한다. (Collection 인터페이스를 활용하는 Collections) 자바 8 이후..
개발 서적/모던 자바 인 액션
11.1 값이 없는 상황을 어떻게 처리할까 클래스 내부에 필드로 객체를 가지는 상황에서 객체가 비어 있고, 해당 필드에 접근하려 하면 NullPointerException이 발생한다. 보수적인 자세로 if (객체 == null)을 많이 사용하여 null을 피해 갈 수도 있을 것이다. 변수를 접근할 때마다 if가 늘어나고 코드 들여 쓰기가 늘어난다. 이와 같은 반복 패턴 코드를 ‘깊은 의심’이라고 한다. null 때문에 발생하는 문제 에러의 근원이다: NullPointerException은 가장 흔한 에러 코드를 어지럽힌다: null 확인 코드를 추가해야 하므로 아무 의미가 없다: null은 아무 의미도 표현하지 않는다. 자바 철학에 위배된다: 자바는 개발자로부터 모든 포인터를 숨겼지만 null은 예외 형..
스트림을 사용하면 내부 반복으로 네이티브 자바 라이브러리가 스트림 요소의 처리를 제어할 수 있다. 따라서 개발자는 컬렉션 데이터 처리 속도를 높이려고 따로 고민할 필요가 없다. 컴퓨터의 멀티코어를 활용해서 파이프라인 연산을 실행할 수 있다는 점이 중요한 특징이다. 7.1 병렬 스트림 컬렉션에 parallelStream을 호출하면 병렬 스트림이 생성된다. 병렬 스트림이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림이다. 따라서 모든 멀티코어 프로세서가 각각의 청크 처리를 할당할 수 있다. 병렬 실행이 무조건 빠른 것은 아니다. static long sum(int n) { long sum = 0; for (int i = 0; i < n; i++) { sum += 1; } re..
4.1 스트림이란 무엇인가 자바 8 API에 새로 추가된 기능 선언형으로 컬렉션 데이터 처리(DB에 질의하듯이) 어떻게 동작을 구현할지 지정할 필요 없이 ‘저칼로리의 요리만 선택하라’ 같은 동작의 수행을 지정할 수 있다. 멀티스레드 코드를 구헌 하지 않아도 데이터를 투명하게 병렬로 처리 가능 parallelStream() 여러 빌딩 블록 연산을 파이프 라인으로 연결해 가독성과 명확성을 유지하며 작성이 가능하다. filter(sorted, map collect)와 같은 연산은 고수준 빌딩 블록으로 이루어져 있어서 특정 스레딩 모델에 제한되지 않는다. (내부적으로 단일 스레드 모델에 사용할 수 있지만 멀티코어 아키텍처를 최대한 투명하게 활용할 수 있게 구현되어 있다.) 결과적으로 데이터 처리를 병렬화하면서 ..