-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
56c5ef8
commit db67740
Showing
1 changed file
with
70 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
# TDD | ||
|
||
오늘은 **테스트 주도 개발(Test-Driven Development, TDD)** 에 대해 이야기해보려고 한다. | ||
TDD는 테스트를 먼저 작성한 후 코드를 개발하는 방식으로, 처음에는 다소 낯설고 번거롭게 느껴질 수 있지만, 익숙해진다면 소프트웨어 개발에 큰 변화를 가져다줄 수 있다. | ||
|
||
--- | ||
|
||
## TDD란 무엇인가? | ||
|
||
TDD는 간단히 말해 **테스트를 먼저 작성하고, 테스트를 통과시키는 코드를 작성한 후, 코드를 리팩토링**하는 과정이다. | ||
이 방식은 세 가지 주요 단계를 반복하며 진행된다: | ||
|
||
1. **Red**: 실패하는 테스트를 작성한다. (테스트는 반드시 실패해야 한다.) | ||
2. **Green**: 테스트를 통과하는 최소한의 코드를 작성한다. | ||
3. **Refactor**: 중복 제거 및 구조 개선을 통해 코드를 리팩토링한다. | ||
|
||
--- | ||
|
||
## TDD를 적용하며 | ||
|
||
TDD를 적용하면서 아래와 같은 경험을 할 수 있었다: | ||
|
||
### **1) 요구사항의 명확화** | ||
테스트를 먼저 작성하기 때문에, 무엇을 구현해야 하는지를 먼저 명확히 정의할 수 있다. | ||
애매한 요구사항을 코드로 바로 구현하는 대신, 테스트를 통해 기능의 기대 결과를 분명히 할 수 있다. | ||
|
||
### **2) 원활한 코드 변경** | ||
테스트가 이미 작성되어 있기 때문에, 코드를 변경하거나 리팩토링하더라도 이전 기능이 정상적으로 동작하는지를 쉽게 확인할 수 있다. | ||
|
||
### **3) 더 좋은 설계** | ||
TDD는 자연스럽게 **의존성을 줄이고 모듈화된 설계**를 만들도록 유도했다. | ||
테스트 가능한 코드를 작성하려면, 클래스와 메서드가 명확한 책임을 가져야 한다. | ||
|
||
--- | ||
|
||
## TDD의 어려움 | ||
|
||
TDD를 처음 적용했을 때 몇 가지 어려움도 있었다: | ||
|
||
### **1) 처음부터 모든 것을 TDD로 하기 어렵다** | ||
모든 기능을 처음부터 TDD로 개발하는 것은 생각보다 쉽지 않았다. 특히, 기존 코드베이스에 TDD를 도입하려고 하면 어디서부터 시작해야 할지 막막한 경우가 많았다. | ||
|
||
### **2) 테스트 작성 시간이 추가된다** | ||
테스트를 먼저 작성하는 과정에서 개발 시간이 더 걸리는 것처럼 느껴졌다. 하지만 장기적으로는 디버깅 시간과 유지보수 비용을 줄여준다는 점에서 충분히 투자할 가치가 있다. | ||
|
||
--- | ||
|
||
## TDD를 효과적으로 적용하는 방법 | ||
|
||
TDD를 효과적으로 활용하기 위해 아래와 같은 팁을 기억해두면 좋다: | ||
|
||
### **1) 작은 단위부터 시작하라** | ||
처음에는 간단한 유틸리티 함수나 서비스 계층 등 테스트가 용이한 부분부터 TDD를 적용해보자. | ||
성공 경험을 쌓으며 TDD에 익숙해질 수 있다. | ||
|
||
### **2) Mocking 도구를 활용하라** | ||
Mockito와 같은 Mocking 도구를 사용하면 외부 의존성을 최소화하고, 독립적인 테스트를 작성할 수 있다. | ||
|
||
### **3) 지속적인 연습** | ||
TDD는 습관화가 중요하다. 테스트를 작성하고, 이를 통과시키는 과정을 반복하며 자연스럽게 몸에 익히자. | ||
|
||
### **4) 테스트 커버리지를 무조건적으로 따르지 말라** | ||
테스트 커버리지를 높이기 위해 불필요한 테스트를 작성하기보다는, 핵심 로직과 중요한 경로에 초점을 맞추는 것이 더 중요하다. | ||
|
||
--- | ||
|
||
## 결론 | ||
|
||
TDD는 단순히 테스트를 작성하는 것을 넘어, **코드의 품질과 설계의 개선**을 목표로 한다. | ||
비록 초기에는 익숙하지 않고 어려움을 겪을 수 있지만, 지속적으로 연습하고 적용하면 소프트웨어 개발의 효율성을 크게 높일 수 있을 것 같다. |