book
-
[JPA] 15장. 고급 주제와 성능 최적화book/자바 ORM 표준 JPA 프로그래밍 2020. 11. 28. 18:56
15.1 예외처리 1.1 JPA 표준 예외 정리 JPA 표준 예외들은 javax.persistence.PersistenceException의 자식 클래스다. 그리고 이 예외 클래스는 RuntimeException의 자식이다. 따라서 JPA 표준 예외들은 언체크 예외다. 언체크 예외 : 2020/08/21 - [study/java] - [JAVA] Exception JPA 표준 예외는 크게 2가지로 나눌 수 있다. - 트랜잭션 롤백을 표시하는 예외 - 트랜잭션 롤백을 표시하지 않는 예외 트랜잭션 롤백을 표시하는 예외는 심각한 예외이므로 복구해서는 안된다. 이 예외가 발생한 경우 트랜잭션을 강제로 커밋해도 커밋되지 않고 RollbackException이 발생한다. 1.2. 스프링 프레임워크의 JPA 예외 변..
-
CHAP7. 병렬 데이터 처리와 성능book/모던 자바 인 액션 2020. 8. 26. 23:56
7.1 병렬 스트림 스트림 인터페이스를 이용하면 아주 간단하게 요소를 병렬로 처리할 수 있다. 컬렉션에 parallelStream을 호출하면 병렬 스트림이 생성된다. 병렬 스트림이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림이다. 아래는 숫자 n을 인수로 받아서 1부터 n까지의 모든 숫자의 합계를 반환하는 메서드 구현 예제이다. public long sequentialSum(long n){ return Stream.iterate(1L, i -> i + 1) //무한 자연수 스트림 생성 .limit(n) // n개로 제한 .reduce(0L, Long::sum); //모든 숫자를 더하는 스트림 리듀싱 연산 7.1.1 순차 스트림을 병렬 스트림으로 변환하기 순차 스트림에 p..
-
CHAP6. 스트림으로 데이터 수집book/모던 자바 인 액션 2020. 8. 25. 19:24
6.1 컬렉터란 무엇인가? 이전 예제에서는 collect 메서드로 Collector 인터페이스 구현을 전달했다. Collector 인터페이스 구현은 스트림의 요소를 어떤 식으로 도출할지 지정한다. toList를 사용해서 리스트로 만들 수도 있고 groupingBy를 이용할 수도 있다. 6.1.1 고급 리듀싱 기능을 수행하는 컬렉터 collect로 결과를 수집하는 과정을 간단하면서도 유연한 방식으로 정의할 수 있다는 점이 컬렉터의 최대 강점이다. 스트림에 collect를 호출하면 스트림의 요소에 리듀싱 연산이 수행된다. Collector 인터페이스의 메서드를 어떻게 구현하느냐에 따라서 스트림에 어떤 리듀싱 연산을 수행할지 결정된다. Collectors 유틸리티 클래스는 자주 사용하는 컬렉터 인스턴스를 손쉽..
-
CHAP5. 스트림 활용book/모던 자바 인 액션 2020. 8. 23. 18:41
5.1 필터링 5.1.1 프레디케이트로 필터링 스트림 인터페이스는 filter 메서드를 지원한다. filter 메서드는 Predicate(boolean을 반환하는 함수)를 인수로 받아서 Predicate와 일치하는 모든 요소를 포함하는 스트림을 반환한다. List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) .collect(toList()); 위와 같이 채식 요리인지 확인하는 메서드 참조를 filter 메서드에서 사용할 수 있다. 5.1.2 고유 요소 필터링 스트림은 고유 요소로 이루어진 스트림을 반환하는 distinct 메서드도 지원한다. 고유의 여부는 hashCode와 equals에 의해 결정된다. List numbers = Arrays.a..
-
CHAP4. 스트림 소개book/모던 자바 인 액션 2020. 8. 11. 01:46
4.1 스트림이란 무엇인가? 스트림은 자바8 API에 새로 추가된 기능이다. 스트림을 이용하면 SQL처럼 선언형(즉, 데이터를 처리하는 임시 구현 코드 대신 질의로 표현할 수 있다)으로 컬렉션 데이터를 처리할 수 있다. 또한 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. 예를 들어보자 아래 코드는 저칼로리의 요리명을 반환하고 칼로리를 기준으로 요리를 정렬하는 자바7 코드다 //칼로리가 400 미만인 음식들을 lowCaloricDishes 리스트에 저장 List lowCaloricDishes = new ArrayList(); for(Dish dish : menu) { if(dish.getCalories() < 400) { lowCaloricDishes.add(dish); } ..
-
CHAP3. 람다 표현식book/모던 자바 인 액션 2020. 7. 28. 21:00
1. 람다란 무엇인가? 람다 표현식 : 메소드로 전달할 수 있는 익명 함수를 단순화한 것 특징 1. 익명 : 보통 메소드와 달리 이름이 없어 익명이라 표현한다. 2. 함수 : 람다는 메소드처럼 특정 클래스에 종속되지 않아 함수라고 부른다. 하지만 메소드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함한다. 3. 전달 : 람다 표현식을 메소드 인수로 전달하거나 변수로 저장할 수 있다. 4. 간결성 : 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. 람다는 자바 8 이전의 자바로 할 수 없었던 일을 제공하는 것은 아니고 동작 파라미터를 이용할 때 익명 클래스 등 판에 박힌 코드를 구현할 필요가 없이 더 쉽게 구현할 수 있다. - 파라미터 리스트 : Comparator의 com..
-
CHAP2. 동작 파라미터화 코드 전달하기book/모던 자바 인 액션 2020. 7. 24. 21:47
동작 파라미터화 : 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록. 이 코드 블록은 나중에 프로그램 실행 중에 호출한다. 즉, 자주 바뀌는 요구사항에 효과적으로 대응할 수 있다는 뜻 1. 변화하는 요구사항에 대응하기 1). 첫 번째 시도 : 녹색 사과 필터링 private enum Color { GREEN, RED } private static List filterGreenApples(List apples) { List result = new ArrayList(); for(Apple apple: apples) { if(Color.GREEN.equals(apple.getColor())) { result.add(apple); } } return result; } 위의 코드는 녹색 사과를 선택하도록 구..
-
CHAP1. 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?book/모던 자바 인 액션 2020. 7. 13. 00:40
자바 역사상 가장 큰 변화는 자바 8에서 일어났으며 획기적이고 생산성이 바뀌었다. 자바 9와 10 역시도 변화가 있었지만 자바 8만큼은 아니었다. 이러한 변화들을 통해 프로그램을 더 쉽게 구현할 수 있게 되었다. 자바8이 등장하기 이전에는 - 코어 중 하나만을 사용( 나머지 코어들은 유휴 상태로 두거나 다른 용도로 사용 ) - 멀티 코어를 사용하기 위하여 스레드를 사용 ( 스레드를 사용하면 관리가 어렵고 많은 문제가 발생할 수 있음 ) 위 두 가지의 특징을 가졌는데 자바 8이 등장한 후로는 스트림을 이용하여 병렬 실행을 접근하는 방법을 제공하게 되었다. JAVA 8 에서 제공하는 새로운 기술 1. 스트림 API - 기존에는 한 번에 한 항목을 처리했지만 하려는 작업을 SQL 쿼리문처럼 고수준으로 추상화하..