본문 바로가기

전체 글669

[독서 기록] 모던 자바 인 액션 8장 컬렉션 API 개선 List friends = new ArrayList(); friends.add("R"); friends.add("O"); List friends = Arrays.asList("R, "O"); 하지만 문제는 불변 객체로 생성된다는 점이다. 변경 시도시엔 UnsupportedOperationException 발생 ! - 276p List 인터페이스를 조금 더 살펴보면 List.of의 다양한 오버로드 버전이 있다는 사실을 알 수 있다. static list of(E e1, E e2, E e3, E e4) static list of(E e1, E e2, E e3, E e4 E e5) 왜 다음처럼 다중 요소를 받을 수 있도록 자바 API를 만들지 않은 것인지 궁금할 것이다. static List of(E... e.. 2023. 1. 9.
[독서 기록] 모던 자바 인 액션 7장 병렬 데이터 처리와 성능 단순 더하기 연산을 병렬 스트림으로 처리하기 public long parallelSum(long n) { return Stream.iterate(1L, i->i + 1) .limit(n) .parallel() .reduce(0L, Long::sum); } 리듀싱 연산으로 스트림의 모든 숫자를 더한다. 마지막으로 리듀싱 연산으로 생성된 부분 결과를 다시 리듀싱 연산으로 합쳐서 전체 스트림의 리듀싱 결과를 도출한다. - 243p 내부 반복을 이용하면 명시적으로 다른 스레드를 사용하지 않고도 스트림을 병렬로 처리할 수 있다. 간단하게 스트림을 병렬로 처리할 수 있지만 항상 병렬 처리가 빠른 것은 아니다. 병렬 소프트웨어 동작 방법과 성능은 직관적이지 않을 때가 많으므로 병렬 처리를 사용했을 때 성능을 직접 측.. 2023. 1. 9.
자바 자료 구조의 특징 간단 정리 - List, Set, Queue, Map + Hash, Linked + Tree 자바 자료 구조는 - List : 중복 허용 - Set : 중복 허용 x - queue : 순서가 정해지고 모든 요소가 한 번만 처리됨 - map : key와 value Hash : - unordered, unsorted - use hashcode() => 순서도 없고 정렬도 없다 ! Linked : - ordered - unsorted => 순서 하나는 확실하다 ! Tree : - sorted => 정렬 하나는 확실 ! => 정렬되어 있기 때문에 Navigable을 implement하고 있다. -> 부분 자르기와 sub로 가져오는 것이 가능하다. 2023. 1. 9.
[독서 기록] 모던 자바 인 액션 6장 스트림으로 데이터 수집 통화별로 트랜잭션을 그룹화한 코드 List transactions = Arrays.asList( new Transaction(), new Transaction(), new Transaction() ); Map transactionsByCurrencies = new HashMap(); for (Transaction transaction : transactions){ Currency currency = transaction.getCurrency(); List transactionsForCurrency = transactionsByCurrencies.get(currency); if (transactionsForCurrency == null) { transactionsForCurrency = new ArrayL.. 2023. 1. 8.
[독서 기록] 모던 자바 인 액션 4장 스트림 소개, 5장 스트림 활용 4장 스트림 소개 스트림은 자바 8 API에 새로 추가된 기능이다. 스트림을 이용하면 선언형(즉, 데이터를 처리하는 임시 구현 코드 대신 질의로 표현할 수 있다)으로 컬렉션 데이터를 처리할 수 있다. 일단 스트림이 데이터 컬렉션 반복을 멋지게 처리하는 기능이라고 생각하자. 또한 스트림을 이용하면 멀티 스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. - 136p 다음은 기존 코드다 List lowCaloricDishes = new ArrayList(); for (Dish dish : menu) {// 누적자로 요소 필터링 if (dish.getCalories() < 400) { lowCaloricDishes.add(dish); } } Collections.sort(lowCalori.. 2023. 1. 8.