Community

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

← Go back
클린 코드 TIL #8
#clean_code
2년 전
683
1

오늘 TIL 3줄 요약

  • 학습 테스트는 패키지가 예상대로 도는지 검증한다.

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

  • 테스트 당 assert 하나, 테스트 당 개념 하나

TIL (Today I Learned) 날짜

2022.03.06

오늘 읽은 범위

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

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

  • 8장 경계

    • 외부 코드 사용하기

      • 경계 인터 페이스를 이용할 때는 이를 이용하는 클래스나 클래스 계열 밖으로 노출되지 않도록 주의한다.

    • 경계 살피고 익히기

      • 학습 테스트는 프로그램에서 사용하려는 방식대로 외부 API를 호출한다. 통제된 환경에서 API를 제대로 이해하는지를 확인하는 셈이다.

    • 학습 테스트는 공짜 이상이다

      • 학습 테스트는 패키지가 예상대로 도는지 검증한다.

      • 새 버전이 우리 코드와 호환되지 않으면 학습테스트가 이 사실을 곧바로 밝혀낸다.

      • 실제 코드와 동일한 방식으로 인터페이스를 사용하는 테스트 케이스가 필요하다.

    • 깨끗한 경계

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

      • 새로운 클래스로 경계를 감싸거나 ADAPTER 패턴을 사용해 우리가 원하는 인터페이스를 패키지가 제공하는 인터페이스로 변환하자.

  • 9장 단위테스트

    • TDD 법칙 세가지

      • 첫째 법칙: 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.

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

      • 셋째 법칙: 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.

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

    • 테스트는 유연성, 유지보수성, 재사용성을 제공한다.

    • 가독성은 실제 코드보다 테스트 코드에 더더욱 중요하다.

    • 이중 표준

      • 실제 환경에서는 절대로 안되지만 테스트 환경에서는 전혀 문제 없는 방식이 있다. 대게 메모리나 CPU 효율과 관련있는 경우다.

    • 테스트 당 assert 하나

      • assert 문이 단 하나인 함수는 결론이 하나라서 코드를 이해하기 쉽고 빠르다.

      • 테스트를 분리하면 중복되는 코드가 많아진다.

    • 테스트 당 개념 하나

      • 이것저것 잡다한 개념을 연속으로 테스트하는 긴 함수는 피한다.

    • F.I.R.S.T

      • 빠르게(Fast) : 테스트는 빨리 돌아야 한다.

      • 독립적으로(Independent) : 각 테스트는 독립적으로 그리고 어떤 순서로 실행해도 괜찮아야 한다.

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

      • 자가검증하는(Self-Validating) : 테스트는 부울 값으로 결과를 내야한다. 성공 아니면 실패다.

      • 적시에(Timely) : 단위 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현한다.

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

  • 예전에 교수님이 어느 수업에선가 프로젝트가 뭔가 변경이 되면 전체 프로젝트가 올바르게 돌아가는지 모듈별로 빨간 불 파란 불로 확인이 가능하다고 말하셨던 기억이 있다. 지금까지 배우거나 일하면서 그런 걸 보지 못했었는데 당시 교수님이 말씀하신게 자동화된 단위 테스트 슈트 였던게 아닌가 싶다. 8장, 9장의 테스트와 관련된 내용을 보고나니 회사에도 단위 테스트 슈트가 있으면 좋겠단 생각이 들었다. 그걸 만드려면 엄청난 시간과 인력이 들겠지만...

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

  • 도메인에 특화된 언어DSL : 특정 분야에 최적화된 컴퓨터 언어를 말한다.

    • SQL이나 CSound 등이 있다.

    • 내부 DSL은 특수한 목적을 위해 제한된 방법으로 호스트 언어를 사용하는 방식인데, 사용하던 도구를 그대로 이용할 수 있고 처리 결과를 쉽게 예측할 수 있다.

    • 외부 DSL은 호스트 언어가 아닌 다른 언어에서 생성된 DSL이다. 대부분 자체적인 문법을 가지지만 기존 언어의 문법을 쓰는 예도 있다. 또한, 외부 DSL 개발자는 DSL의 형식을 자유롭게 정할 수 있다.

    • 장점: 대부분 범용 언어보다 복잡하지 않다. 도메인의 복잡성을 낮추어 주기 때문에 단순하며, 이해하기 쉬운 문법을 사용해서 가독성이 좋다. 코드를 간결하게 만들어 주기도 한다.

    • 단점 : 설계, 구현, 유지 하는데 드는 비용. 또한 그것으로 개발하기 위한 툴 개발 비용이 든다.

  • TEMPLATE METHOD 패턴 : 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴. 알고리즘의 구조를 변경하지 않고 알고리즘의 특정 단계들을 다시 정의할 수 있게 해준다.

오늘 읽은 다른사람의 TIL

1 comment