[TDD] Chapter1 #4. 프라이버시
·
Reference/Test-Driven Development
📌 amount를 private로 만들기 Dollar.times() 연산은 호출받은 객체 값에 인자로 받은 곱수 많큼 곱한 값을 갖는 Dollar를 반환해야 한다. 현재의 테스트가 정확히 그것을 말한다고 보기 어려우므로 수정이 필요하다. @Test void testMultiplication() { Dollar five = new Dollar(5); Dollar product = five.times(2); assertEquals(new Dollar(10), product); product = five.times(3); assertEquals(new Dollar(15), product); } 임시 변수인 product는 쓸모가 없어졌으므로 inline 시키면 아래처럼 바뀐다. @Test void testMu..
[TDD] Chapter1 #3. 모두를 위한 평등
·
Reference/Test-Driven Development
📌 VO 패턴(Value Obejct pattern) 객체를 값처럼 쓸 수 있다. 객체의 인스턴스 변수가 생성자를 통해서 설정된 후에는 결코 변하지 않음을 보장한다. (불변객체) 별칭 문제에 대해 걱정할 필요가 없다. 별칭 문제 : 인스턴스 참조를 공유하는 복사본을 수정했을 때 원본이 같이 수정되는 현상 더보기 ✒️ VO 패턴 가볍게 읽고 넘기려다가 재밌는 내용을 봐서 정리해보았다. 사람의 나이를 나타내기 위해서는 어떤 변수 타입을 나타내야 할까? Integer Boolean String 정답은 '없다'. 왜냐하면, Integer나 String은 age가 가지지 않는 속성과 연산들을 가지고 있기 때문이다. 두 나이를 더하거나 빼고, 곱하거나 나누고, 부정적 연령을 허용한다는 얼토당토 않는 연산이 가능해진..
[TDD] Chapter1 #2. 타락한 객체
·
Reference/Test-Driven Development
📌 일반적인 TDD 주기 테스트를 작성한다. 머릿속의 오퍼레이션이 코드에 어떤 식으로 나타나길 원하는가? 이야기를 써내려가라. 원하는 인터페이스를 개발하라. 올바른 답을 얻기 위해 필요한 이야기의 모든 요소를 포함시켜라. 실행 가능하게 만든다. 빨리 초록 막대를 보는 것이 중요하다. 명백하게 깔끔하고 단순한 해법이 보인다면 그것을 입력하고, 구현을 위해 몇 분 정도 걸릴 거 같다면 일단 초록 막대를 빨리 보는 것에 집중하라. 올바르게 만든다. 시스템이 작동하므로 직전에 저질렀던 죄악을 수습하라. 좁고 올곧은 소프트웨어 정의(software righteousness)의 길로 돌아와 중복을 제거하고 초록 막대로 되돌려라. 작동하는 깔끔한 코드를 얻기 위해 나누어서 정복하자(divide and conquer)..
[TDD] Chapter1 #1. 다중 통화를 지원하는 Money 객체
·
Reference/Test-Driven Development
• 어떤 코드건 작성하기 전에 실패하는 자동화된 테스트를 작성하라 • 오직 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성하라 • 중복을 제거하라 📌 TDD 리듬 재빨리 테스트를 하나 추가한다. 모든 테스트를 실행하고 새로 추가한 것이 실패하는지 확인한다. 코드를 조금 바꾼다. 모든 테스트를 실행하고 전부 성공하는지 확인한다. 리팩토링을 통해 중복을 제거한다. ✒️ 프로그래밍 순서 1. 빨강: 실패하는 작은 테스트를 작성하라. 처음에는 컴파일조차 되지 않을 수 있다. 2. 초록: 빨리 테스트가 통과하게끔 한다. 이를 위해 어떠한 죄악을 저질러도 좋다. 3. 리팩토링: 일단 테스트를 통과하게만 하는 와중에 생긴 모든 중복을 제거하라. 📌 As-is 다음과 같은 보고서가 있다고 하자. 종목 주 가격 합..