아래 내용은 '모던 자바 인 액션'을 읽고 정리한 글로 책 내용의 순서를 따라간다. 상세한 내용이나 예시는 책과 상이할 수 있다. 예제 코드에서 사용되고 있는 스펙 Java 15 preview (record라는 새로운 클래스 개념을 사용하기 위해서 해당 프리뷰 버전을 사용. 하위 버전의 경우는 일반 클래스를 생성한 후 getter를 만들고 사용하면 됨) - 참고 JUnit 5 Gradle 6.7 소스코드 람다(Lambda)란? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다의 특징 익명 : 메서드의 이름이 없기 때문에 구현해야 할 코드에 대한 걱정거리가 줄어든다. 함수 : 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함하지만 클래스에 종..
아래 내용은 '모던 자바 인 액션'을 읽고 정리한 글로 책 내용의 순서를 따라간다. 상세한 내용이나 예시는 책과 상이할 수 있다. 예제 코드에서 사용되고 있는 스펙 Java 15 preview (record라는 새로운 클래스 개념을 사용하기 위해서 해당 프리뷰 버전을 사용. 하위 버전의 경우는 일반 클래스를 생성한 후 getter를 만들고 사용하면 됨) - 참고 JUnit 5 Gradle 6.7 소스코드 배경 소프트웨어 개발에서 요구사항은 항상 변한다. 이러한 요구사항을 반영하면서도 엔지니어링적인 비용이 가장 최소화될 수 있으면 좋다. 그뿐 아니라 새로 추가한 기능은 쉽게 구현할 수 있어야 하며 장기적인 관점에서 유지보수가 쉬어야 한다. 변화에 대응하기 첫 번째 시도 : 녹색 사과 필터링 ..
개념 스트림에서는 스트림 요소들을 정렬할 수 있는 sorted라는 메서드를 제공한다. sorted 메서드는 파라미터에 따라 2가지 버전이 존재한다. sorted() 메서드 스트림 요소의 타입에 따라 기본적으로 제공되는 정렬 방식을 사용한다. Number나 String 같은 경우는 오름차순, 커스텀 클래스의 경우 Comparable로 구현한 방식을 따른다. 커스텀 클래스의 경우 Comparable 인터페이스를 구현하지 않았을 경우 최종 연산 이후에 ClassCastException이 발생할 수 있다. 일반 스트림과 기본형 특화 스트림 모두에 제공되며 기본형 특화 스트림의 경우 해당 primitive 타입에 맞는 정렬 방식이 적용된다. sorted(Comparator) 메서드 스트림 요소들을 함수형 인터페이..
개념 스트림은 파라미터로 제공되는 함수(Function과 관련된 함수형 인터페이스)를 적용해서 스트림의 각 값을 다른 스트림으로 만든 다음에 모든 스트림을 하나의 스트림으로 연결하는 기능을 수행하는 flatMap이라는 메서드를 제공한다. 추상적으로 설명하면 차원을 낮추는 개념이라고 생각된다. (ex. Stream -> Stream) 위의 예시의 경우 일반 map 메서드를 사용할 경우 String[] 배열 자체가 다른 객체로 변환되는데 flatMap을 사용하면 String[] 내부의 값들 자체를 다른 객체로 변환하는 것이 가능하다. 여기서 말하는 함수는 map의 Function과 약간의 차이가 있다. flatMap에서 사용되는 Function은 T는 동일하지만 R이 Stream이다. 즉, 일반 제네릭 타입..
개념 스트림은 파라미터로 제공되는 함수(Function관련된 함수형 인터페이스)를 적용해서 기존 요소를 새로운 요소로 매핑시키는 map이라는 메서드를 제공한다. 기존 값을 변경한다는 개념보다는 새로운 값을 만든다는 개념이므로 변환(transforming) 에 매핑(mapping) 이라는 단어를 사용한다. map의 기본 개념은 위의 이미지와 같다. 또한 map은 반환하는 형태에 따라 여러 메서드가 존재한다. mapToInt, mapToLong, mapToDouble, mapToObj가 다음에 해당한다. 일반 스트림과 기본형 특화 스트림은 위의 메서드 중에서 타입에 따라 3가지씩 가지고 있고 없는 메서드는 결국 자기 자신 타입의 스트림을 반환하는 것이기 때문에 map 메서드가 그 역할을 하는 것이다. 예를 ..
개념 스트림의 요소를 선택하거나 스킵하는 다양한 방법에 대해 살펴보자. Predicate를 이용하는 방법, 스트림의 처음 몇 개의 요소를 무시하는 방법, 특정 크기로 스트림을 줄이는 방법 등 다양한 방법을 이용해 효율적으로 이런 작업을 수행할 수 있다. 이러한 작업을 슬라이싱이라고 한다. takeWhile 메서드 Java 9에 추가된 메서드 Predicate를 파라미터로 받아서 해당 Predicate가 false를 반환할 때까지의 요소를 취하는 메서드다. 얼핏보면 filter 메서드와 유사해보이지만, filter 메서드가 전체 스트림에 대한 Predicate를 판단하는 반면 takeWhile은 Predicate가 false를 반환하는 순간 나머지 요소를 전부 버린다. 아주 많은 요소를 가진 스트림에서는 ..
개념 스트림은 고유 요소로 이루어진 스트림을 반환하는 중간 연산인 distinct 메서드를 지원한다. 고유 여부는 객체의 equals와 hashCode 메서드를 통해 판단한다. 예제 아래 예제에서 사용되는 내용들은 다양한 상황을 연출하기 위해서 임의로 만들어진 내용이므로 특정 속성에 대해서 왜 저 타입이 사용되었는지 의문을 가지지 말자! 예제 코드에서 사용되고 있는 스펙 Java 15 preview (record라는 새로운 클래스 개념을 사용하기 위해서 해당 프리뷰 버전을 사용. 하위 버전의 경우는 일반 클래스를 생성한 후 getter를 만들고 사용하면 됨) - 참고 JUnit 5 Gradle 6.7 소스 코드 기본 데이터 생성 public record Song(int no, String title, S..
개념 Predicate를 파라미터로 받아서 Predicate가 true인 모든 요소를 포함하는 스트림을 반환하는 메서드 예제 아래 예제에서 사용되는 내용들은 다양한 상황을 연출하기 위해서 임의로 만들어진 내용이므로 특정 속성에 대해서 왜 저 타입이 사용되었는지 의문을 가지지 말자! 예제 코드에서 사용되고 있는 스펙 Java 15 preview (record라는 새로운 클래스 개념을 사용하기 위해서 해당 프리뷰 버전을 사용. 하위 버전의 경우는 일반 클래스를 생성한 후 getter를 만들고 사용하면 됨) - 참고 JUnit 5 Gradle 6.7 소스 코드 기본 데이터 생성 public record Person(int no, String name, int age, Nation nation, int gend..
테스트 스팩 Windows 10 Intellij IDEA Ultimate Java 15 Gradle 6.7 JUnit 5 상황 Java 15에서 Preview로 사용중인 record 라는 키워드를 사용해서 데이터 클래스를 만들고 이 클래스를 테스트하려고 한다. 설정 File -> Project Structure -> Project Settings -> Project -> Project language level을 사용하려는 Java의 Preview 버전으로 설정한다. 이렇게 해야 코드 상에서 Preview 버전의 문법을 사용할 수 있다. build.gradle 파일에 아래의 설정을 추가한다. compileJava { options.compilerArgs += ['--enable-preview'] } co..
- Total
- Today
- Yesterday
- flatMapToDouble
- 자바
- Java8
- 개발자
- #예제 #example #가계부 #Account Book
- java
- flatMapToInt
- 변경사항
- 목표
- #배열 #array #map 함수
- 토이 프로젝트
- 다짐
- 충북 콕! 콕!
- Stream API
- IntelliJ
- 중간 연산
- 계획
- flaMap
- flatMapToLong
- lambda
- 스트림
- jdk14
- 람다
- import문
- 회고
- mapToObj
- 익명 클래스
- modern java
- #React #ReactJS #리액트
- java14
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |