개발로그

Item 46 - 스트림에서는 부작용 없는 함수를 사용하라

스트림 스트림 패러다임의 핵심은 계산을 일련의 변환(transformation)으로 재구성하는 것이다. 각 변환 단계는 가능한 이전 단계의 결과를 받아 처리하는 순수 함수 여야 한다. 순수함수란? 오직 입력만이 결과에 영향을 주는 함수 다른 가변상태를 참조 하지 않고, 함수 스스로도 다른 상태를 변경하지 않는다. 예를 들...

Item 44 - 표준 함수형 인터페이스를 사용하라

자바가 람다를 지원하면서 상위 클래스의 기본 메서드를 재정의해 원하는 동작을 구현하는 템플릿 메서드 패턴의 매력은 크게 줄었다. 모던 자바에서는 템플릿 메서드 패턴 대신 함수 객체를 받는 정적 팩터리나 생성자를 제공하는 방식으로 해법을 제시하고 있다. LinkedHashMap의 removeEldestEntry를 재정의하여 Cache를 구현해보자. ...

Item 42 - 익명 클래스보다는 람다를 사용하라

익명 클래스(Annonymous Class) 예전에는 함수 객체를 만드는 주요 수단으로 익명 클래스를 많이 사용했다. 함수객체란 ? 추상 메서드 하나만 담은 인터페이스(드물게는 추상 클래스)의 인스턴스 정렬을 위한 비교함수로 익명클래스를 사용한 예시 // 익명 클래스를 함수 객체로 사용 - 낡은 기법! Collections.sort(words...

Item 41 - 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라

마커 인터페이스 아무 메서드도 선언하지 않은 인터페이스이다. 자바의 대표적인 마커 인터페이스로는 Serializable, Cloneable, Remote 등이 있다. 대부분의 경우, 마커 인터페이스를 단순한 타입 체크를 하기 위해 사용한다. Serializable 인터페이스를 활용한 예시를 통해 마커 인터페이스를 이해해보자. pac...