Lecture
[OKKYCON: 2018] 박재성 - 의식적인 연습으로 TDD, 리팩토링 연습하기
Lecture Material
[OKKYCON] 박재성 - 의식적인 연습으로 TDD, 리팩토링 연습하기
TDD와 리팩토링을 왜 해야하는지 알고 있다고 가정 하에 진행
의식적인 연습
컴포트 존을 깨자
피드백을 받을 수 있는 환경을 조성, 피드백에 따라 행동을 변경하자
한 번에 많은 것을 연습하지 말고 한 가지를 중심으로 설계하자
2단계 부터는 다음과 같은 코드를 예시로 들면서 설명하셨습니다.
String Calculator
요구사항 : 쉼표 또는 콜론을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환
발표자님께서는 2~3단계가 가장 중요하다고 언급하셨습니다.
원칙
회사 프로젝트가 아닌 토이 프로젝트로 연습하기
웹, 모바일 UI나 DB에 의존관계를 가지지 않는 요구사항으로 연습하기
TDD Cycle : Test Fails → Test Passes → Refactor → 다시 처음으로
Production code보다 test code를 먼저 만들기
Input과 Output이 바뀌지 않으면서 읽기 좋고 깔끔한 코드를 만드는것이 리팩토링!
테스트 코드는 변경하지 말고 프로덕션 코드를 개선하는 연습을 한다.
메소드 분리
원칙
정량적인 기준을 가지고 메소드를 분리
한 메소드에 오직 한 단계의 들여쓰기만 한다.
else를 쓰지 않는다.
메소드가 한 가지 일만 하도록 메소드를 분리
로컬 변수가 꼭 필요한지 판단
Compose method 패턴 적용
메소드의 의도가 잘 드러나도록 동등한 수준의 작업을 하는 여러 단계로 나눈다.
잘 이해가 안되지만 내가 이해하기로는 한 메소드 내부에서 작업하는 요소들이 대부분 함수라면 웬만해서 다 함수들로 만들어서 작업해라 정도의 의미인듯...?
연습할때는 극단적으로 해야 insight가 생긴다 ex) 메소드의 라인 수 제한 설정 등등
한 번에 한 가지 명확하고 구체적은 목표를 가지고 연습하라
클래스 분리
위 예시에 음수는 적용할 수 없다는 요구사항을 추가했다 가정, 테스트 코드 추가
원칙
모든 원시값과 문자열을 포장한다.
일급 콜렉션을 쓴다.
3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
앞의 원칙들을 준수하면서 연습해보기
점진적으로 요구사항이 복잡한 프로그램 구현
연습하기 좋은 프로그램 요구사항
필요한 역량
테스트하기 쉬운 코드와 어려운 코드를 보는 눈
테스트하기 어려운 코드를 테스트하기 쉬운 코드로 설계하는 센스
컴파일 에러를 최소화하면서 리팩토링하기
ATDD기반으로 응용 애플리케이션 개발하기
레거시 애플리케이션에 테스트 코드 추가해 리팩토링하기
연습을 위해 필요한 것은?
여유
인내력
나만의 장난감 프로젝트
가장 필요한 것은 꾸준히 도전할 수 있는 용기
첫 프로젝트를 끝내고 코드를 쭉 보면서 옛날에 짜놓았던 코드와 현재 짜넣은 코드들 사이에서 아슬아슬하게 구동하고 있는 느낌이 들었다.
코드를 좀 더 체계적이고 잘짜야 할 필요성을 느껴 찾아보던 중 클린 코드, TDD, 리팩토링에 대해서 알게 되었다.
그렇게 TDD와 리팩토링의 존재를 알고만 있는 상태에서 깃헙을 돌아다니다 여기서 좋은 강연을 발견해 공부도 할 겸 정리해보았다.
앞으로 위 강연에서 배웠던 TDD와 리팩토링을 연습하는 방법을 node.js 사용 프로젝트에 적용시켜보도록 하겠다.