Java 8

병렬 데이터 처리와 성능

병렬 스트림 stream() 대신 parallelStream()을 사용하면 병렬 스트림이 생성된다. 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림으로 서 멀티코어 프로세서가 각각의 청크를 처리하도록 할당할 수 있다. 순차 스트림을 병렬 스트림으로 변경 public logn parallelSum(Long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .parallel()

스트림으로 데이터 수집

Collector Collector 인터페이스 구현은 스트림 요소를 어떤 식으로 도출할지 지정한다. Collector 인터페이스 메서드를 어떻게 구현하느냐에 따라 스트림에 어떤 리듀싱 연산을 수행할지 결정된다. Collectors 유틸리티 클래스는 자주 사용하는 컬렉터 인스턴스를 손쉽게 생성할 수 있는 정적 팩토리 메서드를 제공한다. Collectors에서 제공하는 메서드의 기능은 크게 세 가지로 구분할 수 있다. 스트림 요소를 하나의 값으로 리듀스하고 요약 요소 그룹화 요소 분할 리듀싱과 요약 counting - 개수를 카운트한다 maxBy, minBy - 최대 혹은 최소를 만족하는 요소를 찾는다 summingInt - 객체를 int로 매핑하는 인수를 받아 합을 계산한다 averagingInt - 객체..

스트림 활용

필터링 프리디케이트로 필터링 프리디케이트 필터링 예시 코드 List vegetarianMenu = menu.stream() .filter(Dish::IsVegeTarian) .collect(toList()); 고유요소 필터링 중복을 제거 할 수 있도록 distinct() 도 지원 고유필터 예시 코드 List numbers = Arrays.asList(1,2,1,3,3,2,4); numbers.stream() .filter(i -> i % 2 == 0) .distinct() 슬라이싱 프리디케이트 슬라이싱 컬랙션 리스트가 정렬이 되어 있어야한다. takeWhile : 조건이 거짓이 될때 까지 수행하며 참인 값을 리턴 dropWhile : 조건이 거짓이 될때 까지 수행하며 참인 값을 버리고 나머지를 리턴 스트..

스트림

자바8 버전부터 API에 추가된 새로운 기능으로 데어터처리시 코드 구현이 아닌 선언형으로 컬렉션 데이터를 처리할 수 있다. parallelStream()을 사용한다면 멀티스레드 코드로 구현하지 않더라도 병렬처리가 가능하다. 기존의 자바 코드 8버전 미만 List lowCaloricDishes = new ArrayList(); for (Dish dish : menu) { if (dish.getCalories() < 400) { lowCaloricDishes.add(dish); } } Collections.sort(lowCaloricDishes, new Comparator() { public int compoare(Dish dish1, Dish dish2) { return Integer.compare(dis..

[JAVA] HashSet

HashSet HashSet은 Set 인터페이스를 상속 받아서 구현한 클래스입니다. Set의 특징을 이어받았기 때문에 중복된 값을 가질 수 없습니다. null 값 또한 1개만 가질 수 있습니다. 정보들은 비선형 구조로 저장되기 때문에 순서가 없으며 index를 사용하지 않습니다. Hashset은 객체를 저장하기 전에 저장할 객체의 hashCode() method를 호출하여 hashCode를 알아내 저장되어있는 객체들의 hashCode와 비교합니다. 같은 hashCode를 가지는 값이 있다면 equals() 함수를 사용하여 두 객체를 다시 한번 비교하는 과정을 거쳐 true 값을 가지게 되면 중복된 객체로 판단하여 저장하지 않습니다. 사용법 HashSet set1 = new HashSet();//선언 파라..

주제 정리 2021.08.13

[TIL]Day 6 (Transaction)

Hash라는 것에 대해서 개념적으로만 알고 있고 프로젝트에서 사용을 하지 않아서 JAVA 언어로 실제 사용하는 방식에 대해서는 모르는 상태였으나 스터디를 통해서 팀원의 코드를 리뷰하며 방식에 대해서 알게 되었고 추가적인 학습을 통해서 사용법을 익힌것 같다. 하지만 아직까지는 Java의 클래스들의 기본 method에 대해서 모르는 것이 많았다. HashMap에서 getOrDefault() method를 통하여서 if문으로 HashMap안에 키값이 존재하는지 확인을 하지 않아도 되는 것과 keySet() method를 사용하여 HashMap의 key 값을 따로 저장하지 않더라도 사용할 수 있는 것을 알게 되었다. 클래스 내부 method를 다 암기 할 수는 없지만 클래스를 사용할 때 찾아서 한 번쯤은 읽어보..

TIL 2021.08.13

Object 객체 탐구

모든 클래스의 부모 클래스로서 자바에서 최상위에 클래스이다. toString() 모든 하위 클래스에서 메서드를 재정의 해야한다. 호출하지 않아도 다른 곳에 쓰일 수 있다. → 디버그, 오류메세지 로깅 시 자동으로 호출 할 수 있다. 간결하고 가독성이 좋은 형태로 정보를 반환시켜야 한다. 객체의 주요 정보를 모두 반환하는 것이 좋다. equals() 주소 값을 비교하는 == 연산과는 다르게 두 대상의 값 자체를 비교한다. 클래스는 call by reference이기 때문에 생성시 주소값이 부여되므로 같은 값을 부여하더라도 주소값이 다를 수 있어 버그가 발생할 수 있기 때문에 객체 내부의 값 자체를 비교하기 위해서 사용한다. hashCode() 객체의 주소값을 변환하여 생성한 객체 고유의 정수 값 Strin..

주제 정리 2021.08.07

디자인 패턴 23가지

23가지의 개발 패턴 정리하기 (참고 https://refactoring.guru/) Creational Patterns (생성 패턴) Factory Method 객체 생성을 위한 인터페이스를 제공하지만 클래스의 인스턴스 생성의 타입을 서브클래스가 결정하도록하는 방식 패턴 없이 발생할 수 있는 문제 새로운 서브 클래스 추가의 필요시 전체적인 코드의 수정이 필요하다. 서브 클래스의 지속적인 추가시 지속적으로 발생할 가능성이 있다. 해결법 new 연산자 사용 대신에 factory method로 대체하여 사용한다. new 연산자는 factory method에서 호출 시킨다. factory는 공통된 인터페이스를 상속하고 있어야한다. Abstract Factory 추상화를 통해 구제척인 클래스를 특정하지 않고 비..

주제 정리 2021.08.07
320x100