Skip to content

Latest commit

 

History

History

chapter2

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

2. 문자열 계산기 구현을 통한 테스트와 리팩토링

2.2 JUnit을 활용해 main() 메소드 문제점 극복

책보다 동영상을 통해 학습하는 것이 익숙한 독자는 다음 동영상을 통해 이클립스 개발 환경하에서 프로젝트 추가, 실행, 이클립스 활용 팁, JUnit 사용법을 학습할 수 있다.

2.3 문자열 계산기 요구사항 및 실습

  • [문자열 계산기 실습 문서](2.3 문자열 계산기 실습.pdf)

2.4 테스트와 리팩토링을 통한 문자열 계산기 구현

2.4.3 동영상을 활용한 학습

2.5 추가 학습 자료

2.5.1 테스트 주도 개발(Test Driven Development, 이하 TDD)과 리팩토링

테스트 관련 내용을 학습하면 반드시 등장하는 것이 TDD이다. TDD를 처음 접할 경우 신선하면서 문화적인 충격을 받는다. 따라서 TDD 방식으로 개발하겠다는 결심을 하고 연습을 한다. 하지만 몸에 익히기 쉽지 않다.

TDD를 바로 연습하는 것도 좋지만 그 보다는 JUnit을 활용해 테스트를 검증하는 방식으로 진행하다 한 단계 더 성장하고 싶을 때 도전할 추천한다.

안정적으로 리팩토링을 하려면 반드시 견고한 테스트가 뒷받침하고 있어야 한다. 리팩토링의 첫 번째 단계가 프로덕션 코드에 대한 테스트 코드는 만드는 것인만큼 두 주제를 같이 학습할 것을 추천한다. 이 두 주제를 학습하는 단계는 다음과 같이 할 수 있다.

먼저 테스트 주도 개발 : 고품질 쾌속개발을 위한 TDD 실천법과 도구 책의 1장 공개 자료를 통해 TDD가 무엇인지, 등장 배경은 무엇이며, 어떤 효과가 있는지 검토해 본다. 이 문서를 읽고 실습해 본 후 이 장의 문자열 계산기를 TDD 방식으로 구현해 본다.

이 문서를 통해 TDD에 대한 대략적인 감을 잡은 후 본격적으로 학습하려면 테스트 주도 개발(Kent Beck 저/김창준, 강규영 역, 인사이트/2004년) 책과 리팩토링 : 코드 품질을 개선하는 객체지향 사고법, 마틴 파울러 저/김지원 역, 한빛미디어/2012년을 볼 것을 추천한다. 이 두 책은 TDD와 리팩토링에 대한 기본 원리, 실천 방법에 대해 자세하게 다룬다. “리팩토링” 책의 경우 5장부터는 전체 리팩토링에 대한 카탈로그를 제시하고 있기 때문에 책을 끝까지 읽기 보다 4장까지는 반드시 읽고 나머지 카탈로그는 자신이 구현한 코드를 리팩토링하면서 카탈로그를 참조하는 방식으로 접근해도 좋다.

TDD와 리팩토링을 연습할 때 너무 복잡한 로직을 포함하고 있거나 외부 의존관계가 많은 코드(웹 UI, 모바일 UI와 연결된 코드, 데이터베이스와 연결된 코드)부터 시작하면 포기하기 쉽다. TDD도 익숙하지 않기 때문에 이전에 구현해 봤던 기능이나 외부와의 의존관계가 없는 코드로부터 시작하는 것이 좋다.

TDD와 리팩토링을 연습하기 가장 좋은 코드는 알고리즘이나 유틸리티 성격의 코드를 구현할 때이다. 알고리즘이나 유틸리티 성격의 소스 코드는 크기도 크기 않고 완료 기준이 명확하기 때문이다. TDD로 충분한 연습을 한 후 다음 단계로 점차 복잡도가 높거나 외부와의 의존관계가 있는 코드로 확대해 나가는 방식으로 접근하는 것이 TDD를 체득하고 나만의 습관으로 만들 수 있는 좋은 길이다.

2.5.2 정규 표현식

정규 표현식(regular expression)은 문자열 조작을 지원하는 도구이다. 손에 잡히는 정규 표현식, 벤 포터 저/김경수 역, 인사이트(insight), 2009년 책은 정규표현식을 통해 해결할 수 있는 문제들을 다음과 같이 정리하고 있다. 일부 상황을 인용해 본다.

  • 대소문자를 구별하지 않고 car라는 텍스트가 포함된 파일을 찾는데, 단어 중간에 car가 들어 있는 경우에는 제외하고 싶다(예를 들어 scar, carry, incarcerate).
  • 소스코드를 수정하다가 size라는 글자를 모두 iSize로 치환하고자 한다. 하지만 다른 단어 사이에 size라는 철자가 포함된 경우는 제외하고 오직 size라는 단어만 치환하고 싶다.
  • 컴퓨터 파일 시스템에 존재하는 파일 목록을 모두 보다가 Application이라는 텍스트가 포함된 파일들만 볼 수 있도록 걸러 내고 싶다.

이 문제를 해결하려면 지금까지 우리들이 흔히 사용한 조건절과 문자열 조작 api를 활용해 해결할 수 있다. 하지만 얼마나 복잡할까? 상상만 해도 머리가 아프다. 정규 표현식은 이 같이 복잡한 문제를 훨씬 더 쉽게 해결하도록 도와준다. 정규 표현식은 언젠가는 개발자가 넘어야할 산이다. 하지만 너무 조급하게 마음 먹지 말고 더 중요한 부분에 대한 학습을 완료한 후 문자열 조작이 많아지는 시점에 학습할 것을 추천한다.

정규 표현식 연습은 반드시 프로그램 구현을 통해 하지 않아도 된다. http://regexr.com/ 와 같이 온라인 상에서 연습할 수 있는 곳도 있다.


Table of Contents

1부. 첫 번째 양파 껍질

3부. 세 번째 양파 껍질