<aside> 📌 우리는 <클린 코드>라는 개념을 배웠습니다. <클린 코드>에 대한 감각을 익히기 위해서는 어떤 코드가 좋은 코드이고, 어떤 코드가 좋지 않은 코드인지 이론적인 배경을 학습하는 것도 중요할 뿐 아니라, 다양한 코드를 읽어 보며 어떤 부분이 읽기 쉬웠는지, 어떤 부분이 읽기 어려웠는지, 읽기 어려운 부분은 어떻게 고치면 좋을지 경험해보는 과정이 필요합니다.

이번 과제는 제시된 코드를 읽어보며, 코드를 더 좋은 코드로 고쳐나가는 과정입니다. 구글에 “클린 코드” 혹은 “클린 코드 정리”를 키워드로 검색해보면, 이론적인 배경을 충분히 찾아보실 수 있습니다. 🙂 그러한 내용들을 보며 제시된 코드를 더 좋은 코드로 바꿔보세요! (코드를 바꿀 때 왜 바뀐 코드가 더 좋은 코드인지 다른 사람에게 설명하신다고 생각해보시면 더욱 좋습니다.)

</aside>

[제시된 코드]


[클린 코드란?]

⭐️ 클린 코드 핵심

  1. 의도를 분명히 밝혀라 (변수, 함수, 클래스 등의 이름은 의도를 분명히 해야 한다)
  2. 조건을 캡슐화 하라
  3. 객체 생성에 유의미한 이름을 사용하라
  4. 서술적인 이름을 사용하라
  5. 명령과 조회를 분리하라(CQS 원칙)
  6. 요류 코드보단 예외를 사용하라
  7. 리팩토링 과정에서 설계의 품질을 높여주는 4가지 원칙
    1. 모든 테스트를 실행하라
    2. 중복을 제거하라
    3. 개발자의 의도를 표현하라
    4. 클래스와 메소드의 수를 최소로 줄여라
  8. 디미터 법칙 (어떤 모듈이 호출하는 객체의 속사정을 몰라야 한다)
  9. 테스트 코드(TDD)
    1. TDD 핵심 규칙
      1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다
      2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다
      3. 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다
    2. 테스트 코드 작성 시 주의 사항
      1. 테스트 함수 하나당 하나의 개념만을 테스트하라
      2. 한 개념 당 assert문의 수를 최소화하라
    3. 테스트 코드의 규칙(FIRST)
      1. Fast : 테스트를 빠르게 동작해야 한다
      2. Independent : 테스트는 서로 의존해서는 안 되며, 순서가 없어야 한다
      3. Repeatable : 테스트는 어떤 환경에서도 반복 가능해야 한다
      4. Self-Validating : 테스트를 성공 또는 실패로 bool 값으로 결과를 내어 검증해야 한다
      5. Timely : 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현해야 한다