Language39 [모던 자바 인 액션] Ch.14 - 자바 모듈 시스템 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 기본적인 Java 지식이 있으시다면 이해하기 수월한 정도입니다 :) 또한, 해당 책은 2018년 Java 11 기준으로 작성되어 있습니다. 따라서 이후 버전에서 변경된 내용은 수정하여 작성했습니다. (아는 부분만 말입니다..) 1. 소프트웨어 유추 지금까지는 이해하고 유지보수하기 쉬운 코드를 구현하는데 사용할 수 있는 기능에 대해 중점적으로 살펴봤다. 하지만 이러한 저수준 영역이 아니라 고수준에서 기반 코드를 바꿀 때 유추하기 쉬워 생산성을 높일 수 있는 방법이 필요하다. 추론하기 쉬운 소프트웨어를 만드는데 도움을 주는 관심사 분리(SoC, Seperation of Concerns)와 정보 은닉(Information Hiding)을 살펴본다. 1.1.. Language/Java 2022. 7. 12. [모던 자바 인 액션] Ch.13 - 디폴트 메서드 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 기본적인 Java 지식이 있으시다면 이해하기 수월한 정도입니다 :) 또한, 해당 책은 2018년 Java 11 기준으로 작성되어 있습니다. 따라서 이후 버전에서 변경된 내용은 수정하여 작성했습니다. (아는 부분만 말입니다..) 1. API 변화 인터페이스를 변화시키면 구현 클래스들은 이에 영향을 받는다. 만약 인터페이스가 이미 릴리즈되어 공개되었다면 사용자가 어떻게 구현해서 사용하고 있는지 알 방법이 없다. 그 상태에서 인터페이스를 변화시킨다면, 기존 빌드한 코드들의 바이너리 호환성은 유지되기 때문에 실행은 되겠지만 변경된 메서드를 호출할 경우 AbstractMethodError가 발생한다. 만약 전체 어플리케이션을 재빌드해서 다시 실행시킨다면 이때.. Language/Java 2022. 7. 11. [모던 자바 인 액션] Ch.12 - 새로운 날짜와 시간 API 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 기본적인 Java 지식이 있으시다면 이해하기 수월한 정도입니다 :) 또한, 해당 책은 2018년 Java 11 기준으로 작성되어 있습니다. 따라서 이후 버전에서 변경된 내용은 수정하여 작성했습니다. (아는 부분만 말입니다..) 1. 각종 날짜 및 시간 클래스 1.1 LocalDate와 LocalTime LocalDate date = LocalDate.of(2022, 7, 9); int year = date.getYear(); //2022 Month month = date.getMonth(); //JULY int monthValue = date.getMonthValue(); //7 int day = date.getDayOfMonth(); //9 Day.. Language/Java 2022. 7. 9. [모던 자바 인 액션] Ch.11 - Optional 클래스 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 기본적인 Java 지식이 있으시다면 이해하기 수월한 정도입니다 :) 또한, 해당 책은 2018년 Java 11 기준으로 작성되어 있습니다. 따라서 이후 버전에서 변경된 내용은 수정하여 작성했습니다. (아는 부분만 말입니다..) 1. NPE 핸들링 NullPointerException(NPE)는 null 값이 존재하는 언어를 사용하는 개발자라면 모두 겪는 예외이다. 널참조를 피하기 위해 처음에는 조건문을 활용해 if (object != null) 식으로 처리했다. 하지만, 이러한 null 확인 코드로 인해 들여쓰기 수준이 증가하고, 그에 따른 조건문 분기도 증가했다. 이러한 반복 패턴 코드를 '깊은 의심(Deep Doubt)'라고 부른다. 그루비(Gr.. Language/Java 2022. 7. 8. [모던 자바 인 액션] Ch.10 - 람다를 이용한 DSL 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 기본적인 Java 지식이 있으시다면 이해하기 수월한 정도입니다 :) 또한, 해당 책은 2018년 Java 11 기준으로 작성되어 있습니다. 따라서 이후 버전에서 변경된 내용은 수정하여 작성했습니다. (아는 부분만 말입니다..) 1. 도메인 전용 언어(DSL) DSL은 특정 비즈니스 도메인의 문제를 해결하려고 만든 언어이다. I/O, 디스크 접근 등 외부적인 요소를 신경쓰지 않고 비즈니스 문제를 해결하는 코드를 작성하기 때문에 이해관계자들이 코드를 이해할 수 있다는 것이 큰 장점이다. DSL은 내부 DSL, 외부 DSL, 다중 DSL로 나눌 수 있다. 1.1 내부 DSL 내부 DSL(Embedded DSL)은 순수 자바 코드같은 기존 호스팅 언어를 기.. Language/Java 2022. 7. 7. [모던 자바 인 액션] Ch.9 - 리팩터링, 테스팅, 디버깅 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 기본적인 Java 지식이 있으시다면 이해하기 수월한 정도입니다 :) 또한, 해당 책은 2018년 Java 11 기준으로 작성되어 있습니다. 따라서 이후 버전에서 변경된 내용은 수정하여 작성했습니다. (아는 부분만 말입니다..) 1. 리팩터링 람다, 메서드 참조, 스트림 등의 기능을 이용해서 기존 코드를 더 가독성이 좋고 유연한 코드로 리팩터링한다. 가독성이 좋다는 것은 다른 사람들이 봐도 쉽게 이해할 수 있어 유지보수가 용이하다는 것이다. 익명 클래스는 람다식으로 바꾸고, 람다식은 메서드 참조로 더욱 명확하게 할 수 있다. 또한, 기존 명령형 데이터 처리를 스트림 API를 활용해 문제 해결 방법을 더 직접적으로 기술할 수 있을 뿐만 아니라 쉽게 병렬.. Language/Java 2022. 7. 4. [모던 자바 인 액션] Ch.8 컬렉션 API 개선 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 기본적인 Java 지식이 있으시다면 이해하기 수월한 정도입니다 :) 또한, 해당 책은 2018년 Java 11 기준으로 작성되어 있습니다. 따라서 이후 버전에서 변경된 내용은 수정하여 작성했습니다. (아는 부분만 말입니다..) 1. 컬렉션 팩토리 //기존 List alphabet = Arrays.asList("A", "B", "C"); 일반적으로 작은 컬렉션을 만든다는 것은 고정값으로 사용하기 위함이다. 따라서 우리는 크기도 고정, 추가/삭제/갱신도 불가능한 작은 컬렉션 객체를 원한다. Arrays.asList 메서드를 이용하면 배열을 리스트로 만들기에 List라도 고정 크기를 갖는다. 따라서, 요소를 갱신하는 것은 괜찮지만 추가한다면 Unsuppo.. Language/Java 2022. 6. 30. [모던 자바 인 액션] Ch.7 병렬 데이터 처리와 성능 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 기본적인 Java 지식이 있으시다면 이해하기 수월한 정도입니다 :) 또한, 해당 책은 2018년 Java 11 기준으로 작성되어 있습니다. 따라서 이후 버전에서 변경된 내용은 수정하여 작성했습니다. (아는 부분만 말입니다..) 1. 병렬 스트림 병렬 스트림이란 스트림 요소를 묶음(청크, Chunk) 단위로 분할한 스트림이다. parallel()을 통해 병렬 flag를 설정할 수 있고, 반대로 sequential()로 순차 스트림으로 바꿀 수 있다. 이 두 가지를 통해 어떤 연산을 병렬로 실행할지 순차로 실행할지 제어할 수 있다. 하지만, 병렬처리가 반드시 더 나은 속도를 보여주는 것은 아니다. 예컨데, 1부터 N까지 합계를 구하는 메서드를 작성할 때.. Language/Java 2022. 6. 28. [모던 자바 인 액션] Ch.6 - 데이터 수집 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 기본적인 Java 지식이 있으시다면 이해하기 수월한 정도입니다 :) 또한, 해당 책은 2018년 Java 11 기준으로 작성되어 있습니다. 따라서 이후 버전에서 변경된 내용은 수정하여 작성했습니다. (아는 부분만 말입니다..) 시작에 앞서 스트림 API의 collect, 인터페이스인 Collector, 유틸리티 클래스인 Collectors를 잘 구별해서 살펴보자. 1. 컬렉터란? 중간 처리 메서드로 데이터를 처리하고 만들어진 결과를 컬렉션으로 수집하고 싶을 때는 Collector를 이용한다. 특히, 함수형 프로그래밍은 다수준(multilevel)으로 그룹화를 수행할 때 기존 명령형 프로그래밍에 비해 가독성과 유지보수성이 증가한다. 기존에 collec.. Language/Java 2022. 6. 22. [모던 자바 인 액션] Ch.5 - 스트림 활용 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 기본적인 Java 지식이 있으시다면 이해하기 수월한 정도입니다 :) 또한, 해당 책은 2018년 Java 11 기준으로 작성되어 있습니다. 따라서 이후 버전에서 변경된 내용은 수정하여 작성했습니다. (아는 부분만 말입니다..) 1. 필터링(Filtering) 필터링은 스트림의 요소를 조건을 통해 선택하는 방법이다. 스트림의 filter 메서드는 Predicate를 인수로 받아 이와 일치하는 요소를 담고 있는 스트림으로 반환한다. Stream filter(Predicate Language/Java 2022. 6. 16. [모던 자바 인 액션] Ch.4 - 스트림 기본 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 기본적인 Java 지식이 있으시다면 이해하기 수월한 정도입니다 :) 또한, 해당 책은 2018년 Java 11 기준으로 작성되어 있습니다. 따라서 이후 버전에서 변경된 내용은 수정하여 작성했습니다. (아는 부분만 말입니다..) 1. 스트림 특징 스트림을 이용하면 SQL 처럼 선언형으로 컬렉션을 처리할 수 있다. 또한, 멀티스레드를 구현하지 않아도 병렬성을 획득할 수 있다. 아래는 여러 요리 중 칼로리가 400미만인 요리명을 칼로리순으로 저장하는 코드다. public class Chap04 { public static void main(String[] args) { Dish[] dishes = { new Dish("스테이크", 700, false, D.. Language/Java 2022. 6. 14. [모던 자바 인 액션] Ch.3 - 람다 표현식 해당 서적을 참고하여 개인 공부용으로 정리한 글입니다. 기본적인 Java 지식이 있으시다면 이해하기 수월한 정도입니다 :) 또한, 해당 책은 2018년 Java 11 기준으로 작성되어 있습니다. 따라서 이후 버전에서 변경된 내용은 수정하여 작성했습니다. (아는 부분만 말입니다..) 1. 람다란? 람다(Lambda)란, 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다. 람다는 세 부분으로 나눠진다. 람다 파라미터 : 메서드 파라미터에 들어가는 파라미터 리스트 화살표(->) : 파라미터와 바디를 구분 람다 바디 : 반환 값에 해당하는 표현식 2. 람다 사용법 함수형 인터페이스라는 문맥에서 람다 표현식을 사용할 수 있다. 함수형 인터페이스란? 오직 하나의 추상 메서드를 지정하는 인터페이스. 대표적으로 C.. Language/Java 2022. 6. 13. 이전 1 2 3 4 다음