전체 글(6)
-
TDD로 복잡한 로직 설계하기
용어 정리이 글에서는 다음과 같은 용어를 사용한다.사전설계: 기능을 '구현하기 전'에 코드 구조를 결정하는 작업리팩토링: 기능을 '구현한 후'에 코드 구조를 결정하는 작업예시 문제외부 시스템 A와 B의 데이터를 조회해서 비즈니스 로직을 처리해야 한다고 하자.A 시스템: WebSocket으로 데이터 조회B 시스템: 주기적으로 HTTP API를 호출해서 데이터 조회사용자 코드에서 사용하기 쉽도록 통신 로직의 인터페이스를 통일하고 싶다. 이 상황에서 TDD로 다형성 로직을 어떻게 구현하는 것이 좋을까? 해결 방법핵심 아이디어는 일부러 중복을 만든 뒤 리팩토링으로 추상화하는 것이다. 다음 순서로 구현한다.A 기능(A 시스템 통신 로직)을 먼저 구현한다.A 기능의 인터페이스와 최대한 비슷하게 B 기능(B 시스템 ..
2026.03.10 -
애플리케이션 코드 vs 프레임워크 코드
용어 정리해당 포스트에서는 아래와 같은 용어를 사용한다.애플리케이션: 일반 사용자를 위한 프로그램으로 기능을 UI로 제공한다프레임워크: 소스 코드를 위한 프로그램으로 기능을 API로 제공한다 (예: SDK, 프레임워크, 라이브러리 등)이 책을 재사용용 컴포넌트 개발자를 염두에 두고 쓴 건 아니지만, 내가 지난 20년을 컴포넌트를 만들며 지낸 터라 그러한 색채가 강할 것이다. 나는 기본적으로 공개된 API 관점에서 생각하며, 여러분도 그렇게 하기를 권한다.출처: 켄트 벡의 구현 패턴(이하 구현 패턴)>과 이펙티브 자바>는 Java로 좋은 코드를 작성하는 기법을 소개하지만 상반되는 의견을 제시하는 경우가 있다. 예를 들어, '일반적인 객체' 생성 시 은 생성자를 추천하지만 는 정적 팩토리 메서드를 추천한다..
2025.08.19 -
소프트웨어 개발 vs 물리적인 제품 개발
“그 돈이 당신 돈이라면 어떻게 하시겠습니까?”라는 질문이 매우 강력하다. 몇 달째 설계만 하던 사람에게, 그 프로젝트에 쓰이고 있는 돈이 네 돈이면 그렇게 하겠냐고 물으면 “에이 농담하십니까, 당연히 안 그러죠”라고 한다. 출처: 켄트 벡이 대답하길…물리적인 제품 개발 흐름분석 → 설계 → 구현 → 테스트건축, 기계, 전자 공학은 위의 작업 순서로 프로젝트의 전체 비용을 절감한다. 물리적인 제품 개발은 구현 단계 이전에 모든 설계를 결정한다. 제품의 재료비, 시공비, 철거비가 많이 들기 때문이다. 또한, 제품이 없으면 테스트할 수 없으므로 구현 단계 이후에 테스트를 진행한다. 무형적인 제품 개발 흐름 분석 → 논리적 설계 → 구현 → 물리적 설계 → 테스트반면에 글, 음악, 그림 같은 무형적인 제품 개..
2025.08.17 -
TDD 사이클의 단계별 목표
TDD 사이클은 빨강(테스트 작성) → 초록(테스트 통과) → 리팩토링(중복제거) 순으로, 반복적으로 진행한다. 해당 포스트에서는 TDD 사이클의 단계별 목표를 설명한다. 1. 먼저 테스트를 작성한다이 단계는 '인터페이스'를 설계하는 단계이다. 기능의 사용법을 결정하고, 작동 여부를 확인하는 방식을 결정해야 한다. 기능을 사용하는(또는 예외가 발생하는) 구체적인 예제 코드를 생각하는 것이 좋다. 클래스 이름, 메서드 이름, 파라미터 개수 등을 정하고, 테스트 코드로 기능을 사용할 때 불편한 부분이 없는지 확인한다. 테스트 데이터는 대표적이면서 읽기 쉬운 것을 사용한다. 기능의 작동 여부를 확인하기 위해서 객체의 내부 상태를 사용하는 것은 좋지 않다. 테스트 코드에서 객체 내부에 대한 의존성이 생기면, 리..
2024.09.08 -
학습 테스트 (라이브러리 사용법부터 오픈소스 기여까지)
많은 프로젝트에서 외부 라이브러리를 사용한다. 라이브러리는 작업 시간을 아껴주기 때문에 팀원들의 동의가 있고, 해결하려는 문제에 도움이 된다면 사용하는 편이다. [테스트 주도 개발] 책에서는 학습 테스트에 대한 설명이 있다. 학습 테스트는 외부에서 만든 소프트웨어를 처음 사용할 때, 해당 소프트웨어의 기능을 테스트 코드에서 사용해 보는 것을 말한다. 학습 테스트를 작성하면 아래와 같은 효과를 볼 수 있다.라이브러리 사용법을 학습한다라이브러리는 많은 기능을 제공한다. 이 중에 프로젝트에서 사용하는 기능에 대해서만 학습 테스트를 작성한다. 라이브러리가 10개의 기능을 제공하지만, 프로젝트에서 2개의 기능만 사용한다면, 2개의 기능에 대해서만 학습 테스트를 작성한다. 나중에 라이브러리의 3번째 기능이 필요하다..
2024.09.03 -
TDD 예제 (xUnit 프레임워크 구현하기)
TDD의 아이러니 중 하나는 TDD가 테스트 기술이 아니라는 점이다(워드 커닝엄의 선문답이다). TDD는 분석 기술이며, 설계 기술이기도 하다. 사실은 개발의 모든 활동을 구조화하는 기술이다.- 《테스트 주도 개발》by 켄트 벡 이 글은 켄트 벡이 《테스트 주도 개발》에서 2부 예제로 만들다가 만 xUnit코드를 이어서 개발하는 과정을 설명한다. 아래는 켄트 벡이 남긴 xUnit 프레임워크에 대한 작업 목록과 소스 코드이다. 이 글에서는 작업 목록의 'TestSuite를 자동으로 만들기' 기능을 구현한다. 소스 코드에 대한 설명은 《테스트 주도 개발》을 참고하길 바란다.테스트 메서드 호출하기먼저 setUp 호출하기나중에 tearDown 호출하기테스트 메서드가 실패하더라도 tearDown 호출하기테스트 여..
2015.06.04