본문 바로가기
major

TDDBE 두번째 모임 - VideoRental Refactoring

by epro 2007. 2. 10.

흥미로운 우리 브렌드..

이번주 주제는 TDD를 이용한 리펙토링이다.

소스와 자세한 내용은 클릭 ☞ TDDBE 두번째모임


1. 개발환경 설정

환경 : JDK1.6, JUnit4.1, Eclipse3.2

1. VideoRental.zip의 압축을 풀어 c:\eclipse\workspace\에 가져다 놓는다.
2. new project > Java project > project name :  VideoRental > Next > 압축 풀어놓은 폴더의 내용이 보인다.  Finish
3. JDK1.6 설치 후 처음 사용하는거라면 jdk4.*가 디폴트로 잡혀 있을 것이다 (내 경우엔 이랬다..)
   Project를 클릭하고 > 컨텍스트를 연다 > Properties > Java Compiler > JDK Compliance level을 6.0으로 선택한다. 그리고, 하단에 jdk classpath를 잡으라는 메세지가 뜰 것이다. jdk도 1.6.0 버젼으로 잡아준다.

이렇게 하면 개발 환경준비 끝!

다음으론, 소스를 올릴 svn 설정하기..


2. SVN 설정

1. http://code.google.com/에 사용할 svn을 만들었다.
svn주소 https://dddjedi.googlecode.com/svn/trunk/
http://code.google.com/hosting/settings에서 패스워드 확인해두자!!
최초 접속시 username과 password를 입력해야 한다.
2. SVN설정은 이클립스에 SVN 플러그인 Subclipse 인스톨하기를 참조했다.
3. 플러그인을 설치했으면 이클립스를 다시 띄우고, Repository에 1.에서 생성한 svn url을 입력해주고 finish!

자 이제 본격적으로 리펙토링에 들어가 보자~!


3. JUnit 4.1

JUnit 4는 3.8에 비해 사용법이 더 심플해진 것 같다.
가장 빨리 사용법을 배우고 싶다면 CookBook을 읽어보자


4. Refactoring
VideoRental 소스에서 내가 리펙토링한 부분은 크게 4가지다.
- test에 SetUp 추가 :: 중복제거
- Rental class가 ArrayList를 extends하도록 하기 :: decoupling
- VideoList를 Hashtable로 구성 :: 가식성 높이기 위해
- Discount 로직 단순화 :: 가식성 높이기 위해

VideoRental_epro

* 느낀점 *
TDD를 하는 보폭이 너무 컸다.
작은 보폭으로 테스트를 만드는 것이 어려운 일이라는 것을 알았다.
테스크 먼저 만드는 것이 익숙하지 않아 자꾸 소스코드부터 고치려고 했다.
리펙토링의 여지가 있는 부분이 눈이 보였지만 구조를 많이 바꿔야 해서 그냥 넘어갔다. (껄끄러운부분)
리펙토링은 인터페이스는 바꾸지 않고 내부구조만 바꿔야 하는 것 일까? 인터페이스까지 바뀌는 부분도 있었다.


5. 스터디 후 느낀 점

오늘(2/11) 스터디 후 핵심! 이라고 생각하는 부분은..
"코드내에서 다른 클레스의 참조가 많다는 것은 하지말아야 할 일을 하고 있다는 뜻이다."라는 대목이였다.

즉, Rental이라는 클레스에서 Video라는 클레스를 참조하는 경우가 많다고 하자.
Customer는 Rental을 통해서 Video에 일을 시키게 된다.
이 부분을 다시 생각해 보면 Video에 직접 일을 시키면 될 것을 Rental이라는 것을 중간에 두고 일을 시키는 꼴이 되어버린다.
이 경우 Rental에서 할 일을 Video로 옮기는 것이 좋다.

그 외 오늘의 배운점.
- 여러사람이 같이 작업하는 코드라면 interface는 바꾸지 말아라.
- 테스트 먼저! assert를 먼저 쓴다! assert가 없는 것은 테스트 코드가 아니다..?! (찬반의견 있었음)
- 리펙토링의 scope 정하는 것이 중요하다.
- 다른 클레스를 참조하는 일이 많다면 클레스위치가 적절한지 생각해 보자.

 

댓글