본문 바로가기
반응형
SMALL

모던 자바 인 액션14

chapter 13 디폴트 자바 8이전에 자바에서는 인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메서드를 구현하여 제공하거나 슈퍼클래스의 구현을 상속받아야 한다. 그런데 인터페이스에 새로운 메서드를 추가하는 경우가 있으면 해당 인터페이스를 구현했던 모든 클래스의 구현을 고쳐야 한다. 자바8 API에서 List 인터페이스에 sort같은 메서드를 추가했기 때문에 문제가 발생할 수 있다. 자바 8에서 기본 구현을 포함하는 인터페이스를 정의하는 두 가지 방법을 제공하는데 첫 번째, 인터페이스 내부에 정적 메서드를 사용하는 것 두 번째, 인터페이스의 기본 구현을 제공할 수 있도록 디폴트 메서드 기능을 사용하는 것 기존 인터페이스를 구현하는 클래스는 자동으로 인터페이스에 추가된 새로운 메서드의 디폴트 메서드를 상속받게 된다. .. 2023. 8. 25.
chapter 12 새로운 날짜와 시간 API 자바 8 이전의 날짜와 시간 API의 문제들 Date 클래스는 직관적이지 못하며 자체적으로 시간대 정보를 알고 있지 않다 Date를 deprecated 시키고 등장한 Calendar 클래스 또한 쉽게 에러를 일으키는 설계 문제를 갖고 있다 Date와 Calendar 두 가지 클래스가 등장하면서 개발자들에게 혼란만 가중되었다. 날짜와 시간을 파싱하는데 등장한 DateFormat은 Date에만 지원되었으며, 스레드에 안전하지 못했다. Date와 Calendar는 모두 가변 클래스이므로 유지보수가 아주 어렵다. 12.1 LocalDate, LocalTime, Instant, Duration, Period 클래스 java.time 패키지는 LocalDate, LocalTime, LocalDateTime, Ins.. 2023. 8. 24.
chapter 11 null 대신 Optional 클래스 이 장의 내용 null 참조의 문제점과 null을 멀리해야 하는 이유 null 대신 Optional : null로부터 안전한 도메인 모델 재구현하기 Optional 활용 : null 확인 코드 제거하기 Optional에 저장된 값을 확인하는 방법 값이 없을 수도 있는 상황을 고려하는 프로그래밍 11.1 값이 없는 상황을 어떻게 처리할까? public String getCarInsuranceName(Person person) { return person.getCar().getInsurance().getName(); } 위 코드에서 person이 null이거나 getCar(), getInsurance()가 null을 반환한다면 어떻게 될까? 11.1.1 보수적인 자세로 NullPointerException .. 2023. 8. 16.
chapter 9 리펙터링, 테스팅, 디버깅 람다 표현식으로 코드 리팩터링하기 람다 표현식이 객체지향 설계 패턴에 미치는 영향 람다 표현식 테스팅 람다 표현식과 스트림 API 사용 코드 디버깅 9.1 가독성과 유연성을 개선하는 리팩터링 람다, 메서드 참조, 스트림 등의 기능을 이용해 가독성을 높이고 유연한 코드로 리팩토링하는것을 설명. 9.1.1 코드 가독성 개선 익명 클래스를 람다 표현식으로 리팩토링 람다 표현식을 메서드 참조로 리팩토링 명령형 데이터 처리를 스트림으로 리팩토링 9.1.2 익명 클래스를 람다 표현식으로 리팩터링하기 하나의 추상 메서드를 구현하는 익명 클래스는 람다 표현식으로 리팩토링 할 수 있다. Runnable r1 = new Runnable() { // 익명 클래스를 사용한 이전 코드 @Override public void r.. 2023. 7. 30.
chapter 8 컬렉션 API 개선 8.1 컬렉션 팩토리 자바에서 적은 요소를 포함하는 리스트를 어떻게 만들까? 다음 방법은 세 문자열을 저장하는데도 많은 코드가 필요하다. List friends = new ArrayList(); friends.add("Raphael"); friends.add("Olivia"); friends.add("Thibaut"); 다음처럼 Arrays.asList() 팩토리 메서드를 이용해 코드를 줄일 수 있지만, 고정 크기의 리스트이기 때문에 요소를 추가하려하면 Unsupported OperationException이 발생한다. List friends = Arrays.asList("Raphael", "Olivia"); friends.set(0, "Rechard"); friends.add("Thibaut"); Un.. 2023. 7. 26.
chapter 7 병렬 데이터 처리와 성능 자바 7이 등장하기 전에는 데이터 컬렉션을 병렬로 처리하기 어려웠음. 다음과 같은 일련의 과정을 거쳐야 했음. 1) 데이터를 서브파트로 분할해야 한다. 2) 분할된 서브파트를 각각의 스레드로 할당한다. 3) 스레드로 할당한 다음에는 의도치 않은 레이스 컨디션(역자주_경쟁 상태)이 발생하지 않도록 적절한 동기화를 추가해야 한다. 4) 부분 결과를 합쳐야 한다. 자바 7은 더 쉽게 병렬화를 수행하면서 에러를 최소화할 수 있도록 포크/조인 프레임워크(fork/join framework) 기능을 제공한다. 이 장에서는 스트림으로 데이터 컬렉션 관련 동작을 얼마나 쉽게 병렬로 실행할 수 있는지 설명한다. 7.1 병렬 스트림 컬렉션에 parallelStream을 추출하면 병렬 스트림(parallel stream)이.. 2023. 7. 24.
반응형
LIST