본문 바로가기

TIL

TDD 3부

기억에 남는 부분 

패턴의 주요한 통찰이 하나 있으니, 우리가 언제나 완전히 다른 문제들을 해결하는 것 같지만 우리가 푸는 문제 대다수는 사용하는 도구에 의해 생기는 것이지 직면한 외부의 문제 때문에 생기는 것이 아니라는 점이다.
...
객체를 적용해서 계산을 조직화하는 것은, 내부 생성된 공통적이고 부차적 인문제들을 역시 공통적이고 예측 가능한 방법들로 해결하는 가장 좋은 예 중 하나가 된다. 디자인 패턴의 엄청난 성공은 객체 프로그래머들이 보는 공통성에 대한 증거다. 하지만 디자인 패턴이라는 책의 성공은 이런 패턴들을 표현하는 어떠한 다양성도 모두 억업하고 말았다.
30장. 267page  디자인 패턴 중
내가 알아챈, 그리고 다른 이들도 알아채길 바라는 것은, 반복적 행동을 규칙으로 환원함으로써 규칙을 적용하는 것은 기계적이며 단순 암기가 된다는 점이다. 이것은 언제나 최초 원리에서 시작해서 모든 것을 다시 논구하는 것보다 더 빠르다. 예외 혹은 규칙의 어느 것도 들어맞지 않는 문제가 있을 경우, 새로운 것을 창조하고 적용할 더 많은 시간과 에너지를 갖게 된다.
...
TDD와 패턴의 또 다른 관계는 패턴 주도 설계에 대한 구현 방법으로써의 TDD다.
...
로버트 마틴과 나는 이런 스타일의 TDD에 대해 약간의 연구를 한 적이 있다. 문제는 설계가 항상 우리를 놀라게 만든다는 점이다. 완벽하게 사리에 맞는 설계 아이디어가 결국은 틀린 것으로 판명 난다. 그냥 시스템이 무슨 일을 할지 생각하고 나중에 설계가 알아서 정해지도록 하는 것이 더 낫다.
32장. 321 page  TDD 마스터하기 중

3부는 어떻게 보면 앞에서 예시를 들면서 사용되었던 기법들의 개념을 정리해주는 파트다. 여기를 읽고 앞에 1,2부 읽어도 좋을 거 같다. 아무튼 위의 글들이 가장 기억에 남아서 가져와 봤다. 결론적으로 보면 패턴을 익힌다는 건 나쁘지 않은 건 확실하고, 패턴에 굳히 얽매여서 사고할 필요가 없다는 거 같다. 지속적인 테스트를 통해 자연스럽게 변형되는 게 가장 자연스러워 보인다. 

여기서 소개한 디자인 패턴들은 들어왔던 것들이랑은 조금 다른데 디자인 패턴을 다시 익히고 비교해 봐야겠다.

여기서는 애초에 구분을 테스트랑 리팩터링에 쓰이는 두 범주로 나눠서 패턴 구분을 한다. 31장 리팩터링에서도 나오지만 켄트 벡이 말하는 리팩토링은 기존의 리팩토링과는 조금 다르다. 기존의 리팩토링은 어떤 상황에서도 프로그램의 의미론을 변경해서는 안 된다. 하지만 TDD에서 신경 쓰는 부분은 현재 이미 통과한 테스트들뿐이다. 앞에서도 계속 나오지만 상수로 일단 테스트를 통과하게 해 놓고 변수로 바꾸는 것도 리팩토링이라고 한다. 하지만 어떻게 보면 이게 테스트 집합에 아무 변화도 주지 않기 때문에 맞는 거 같다. TDD에서 리팩토링은 필수적인 단계이고 이러한 빨간 막대/초록 막대/리팩터링 패턴의 반복을 통해서 설계가 완성이 된다. 

 

사실 책에서 디자인 패턴이나, 리팩토링 패턴들을 자세히 말해주는데 예시가 좀 더 있으면 좋겠다. 아무튼 이건 내가 계속 반복해서 익혀야 될 거 같다. 그리고 위에서 패턴을 익히는 게 확실히 더 효율적이라는 말이 예전에 '프로그래머의 뇌'에서 언급했던 내용을 생각나게 했다.

 

다음에는 디자인 패턴을 익히면서 TDD연습을 할 때 어떻게 적용하면 좋을지를 생각해 봐야겠다.

 

참고 및 출처: <테스트 주도 개발> (켄트 벡 지음, 김창준, 강규영 옮김, 인사이트 , 2014)

'TIL' 카테고리의 다른 글

결합과 추상화  (0) 2023.09.30
API 요청 모듈 계층 분리 과정  (0) 2023.09.21
TDD 2부  (0) 2022.06.01
객체지향의 사실과 오해 3~4장  (1) 2022.03.31
객체지향의 사실과 오해 1장~2장  (0) 2022.03.20