본문 바로가기

분류 전체보기

(129)
Chapter 9 리팩터링, 테스팅, 디버깅 이번장에서는 기존 코드를 이용해 새로운 프로젝트를 시작하는 상황을 가정한다. 기존 코드를 람다 표현식을 사용해 어떻게 리팩터링해야 하는지 설명할 것이다. 람다 표현식으로 전략, 템플릿 메서드, 옵저버, 의무체인, 팩토리 등의 객체지향 디자인 패턴을 간소화 시킬지 살펴보자. 9.1 가독성과 유연성을 개선하는 리팩터링 1 - 코드 가독성 개선 코드 가독성이 좋다는것 : 어떤 코드를 다른 사람도 쉽게 이해할 수 있음. 코드의 문서화를 잘하고, 표준 코딩 규칙을 준수하는 등 노력 2 - 익명 클래스를 람다 표현식으로 리팩터링 하나의 추상 메서드를 구현하는 익명 클래스는 람다 표현식으로 리팩터링 ex) Runnable 객체를 만드는 익명 클래스와 이에 대응하는 람다 표현식 Runnable r1 = new Runn..
xUnit 21장 - 24장 21장. 셈하기 할일 목록 테스트메서드 호출하기 먼저 setUp 호출하기 나중에 tearDown 호출하기 테스트메서드가 실패하더라도 tearDown 호출하기 테스트 여러개 실행하기 수집한 결과를 출력하기 WasRun에 로그 문자열 남기기 테스트가 작동하도록 하려면 예외를 잡아야함. 기능을 구현하다 실수하면 예외가 보고되지 않으므로 실수를 알 방법이 없기 때문에. 일반적으로 테스트 구현 순서는 중요. 나에게 가르침을 주고 확신이 드는것을 선택한다. 우린 여러 테스트를 실행하고 그 결과를 보기를 원한다. "5개 테스트가 실행됨, 2개 실패, TestCaseTest.testFooBar-ZeroDivide Exception, MoneyTest.testNegarion-AssertionError" 그후 우리는 에러..
Part 3 스트림과 람다를 이용한 효과적 프로그래밍 - Chapter 8 컬렉션API 개선 이번장에서는 자바8, 9 에서 추가된 새로운 컬렉션 API 기능을 소개한다 8.1 컬렉션 팩토리 Arrays.asList() 팩토리 메서드를 이용하면 코드를 간단하게 줄일 수 있다. List friends = Arrays.asList("Raphael", "Olivia", "Thibaut"); 고정된 리스트를 만들었으므로 요소를 갱신할 수 있지만 새 요소를 추가하거나 삭제는 불가능하다. UnsupportedOperationException 예외발생. 다른 방법으로 갱신할 수있는 배열을 만들순 없을까? - 리스트를 인수로 받는 HashSet 생성자를 사용할 수 있다. Set friends = new HashSet(Arrays.asList("Raphael, "Olivia", "Thibaut")); 또는 스트림..
18장-20장 xUnit 18장. xUnit으로 가는 첫걸음 테스트 툴을 만드는 과정에서 만들어지는 테스트 툴 자체를 사용하는 것. - 스스로 자신의 뇌를 수술하는것과 비슷할것이다. - 자기참조 self-referential 프로그래밍에 대한 전산학 실습 우선 테스트 케이스를 만들고 테스트 메서드를 실행할 수 있어야 함. 테스트케이스를 작성하기 위해 사용할 프레임워크를 테스트하기 위한 테스트 케이스를 작성해야 한다. 할일목록 테스트메서드 호출하기 먼저 setUp 호출하기 나중에 tearDown 호출하기 테스트 메서드가 실패하더라도 tearDown 호출하기 여러개의 테스트 실행하기 수집된 결과를 출력하기 첫번째 원시테스트에는 테스트 메서드가 호출되면 true, 그렇지 않으면 false를 반환할 작은 프로그램이 필요하다. - 테스트..
Chapter7 병렬 데이터 처리와 성능 지금까지 스트림 인터페이스를 이용해 데이터 컬렉션을 선언형으로, 내부 반복으로 스트림 요소의 처리를 제어하는 것을 살펴보았다. 이번장에서는 순차스트림을 병렬 스트림을 바꾸는 것을 설명한다. 7.1 병렬 스트림 : 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림 컬렉션에 parallelStream을 호출하면 병렬스트림이 생성된다. ex) 숫자 n을 인수로 받아 1부터 n까지 모든 숫자의 합계를 반환하는 메서드를 구현해보자. - 숫자로 이루어진 무한스트림-> 인수로 주어진 크기로 스트림을 제한->두 숫자를 더하는 리듀싱작업 public long sequentialSum(long n) { return Stream.iterate(1L, i -> i+1) // 무한 자연수 스트림생성 ..
13-17장 13장 진짜로 만들기 $5 + 10CHF = $10 (환율이 2:1 일 경우) $5 + $5 = $10 데이터 중복도 제거하자. public void testSimpleAddition() { Money five = Money.dollor(5); Expression sum = five.plus(five); Bank bank = new Bank(); Money reduced = bank.reduce(sum, "USD"); assertEquals(Money.dollar(10), reduced); } Bank Money reduce (Expression source, String to) { return Money.dollar(10); } 이전에는 상수를 변수로 치환하며 가짜구현을 진짜 구현으로 거꾸로 작업해나가..
Chapter6 스트림으로 데이터 수집 중간연산은 스트림 파이프라인을 구성하며 스트림의 요소를 소비하지 않음. 반면 최종연산은 스트림의 요소를 소비해서 최종결과를 도출. 이전 챕터의 예제에서는 toList 로 스트림 요소를 리스트로만 변환했지만 이번 챕터에서는 reduce가 그랬던것처럼 collect 역시 다양한 요고 누적방식을 인수로 받아 스트림을 최종결과로 도출하는 리듀싱 연산을 수행할 수 있음을 설명한다. 다양한 요소 누적 방식은 Collector 인터페이스에 정의되어 있다. Collection, Collector, collect를 헷갈리지 않게 주의하자. collect와 컬렉터로 구현할 수 있는 질의 예제 통화별로 트랜젝션을 그룹화한 다음에 해당 통화로 일어난 모든 트렌잭션 합계를 계산 (Map 반환) 트렌잭션을 비싼 트랜잭션과 저렴한..
Chapter5 스트림 활용 데이터 컬렉션 외부반복 코드를 filter와 collect 연산을 이용해 내부 반복으로 처리 List vegetarianDishes = new ArrayList(); for(Dish d: menu) { if(d.isVegetarian()){ vegetarianDishes.add(d); } } //filter 메서드에 필터링 연산을 인수로 넘겨줌 import static java.util.stream.Collectors.toList; List vegerarianDishes = menu.stream() .filter(Dish::isVegetarian) .collect(toList()); 이 장에서는 스트림 API 가 지원하는 다양한 연산을 알아볼것이다. 5.1 필터링 프레디케이트로 필터링 filter 메서드..