분류 전체보기

    [모던 자바 인 액션 스터디] 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..

    로또 구현 피드백 정리

    로또 구현 피드백 정리 Custom Exception 생성 시에 어떤 값으로 인해 예외가 던져졌는지 보여주자 계산 과정에서 double를 리턴한다고 해당 계산 재료를 미리 double로 던져두면 혼동이 생길 수도 있으니깐 int로 일단 받고 나중에 (double)로 캐스팅하는 것이 좋다. 이번 구현을 통해 사용해본 것 일급 컬렉션 Enum 사용법 TreeSet Stream 원시 값 포장

    [모던 자바 인 액션 스터디] 3장 람다 표현식

    3주간 스터디를 진행하게 됐다. 안그래도 이전에 쭉 정리했던 자바 인 액션 책을 다시 읽어보려던 참이었는데 타이밍 맞게 스터디가 있어 참여하게 됐다. 나름 간단하게 정리하려고 노력했다. 람다 표현식 정리 람다 표현식은 익명 함수를 단순화한 것 Comparator byWeight = new Comparator () { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } }; => Comparator byWeight = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()); 다음과 같이 익명 함수를 단순화 시킨다. 어디에서 람다를 사용..

    [Java] 강한참조와 약한참조 그리고 WeakHashMap 에 대해

    강한참조와 약한참조 그리고 WeakHashMap 에 대해 강한 참조 new 할당 후 새로운 객체를 만들어 해당객체를 참조하는 방식이다. 참조가 해제되지 않는 이상 GC의 대상이 되지 않는다. 약한 참조 Integer prime = 1; WeakReference weak = new WeakReference(prime); 다음과 같이 WeakReference Class를 이용하여 생성이 가능하다. prime == null이 되면(해당 객체를 가리키는 참조가 WeakReference 뿐일 경우) GC 대상이 된다. Fruit apple; Fruit orange; Fruit strong; WeakReference weak; public void Test() { apple = new Fruit("apple"); ..

    [Java] subList()와 subSet() 에 대해

    subList()와 subSet() 에 대해 List beforeList = new ArrayList(Arrays.asList(1, 2, 3, 4, 5)); List afterList = beforeList.subList(0, 2); afterList.forEach(System.out::println); /*출력 1 2 subList()는 List를 잘라주는 메서드이다. 인수로 int fromIndex, int toIndex를 갖는다. 내부구현은 다음과 같이 이루어져 있다. (ArrayList 기준) public List subList(int fromIndex, int toIndex) { subListRangeCheck(fromIndex, toIndex, size); return new SubList(t..

    [Java] LinkedHashMap의 원리에 대해

    LinkedHashMap의 원리에 대해 HashMap을 순차적으로 읽으면 어떤 순서로 읽는가 ? 이 글은 이곳 의 글을 그대로 가져온 글입니다. HashMap은 Node를 꺼낼 때 넣은 순서를 보장하지 않는다고 합니다. 그렇다면 Node 순회에 대해서 읽는 순서는 어떻게 될까요 Map interface에서 아래와 같은 문구를 발견하였습니다. The {@code Map} interface provides three collection views, which allow a map's contents to be viewed as a set of keys, collection of values, or set of key-value mappings. The order of a map is defined a..