<aside>
📌 우리는 <클린 코드>라는 개념을 배웠습니다. <클린 코드>에 대한 감각을 익히기 위해서는 어떤 코드가 좋은 코드이고, 어떤 코드가 좋지 않은 코드인지 이론적인 배경을 학습하는 것도 중요할 뿐 아니라, 다양한 코드를 읽어 보며 어떤 부분이 읽기 쉬웠는지, 어떤 부분이 읽기 어려웠는지, 읽기 어려운 부분은 어떻게 고치면 좋을지 경험해보는 과정이 필요합니다.
이번 과제는 제시된 코드를 읽어보며, 코드를 더 좋은 코드로 고쳐나가는 과정입니다. 구글에 “클린 코드” 혹은 “클린 코드 정리”를 키워드로 검색해보면, 이론적인 배경을 충분히 찾아보실 수 있습니다. 🙂 그러한 내용들을 보며 제시된 코드를 더 좋은 코드로 바꿔보세요! (코드를 바꿀 때 왜 바뀐 코드가 더 좋은 코드인지 다른 사람에게 설명하신다고 생각해보시면 더욱 좋습니다.)
</aside>
[제시된 코드]
- 여러 함수로 나누어도 좋습니다! 🙂
- 여러 클래스로 나누어도 좋습니다! 🙂


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