목록Language/Java (24)
devseop08 님의 블로그
8.1 컬렉션 팩토리자바 9에서는 작은 컬렉션 객체를 쉽게 만들 수 있는 몇 가지 방법을 제공한다.왜 이와 같은 기능이 필요한 지 살펴보고 새 팩토리 메서드를 사용하는 방법을 알아본다.자바에서 적은 요소의 리스트를 만드는 일반적인 방법List friends = new ArrayList();friends.add("Raphael");friends.add("Olivia");friends.add("Thibaut");Arrays.asList() 팩토리 메서드 이용List friends = Arrays.asList("Raphael", "Olivia", "Thibaut");고정 크기의 리스트를 만들었으므로 요소를 갱신할 수는 있지만 새 요소를 추가하거나 요소를 삭제할 순 없다.요소를 추가하거나 삭제하려 하면 Unsu..
스트림으로 데이터 컬렉션 관련 동작을 얼마나 쉽게 병렬로 실행할 수 있는지 알아보자스트림을 이용하면 순차 스트림을 병렬 스트림으로 자연스럽게 바꿀 수 있는데 이것이 어떻게 가능한 것인지와 포크/조인 프레임워크와 내부적인 병렬 스트림 처리는 어떤 관계가 있는지 살펴보자여러 청크를 병렬로 처리하기 전에 우선 병렬 스트림의 요소를 여러 청크로 분할하는 방법에 관해 알아보자7.1 병렬 스트림7.1.1 순차 스트림을 병렬 스트림으로 변환하기컬렉션에 parallelStream 메서드를 호출하면 병렬 스트림이 생성된다.병렬 스트림이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림을 말한다.병렬 스트림을 이용하면 모든 멀티코어 프로세서가 각각의 청크를 처리하도록 할당할 수 있다.순차 리듀..
클래스 파일의 구조모든 클래스 파일은 각각 하나의 클래스 또는 인터페이스를 정의한다.(단, package-info.class와 module-info.class는 특정 클래스나 인터페이스를 정의하지 않는다. 대신 해당 패키지와 모듈에 대한 정보를 기술)반면 클래스나 인터페이스를 꼭 파일에 담아둘 필요는 없다. 동적으로 생성하여 클래스 로더에 직접 제공할 수도 있다.일단 클래스나 인터페이스가 따라야 하는 형식을 '클래스 파일 형식'이라고 지칭하자클래스나 인터페이스가 디스크에 파일 형태로 존재할 필요는 없다.클래스 파일은 바이트를 하나의 단위로 하는 이진 스트림 집합체다.각 데이터 항목이 정해진 순서에 맞게, 구분 기호 없이 조밀하게 나열 => 클래스 파일 전체가 낭비되는 공간 없이 프로그램을 실행하는데 꼭 ..
스트림 최종 연산 reduce가 그랬던 것처럼 collect 역시 다양한 요소 누적 방식을 인수로 받아서 스트림을 최종 결과로 도출하는 리듀싱 연산을 수행할 수 있다.다양한 요소 누적 방식은 Collector 인터페이스에 정의되어 있다.6.1 컬렉터란 무엇인가?Collectors 클래스의 toList 메서드는 스트림의 각 요소를 리스트로 만드는 작업을 수행하는 Collector 인터페이스의 구현을 반환한다.collect 메서드의 인수로 주어진 Collector 인터페이스 구현은 스트림의 요소를 어떤 식으로 도출할 지 결정한다.Collectors 클래스의 groupingBy 메서드는 각 키 버킷 그리고 각 키 버킷에 대응하는 요소 리스트를 값으로 포함하는 맵을 만드는 작업을 수행하는 Collector 인터..
5.1 필터링5.1.1 프레디케이트로 필터링스트림 인터페이스는 filter 메서드를 지원한다.filter 메서드는 프레디케이트를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다.List vegetarianMenu = menu.stream() .filter(Dish::isVegitarian) .collect(toList());5.1.2 고유 요소 필터링스트림은 고유 요소로 이루어진 스트림을 반환하는 distinct 메서드도 지원한다.고유 여부는 스트림에서 만든 hashCode, equals로 결정된다.List numbers = Array.asList(1, 2, 1, 3..
4.1 스트림이란 무엇인가?스트림은 자바 8 API에 새로 추가된 기능이다.스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다, 즉 데이터를 처리하는 임시 구현 코드 대신 질의로 표현할 수 있다는 것이다.스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다.다음 예제는 저칼로리의 요리명을 반환하고 칼로리를 기준으로 요리를 정렬하는 자바 7 코드다.List lowCaloricDishes = new ArrayList();for (Dish dish : menu){ if(dish.getCalories() (){ public int compare(Dish dish, Dish dish2){ return Integer.compare(dish1, ..
1.1 자바 역사의 흐름자바 8 등장 이전까진, 멀티 코어를 사용하는 병렬 실행 환경을 잘 활용하지 못했다.하나의 코어 외의 나머지 코어를 활용하려면 쓰레드를 사용해야 한다고 했지만, 쓰레드를 사용하면 관리가 어렵고 많은 문제를 야기했다.자바는 이러한 병렬 실행 환경을 쉽게 관리하고 에러가 덜 발생하는 방향으로 진화하려 노력했다.자바 8에서는 병렬 실행을 새롭고 단순한 방식으로 접근할 수 있는 방법을 제공한다.자바 9에서는 리액티브 프로그래밍이라는 병렬 실행 기법을 지원한다.RxJava(리액티브 스트림 툴킷)를 표준적인 방식으로 지원한다.자바 8은 자바 역사의 흐름에 있어서, 멀티코어 프로세서의 쉽고 효과적인 활용과 간결한 코드의 작성이라는 요구 사항을 기반으로 한다.이러한 요구 사항을 충족하고자 자바 ..
자바 8부터는 익명 클래스가 아닌 람다를 이용하여 동작 파라미터화를 쉽게 사용할 수 있게 되었다.동작 파라미터화는 계속해서 변화하고 추가되는 요구사항에 유연하게 대응하는 코드를 구현 할 수 있도록 도와준다.동작 파라미터화는 정의한 코드 블록을 다른 메서드로 전달할 수 있도록 한다. => 동작 파라미터화를 이용하면 더 유연하고 재사용할 수 있는 코드를 만들 수 있다.익명 클래스를 통해서도 동작 파라미터화를 구현할 수 있지만, 코드가 깔끔하지 않다.3.1. 람다란 무엇인가?람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것.람다 표현식에 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다.람다의 특징익명 : 보통의 메서드와 달리 이름이 없으므로 익명..