본문 바로가기
728x90

자바15

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.
Item 46. 스트림에서는 부작용 없는 함수를 사용하라 스트림 패러다임의 핵심은 계산을 일련의 변환(transformation)으로 재구성하는 것이다. 여기서 각 변환은 가능한 이전 단계의 결과를 받아서 처리하는 순수 함수여야 한다. 이를 위해서는 스트림 연산에 건네는 함수 객체는 모두 side-effect가 없어야 한다. 아래의 예시를 보자. 1 2 3 4 5 6 7 Map freq = new HashMap(); try (Stream words = new Scanner(file).tokens()) { words.forEach(word -> { freq.merge(word.toLowerCase(), 1L, Long::sum); }) } Colored by Color Scripter cs 이 코드는 스트림을 가장한 반복적 코드다. 위에서 명시했듯 스트림에서 사.. 2022. 3. 2.
5장. 스트림 활용 스트림은 내부 반복을 사용하고 있기 때문에 스트림 API가 내부에서 데이터를 처리하는 방식을 관리한다. 따라서 내부적으로 다양한 최적화가 이루어질 수 있다. 이번 장에서는 자바 8, 9에서 추가된 스트림 연산을 살펴본다. 필터링 스트림에서 필요한 요소만 선택하는 방법이다. 프레디케이트로 필터링 스트림 인터페이스에서 지원하는 filter 메서드는 프레디케이트를 인수로 받아 프레디케이트와 일치하는 요소를 포함하는 스트림을 반환한다. 1 2 3 4 List oddNumbers = numbers.stream() .filter(number -> number % 2 != 0) .collect(toList()); Colored by Color Scripter cs 고유 요소 필터링 고유(unique)한 값만 추출하길.. 2022. 2. 18.
1장 - 자바 8, 9, 10, 11: 무슨 일이 일어나고 있는가. 스트림 처리 스트림은 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임이다. 자바 8에는 java.util.stream 패키지에 스트림 API가 추가되었다. 스트림 패키지에 정의된 Stream는 T 형식으로 구성된 일련의 항목을 의미한다. 스트림 API는 파이프라인을 만드는 데 필요한 메서드들을 제공한다. 스트림 API는 작업을 고수준으로 추상화해서 일련의 스트림으로 만들어 처리할 수 있다. 또 한 스트림 파이프라인을 이용해 입력 부분을 여려 CPU 코어에 쉽게 할당할 수 있다. 스레드라는 복잡한 작업을 사용하지 않고도 병렬성을 얻을 수 있다. 스트림 API는 연산의 동작을 파라미터화할 수 있는 코드를 전달한다는 사상에 기초한다. 동작 파라미터화(behavior parameterization)로.. 2022. 2. 12.
728x90