본문 바로가기

분류 전체보기

(129)
10-12장 10장 흥미로운 시간 Money를 나타내기 위한 단 하나의 클래스만을 갖게 하기 위해 times() 구현을 동일하게 만들어야 하지만 명백한 방법이 없다. 일단 다시 Franc.times()가 Money를 반환하도록 고치고 테스트 해보자 Money 클래스를 추상클래스에서 바꾸고 times()도 바꿔서 다시 테스트. 에러 메세지다 toString() 작성하여 디버그 해보자. expected: study.tdd.demo.Franc@10f5e2f4 but was: study.tdd.demo.Money@1c0c55ca 문제는 equals 구현에 있다. 검사해야할 것은 클래스가 같은지가 아닌 currency가 같은지 여부이다. 보수적인 방법을 따르면 변경된 코드를 되돌려 다시 초록막대 상태로 돌아가야한다. equa..
7-10장 7장 사과와 오렌지 Franc 과 Dollar 비교하기 @Test public void testEquality() { assertTrue(new Dollar(5).equals(new Dollar(5))); assertFalse(new Dollar(5).equals(new Dollar(6))); assertTrue(new Franc(5).equals(new Franc(5))); assertFalse(new Franc(5).equals(new Franc(6))); assertFalse(new Franc(5).equals(new Dollar(5))); } 실패한다. 클래스의 금액과 클래스를 같이 체크해 주자. public boolean equals(Object object) { Money money = (Mo..
4-6장 4장. 프라이버시 Dollar.times() 연산은 호출을 받은 객체의 값 * 인자로 받은 곱수 를 갖는 Dollar를 반환해야 함. public void testMultiplication() { Dollar five = new Dollar(5); Dollar product = five.times(2); assertEquals(10, product.amount); product = five.times(3); assertEquals(15, product.amount); } // 첫번째와 두번째 단언 assertion을 Dollar와 Dollar를 비교하는것으로 재작성 public void testMultiplication() { Dollar five = new Dollar(5); Dollar product..
Part 2 함수형 데이터 처리 - Chapter 4 스트림 소개 대부분의 자바 애플리케이션에서는 컬렉션을 많이 사용한다. 비지니스 로직에 카테고리로 그룹화 한다던지, 가장 비싼 것을 찾는등의 연산이 포함된다. 데이터베이스에서는 선언형으로 SQL 질의 언어에서 우리가 기대하는 것이 무엇인지 직접 표현 가능하다. 컬렉션도 이와 비슷한 기능을 만들 수 있지 않을까? 많은 요소를 포함하는 커다란 컬렉션은 어떻게 처리해야 할까? 스트림이란 무엇인가? 자바 8에 추가된 기능으로, 선언형으로 컬렉션 데이터를 처리할 수 있다. 또한 멀티스레드를 구현하지 않아도 데이터를 병렬로 처리 가능하다. 기존의 자바코드와 비교해보자. List lowCaloricDishes = new ArrayList(); for(Dish dish: menu) { if(dish.getCalories() < 40..
Chapter3 람다 표현식_02 형식 검사, 형식 추론, 제약 람다로 함수형 인터페이스의 인스턴스를 만들 수 있다고했다. 람다 표현식 자체에는 람다가 어떤 함수현 인터페이스를 구현하는지 정보가 없다. 따라서 제대로 람다표현식을 이해하려면 람다의 실제 형식을 파악해야 한다. 형식검사 람다가 사용되는 콘텍스트를 이용해 형식을 추론 가능. 어떤 콘텍스트에서 기대되는 람다 표현식의 형식을 대상 형식 target type 이라고 한다. List heavierThan150g = filter(inventory, (Apple apple) -> apple.getWeight() > 150); filter 메서드의 선언을 확인한다. filter 메서드는 두번째 파라미터로 Pradicate 형식(대상형식)을 기대한다. Pradicate은 test 라는 한 ..
Chapter3 람다 표현식 _ 01 이 챕더에서는 람다 표현식을 어떻게 만드는지 어떻게 사용하는지, 어떻게 코드를 간결하게 만들 수 있는지 설명할 것이다. 또한 자바 8에 추가된 중요한 인터페이스와 형식추론 등의 기능, 위력을 발휘하는 메서드 참조를 설명한다. 내용 자체도 중요하지만 람다표현식은 광범위하게 사용되므로 이 장의 내용을 완벽히 이해해야 한다. 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명함수를 단순화한 것. - 이름은 없지만 파라미터 리스트, 바디, 반환형식, 발생가능한 예외 리스트는 가질 수 있다. 특징 익명 - 보통의 메서드와 달리 이름이 없음 함수 - 특정 클래스에 종속되지 않음 전달 - 람다표현식을 메서드 인수로 전달하거나 변수로 저장 간결성 - 코드 구현의 간결함. 자바8 이전의 할 수 없었던 일을 하..
1-3장 들어가며. 테스트 주도 개발에는 단순한 두가지 규칙만을 따른다 오직 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다. 중복을 제거한다. 위의 규칙에 의한 프로그래밍 순서는 다음과 같다. 빨강- 실패하는 작은 테스트를 작성한다. 초록- 어찌되었든지간에 테스트를 통과하게 만든다. 리팩토링- 일단 테스트를 통과하면서 생겨났던 모든 중복을 제거한다. 왜 이런식으로 작업해야할까? 왜 테스트를 위한 추가 작업을 해야만 하는가? -> 불확실함 보다는 일단 구체적으로 시작해보자. -> 새로운 설계 결정을 한번에 하나씩 도입하기 위해. 목표는 작동하는 깔끔한 코드를 만드는 것이다. 1장 다중 통화를 지원하는 Money 객체 앞으로 어떤일을 해야하는지 알려주고 지금하는일에 집중할 수 있도록 도와주며 언제 일이 다..
Chapter 2 동작 파라미터화 코드 전달하기 사용자의 요구사항은 항상 변한다. 따라서 새로 추가하는 기능은 쉽게 구현할 수 있고 유지보수가 쉬워야한다. 동작 파라미터화 behavior parameterization : 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록. 코드블록의 실행은 나중으로 미뤄진다. -> 나중에 실행될 메서드의 인수로 코드블록을 전달할 수 있다. ->코드블록에 따라 메서드의 동작이 파라미터화 된다. 리스트의 모든 요소에 대해서 ''어떤 동작을 수행할 수 있음. 리스트 관련 작업을 끝낸 다음에 '어떤 다른 동작'을 수행할 수 있음. 에러가 발생하면 '정해진 어떤 다른 동작'을 수행할 수 있음. 첫번째 시도 : 녹색사과 필터링 enum Color { RED, GREEN } public static List filterGree..