라는 프로젝트를 시작하려고 합니다.
개발 공부를 하다 보면 TDD라는 단어를 정말 많이 듣게 됩니다.
하지만 막상 시작하려니 어렵게 느껴지거나, 바쁜 프로젝트 일정 때문에 뒤로 미루게 되는 경우가 많습니다.
이 시리즈는 마치 레고 블록을 하나씩 조립하듯, 아주 기초적인 개념부터 실무에서 사용하는 방법까지 차근차근 다룰 예정입니다.
어려운 용어는 최대한 쉽게 풀어서 설명할 테니 걱정하지 않으셔도 됩니다.
그럼, 첫 번째 시간인 오늘은 TDD가 도대체 무엇인지, 그리고 우리가 왜 이것을 배워야 하는지에 대해 알아보겠습니다.
가장 먼저 실패하는 테스트 코드를 작성합니다.
아직 기능을 구현하지 않았으니 당연히 테스트는 실패합니다.
이때 테스트 도구(JUnit 등)에서는 보통 빨간색 경고등을 보여줍니다.
그래서
Red
단계라고 부릅니다.
예를 들어, 덧셈 계산기를 만든다고 가정해봅시다.
우리는 아직 계산기 코드를 한 줄도 짜지 않았지만, 테스트 코드에 이렇게 적습니다.
// 테스트 코드 (가상의 코드입니다)@Testvoid 더하기_테스트() { Calculator calculator = new Calculator(); int result = calculator.add(2, 3); // 결과가 5여야 한다고 주장합니다. assertThat(result).isEqualTo(5); }
이 코드를 실행하면 당연히 에러가 납니다.
Calculator 클래스도 없고, add 메서드도 없기 때문입니다.
이것이 바로 의도된 실패, Red 단계입니다.
입니다.
코드가 예쁘지 않아도 되고, 꼼수를 써도 됩니다.
오로지 테스트를 통과하는 것에만 집중합니다.
class Calculator { public int add(int a, int b) { return 5; // 무조건 5를 반환합니다. }}
조금 황당해 보일 수 있습니다.
2와 3을 더하라고 했는데 그냥 5를 리턴해버렸으니까요.
하지만 테스트 코드는 add(2, 3)의 결과가 5인지 확인하고 있으므로, 이 테스트는 통과합니다.
화면에 초록색 불이 들어옵니다.
이것이
Green
단계입니다.
여기서 알고리즘 문제 풀이와 연결해 생각해볼 수 있습니다.
우리가 어려운 알고리즘 문제를 만났을 때, 처음부터 완벽한 O(N) 해결책을 찾으려 하면 막막할 때가 많습니다.
그럴 때 일단 시간 복잡도가 높더라도(Brute Force), 정답을 맞히는 코드를 먼저 작성하죠?
TDD의 Green 단계도 이와 비슷합니다.
일단은 정답을 맞히는 최소한의 구현에 집중하는 것입니다.