Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
TIL(22.03.05~06)
#clean_code
2년 전
649

TIL (Today I Learned) 날짜

2022. 03. 05~06

오늘 읽은 범위

8~9장. (경계~단위 테스트)

책에서 기억하고 싶은 내용을 써보세요.

< 경계 >

  • 외부 코드를 사용하면 적은 시간에 더 많은 기능을 출시하기 쉬워진다. 만약 외부에서 가져온 패키지를 사용하고 싶다면 어디서 어떻게 시작해야 좋을까? (...) 우리 자신을 위해 우리가 사용할 코드를 테스트하는 편이 바람직하다.(p.146)

  • 외부 코드를 익히기는 어렵다. 외부 코드를 통합하기도 어렵다. 두 가지를 동시에 하기는 두 배나 어렵다. (p.147)

    • 곧바로 우리쪽 코드를 작성해 외부 코드를 호출하는 대신 먼저 간단한 테스트 케이스를 작성해 외부 코드를 익히면 어떨까? (짐 뉴커크는 이를 '학습 테스트'라 부른다.)

  • 학습 테스트는 이해도를 높여주는 정확한 실험이다. (p.149)

  • 외부 패키지를 호출하는 코드를 가능한 줄여 경계를 관리하자. (p.152)


< 단위 테스트 >

  • TDD 법칙 세 가지 (p.155)

    1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.

    2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.

    3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.

  • 테스트 코드는 실제 코드 못지 않게 중요하다. (...) 실제 코드 못지 않게 깨끗하게 짜야 한다. (p.157)

  • 테스트는 유연성, 유지보수성, 재사용성을 제공한다. 테스트 케이스가 있으면 변경이 쉬워지기 때문이다. (p.157)

  • 깨끗한 테스트 코드를 만들려면? 세 가지가 필요하다. 가독성, 가독성, 가독성. (p.158)

  • F.I.R.S.T (p.167,168)

    1. 빠르게 : 테스트는 빨라야 한다.

    2. 독립적으로 : 각 테스트는 서로 의존하면 안 된다.

    3. 반복가능하게 : 테스트는 어떤 환경에서도 반복 가능해야 한다.

    4. 자가검증하는 : 테스트는 bool 값으로 결과를 내야 한다. 성공 아니면 실패다.

    5. 적시에 : 테스트는 적시에 작성해야 한다.

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  • 이번에 읽고 학습한 내용은 2가지 이다. 외부 코드를 가져와 코딩을 하려 할 때, 어떠한 경계가 생기는 지와 코드를 성공적으로 구현 완료하기 위해선, 단위 테스트가 어떻게 이뤄져야 하는 지에 대해서이다.

  • 우선, 외부 코드를 적용하려 할 경우, 이미 어느 정도 형태가 갖춰져 있는 코드를 활용하기 때문에, 현재 작성하고 있는 코드에서 조합이 잘 될 수도 있고, 안 될 수도 있다는 것을 알고 있다. 그렇기에 그 외부 코드의 규모가 큰지 크지 않은지, 혹은 가져와 사용하려는 범위가 얼마만큼 인가에 따라 또 달라진다. 이에 이 책에선 쓰려고 하는 부분에 있어 테스트를 진행해볼 것을 권유한다. 그리고 이 편리함이 주는 것에서 오는 단점 또한 무시할 수 없기에, 가급적 적게 쓰는 것을 권장하는 듯하다.

  • 다음으론 단위 테스트가 어떻게 실행해야 하는지에 대해서, 코드를 설계할 때부터 구현하고자 하는 기능이나 내용에 따라 테스트 코드를 우선 작성해보는 TDD라는 방식을 언급한다. 그리고 구현하고자 하는 코드를 '클린 코드'로 만드는 것이 얼마나 의미있는 가에 대한지를 테스트 코드 또한 그렇다고 얘기해주고 있다. 테스트 코드를 얼마나 주의 깊게 작성했는지에 따라 테스트할 코드에 대한 검증의 정도가 차이가 있기 때문이라고 하였다.

  • 결국 이번 학습은, 코드 구현 못지 않게 그것을 검증하는 테스트에 대한 노력이 얼마나 중요한 지에 대해(그 코드가 작성한 코드이건 오픈 소스와 같은 외부 코드이건) 알아볼 수 있었던 것이 중요했던 것 같다. 아직은 이러한 행위를 '디버깅'이라는 작업으로만 실행을 해보았지만, 그동안 다양한 코드를 보면서 오늘 내용에 해당할 만큼 좋은 테스트 코드도 있었다는 것을 알고 있고, 그 때는 이 책을 읽지 않았음에도 그 테스트가 얼마나 실용적이었는지 충분히 느낄 수 있었다. 그렇기에 이번 내용이 그 때 느꼈던 자극을 한 번 더 느끼게 해주는 시간이 아니었나라는 생각을 해보게 되었다.

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • 제네릭스

  • 출력 스트림

  • TEMPLATE METTOD pattern