본문 바로가기
728x90

도서/모던 자바 인 액션10

12장. 새로운 날짜와 시간 API 자바 8 이전에도 날짜, 시간 관련 API가 존재했다. 자바 1.0에서는 java.util.Date 클래스로, java 1.1에서는 java.util.Calendar 클래스로 이 기능을 제공했다. 하지만 이들은 다음과 같은 문제를 가지고 있다. java.util.Date: 1900년을 기준으로 오프셋, 0에서 시작하는 달 인덱스, JVM 기본 시간대인 CET(Central European Time - 중앙 유럽 시간) 사용, 가변 등. 따라서 다음과 같이 괴상하게(?) 코드를 작성해야 한다. 1 Date date = new Date(117, 8, 21); // 2017년 9월 21일 cs java.util.Calendar: 1900년 부터 시작하는 오프셋은 없지만 여전히 달의 인덱스가 0 부터 시작했다,.. 2022. 3. 30.
11장. null 대신 Optional 클래스 값이 없는 상황을 어떻게 처릴할까? 1 2 3 public String getCarInsuranceName(Person person) { return person.getCar().getInsurance().getName(); } Colored by Color Scripter cs 위 코드의 경우 만약 getCar 메서드를 통해 가져온 객체가 null이거나 getInsurance의 반환값이 null이라면 NullPointerExceptino이 발생한다. 보수적인 자세로 NullPointerException 줄이기 위 코드와 같은 NullPointerException을 줄이기 위해선 다음과 같은 보수적 방식을 사용할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 public String getC.. 2022. 3. 27.
9장. 리팩터링, 테스팅, 디버깅 이번 장에서는 기존 코드를 이용해 새로운 프로젝트를 시작하는 상황을 가정한다. 그 후 람다를 이용해 가독성과 유연성을 높이면서 기존 코드를 리팩토링 하는 방법을 소개한다. 가독성과 유연성을 개선하는 리팩터링 람다, 메서드 참조, 스트림 등을 이용해 가독성이 높고 유연한 코드로 리팩터링 하는 과정을 살펴보자 코드 가독성 개선 코드 가독성이 개선되면 다른 사람이 코드를 이해하기 쉬워지고 유지보수 할 수 있게 된다. 자바 8의 새로운 기능을 사용하면 코드가 간결하면서도 이해하기 쉬워진다. 익명 클래스를 람다 표현식으로 리팩터링하기 추상 메서드를 구현하는 익명 클래스를 람다로 리팩터링 할 수 있지만 모든 경우에 적용할 수 있는 것은 아니다. 다음과 같은 경우 람다로 변환할 수 없다. 1. 익명 클래스에서 thi.. 2022. 3. 17.
8장 컬렉션 API 개선 컬렉션 팩토리 여러 소수의 문자열을 한번에 저장하려면 add메서드를 사용하는 것보단 Arrays.asList 팩토리 메서드를 사용하는 것이 더 간결하다. 하지만 이 방식으로 만들어진 리스트는 고정 크기라 요소를 갱신할 수는 있지만 새 요소를 추가하거나 삭제할 수 없다. 요소를 추가하거나 삭제한다면 UnsupportedOperationException이 발생한다. 이는 asList 메서드가 내부적으로 고정된 크기의 변환할 수 있는 배열로 구현되었기 때문이다. Set의 경우 다음과 같이 깔끔하지 못하고 내부적으로 불필요한 객체 할당을 하는 연산을 해야 생성할 수 있다. 1 2 3 4 5 Set friends = new HashSet(Arrays.asList("a", "b", "c")); Set friends.. 2022. 3. 15.
728x90