2018/10/02 7

자바8 - 8. 리팩토링, 테스팅, 디버깅

리팩토링, 테스팅, 디버깅 1. 가독성과 유연성을 개선하는 리팩토링 간결성, 유연성 1.1 코드 가독성 개선 가독성이 좋다 : 어떤 코드를 다른 사람도 쉽게 이해할 수 있다. 자바8에서 제공하는 코드 가독성에 도움을 주는 기능 코드의 장황함을 줄여서 쉽게 이해할 수 있는 코드를 구현할 수 있다. 메서드 레퍼런스와 스트림 API를 이용해서 코드의 의도를 쉽게 표현할 수 있다. 1.2 익명 클래스를 람다 표현식으로 리팩토링하기 ex) 익명 클래스 사용하는 이전 코드 Runnable r1 = new Runnable() { public void run() { System.out.println("Hello"); } }; ex) 람다 사용 Runnable r2 = () -> System.out.println("He..

JAVA 2018.10.02

자바8 - 7. Stream - 4

병렬 데이터 처리와 성능 포크/조인 프레임워크 스트림을 이용하면 순차 스트림을 병렬 스트림으로 자연스럽게 바꿀 수 있음. 1. 병렬 스트림 컬렉션에 parallelStream을 호출하면 병렬 스트림이 생성 ex) 모든 숫자 합계 메서드 public static long sequentialSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .reduce(0L, Long::sum); } ex) 전통 자바 예시 public static long iterativeSum(long n) { long result = 0; for( long i = 1L; i i +1) .limit(n) .parallel() .reduce(0L, Long::sum); } 병렬 ..

JAVA 2018.10.02

자바8 - 6. Stream - 3

스트림으로 데이터 수집 ex) 통화별로 트랜잭션을 그룹화한 코드(명령형 버전) Map transactionByCurrencies = new HashMap(); for (Transaction transaction : transactions) { Currency currency = transaction.getCurrency(); List transactionsForCurrency = transactionsByCurrencies.get(currency); if(transactionsForCurrency == null) { transactionsForCurrency = new ArrayList(); transactionByCurrencies.put(currency, transactionsForCurrency);..

JAVA 2018.10.02

자바8 - 5. Stream - 2

Stream 멀티 스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있음. ex) 저 칼로리 요리 반환 후 칼로리 기준으로 요리 정렬 (기존 코드) // 400칼로리보다 작은 요리 선택 List lowCaloricDishes = new ArrayList(); for(Dish d: menu) { if(d.getCalories() < 400) { lowCaloricDishes.add(d); } } // 익명 클래스로 요리 정렬 (칼로리 순) Collections.sort(lowCaloricDishes, new Comparator() { public int compare(Dish d1, Dish d2) { return Integer.compare(d1.getCalories(), d2.getCa..

JAVA 2018.10.02

자바8 - 4. Stream - 1

Stream 멀티 스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있음. ex) 저 칼로리 요리 반환 후 칼로리 기준으로 요리 정렬 (기존 코드) // 400칼로리보다 작은 요리 선택 List lowCaloricDishes = new ArrayList(); for(Dish d: menu) { if(d.getCalories() < 400) { lowCaloricDishes.add(d); } } // 익명 클래스로 요리 정렬 (칼로리 순) Collections.sort(lowCaloricDishes, new Comparator() { public int compare(Dish d1, Dish d2) { return Integer.compare(d1.getCalories(), d2.getCa..

JAVA 2018.10.02

자바8 - 3. 람다

Lambda 메서드로 전달할 수 있는 익명 함수를 단순화한 것. 특징 익명 : 이름 없는 메서드 함수 : 메서드처럼 특정 클래스에 종속되지 않음. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함. 전달 : 람다 표현식을 인수로 전달하거나 변수로 저장 간결성 : 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요X ex) 기존 코드 Comparator byWeight = new Comparator() { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } };ex) 개선한 람다 코드 Comparator byWeight = (Apple a1, Apple a2) -..

JAVA 2018.10.02

자바8 - 2. 동적 파라미터화

Behavior Parameterization 자주 바뀌는 요구사항에 효과적 대응 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미. ex) 어떤 기준으로 사과를 분류하는 메서드 (기존 방식) public static List filterApples (List inventory, String color, int weight, boolean flag) { List result = new ArrayList(); for(Apple apple : inventory) { if((flag && apple.getColor().equals(color)) || (!flag && apple.getWeight() > weight)) { result.add(apple); } } return result; } Lis..

JAVA 2018.10.02