공부 기록들

    우아한 테크코스 한 달 생활기

    우아한 테크코스 한 달 생활기 정신없이 과제를 수행하다 보니 한 달 반이나 지나있었다. 정신이 없었던 것이 아니라, 생각 없이 지내온 것이 아닐까 하는 의문이 들었다. 하루하루를 곱씹으면 시간이 잘 가지 않는다. 반면, 아무 생각 없이 지내면 하루가 쏜살같이 지나간다는 것을 살아오면서 배웠다. 괜히 지금까지의 생활을 잘 보냈는지에 대한 불안감이 생긴다. 무엇을 하며 시간을 보냈는가 미션을 진행하며 대부분의 시간을 보냈다. 페어와 함께일 때는 남는 저녁 시간에도 미션에 대해 고민했다. 페어와 깨지고 난 뒤에는 오직 오전과 낮에만 수행했다. 남은 저녁 시간에는 필독서와 미션을 진행하면서 생긴 의문점들을 찾아보고 정리했다. 나름 알차게 보낸 것 같은데 대체 어디서 불안감이 스멀스멀 올라오는 것일까? 내 생활 ..

    [모던 자바 인 액션 스터디] 8장 컬렉션 API 개선

    8. 컬렉션 API 개선 Arrays.asList() 나 List.of 나 추가를 하려고 하면 UnsupportedOperationException이 발생하게된다. Set은 Set.of 로 생성한다. Map은 다음과 같이 2가지 방법이 있다. Map ageOfFriends = Map.of("Raphael", 30, "Olivia", 25); Map ageOfFriends = Map.ofEntries(entry("Raphael", 30), entry("Olivia", 25)); 자바 8에서는 List와 Set 인터페이스에 다음과 같은 메서드를 추가했다. removeIf : 프레디케이트를 만족하는 요소를 제거한다. List나 Set을 구현하거나 그 구현을 상속받은 모든 클래스에서 이용할 수 있다. repla..

    [모던 자바 인 액션 스터디] 7장 병렬 데이터 처리와 성능

    7장. 병렬 데이터 처리와 성능 컬렉션에 parallelStream을 호출하면 병렬 스트림이 생성된다. public long sequentialSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .reduce(0L, Long::sum); } n이 커진다면 병렬로 처리하는 것이 좋을텐데 한 번 처리해보자. public long parallelSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .parallel() .reduce(0L, Long::sum); } 순차 스트림에 parallel()메서드를 호출하면 기존의 함수형 리듀싱 연산이 병렬로 처리된다. 순차 스트림에 parallel()을 ..

    [모던 자바 인 액션 스터디] 6장 스트림 활용

    6. 스트림으로 데이터 수집 컬렉터로 스트림의 항목을 컬렉션으로 재구성할 수 있다. long howManyDishes = menu.stream().collect(Collectors.counting()) 다음과 같이 말이다. 물론 이 코드는 menu.stream().count()로 생략할 수 있다. Comparator dishCaloriesComparator = Comparator.comparingInt(Dish:;getCalories); Optional mostCalorieDish = menu.stream().collect(maxBy(dishCaloriesComparator)); maxBy, minBy를 이용해서 스트림의 최댓값과 최솟값을 계산할 수 있다. summingInt는 객체를 int로 매핑하는 ..

    [모던 자바 인 액션 스터디] 5장 스트림 활용

    5. 스트림 활용 filter 메서드는 Predicate를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다. dictinct는 중복을 필터링한다. (고유 여부는 hashCode와 equals로 결정된다) takeWhile 를 이용하면 해당 프레디케이트가 false면 동작을 멈춘다. List filteredMenu = specialMenu.stream() .takeWhile(dish -> dish.getCalories() < 320) .collect(toList()); specialMenu 내부에 칼로리 오름차순으로 정렬이 되어있다면 해당 프레디케이트가 true일 동안만 작동한다. filter 였으면 다 돌았을 것이다. dropWhile은 해당 프레디케이트가 처음으로 거짓이 되..

    [모던 자바 인 액션 스터디] 4장 스트림 소개

    4_스트림 소개 스트림은 자바 8 API에 새로 추가된 기능이다. 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. stream()을 parallelStream()으로 바꾸면 코드를 멀티코어 아키텍처에서 병렬로 실행할 수 있다. 스트림은 제어 블록 없이 선언형으로 코드를 구현할 수 있다. 빌딩 블록 연산을 연결해서 복잡한 데이터 처리 파이프라인을 만들 수 있다. 스트림은 '데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소'로 정의 가능하다. 스트림에서는 파이프라이닝 덕분에 게으름, 쇼트서킷같은 최적화를 얻을 수 있다. 데이터를 언제 계산하느냐가 컬렉션과 스트림의 가장 큰 차이..

    순차적 스트림, 병렬 스트림 그리고 findAny와 findFirst 에 대해

    순차적 스트림, 병렬 스트림 그리고 findAny와 findFirst 에 대해 지난번 스터디 때에 손너잘이 밑의 제 코드에 대해서 스트림은 비내리듯이 병렬로 진행되기 때문에 findFirst를 사용하여도 첫 값이 보장이 안되기에 findAny를 사용해야할 것 같다고 지적을 했습니다. 그렇다면 왜 두 메서드를 따로 나뒀을까 싶어서 찾아 봤습니다. public enum Grade { A((score) -> score >= 95), B((score) -> score >= 90), C((score) -> score >= 80), D((score) -> score >= 70), F((score) -> true); Predicate gradePredicate; Grade(Predicate predicate) { g..

    함수형 인터페이스를 이용할 때 착각했던 점

    함수형 인터페이스를 이용할 때 착각했던 점 정말 멍청했다. 모던 자바 인 액션 2번째 읽는건데 아무 생각없이 읽었었나 보다. 손너잘이 망각한 내 뇌를 리마인드 시켜줬다. Predicate p = (i) -> i % 2 == 0; 다음과 같고 이를 실행하기 위해서는 test메서드를 사용한다. 나는 함수형 인터페이스를 특별 취급하여 생각했다. 이 또한 인터페이스인데 말이다. 내가 선언해준 식이 해당 test 추상 클래스 내부로 들어가는줄 알았다. 그런게 전혀 아닌데 말이다. Comparator c = new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }; 위의 new Compar..