🎁[속보] 인프런 내 깜짝 선물 출현 중🎁

인프런 워밍업 클럽 3기 2주차 발자국(박우빈 - 클린코드, 테스트코드)

인프런 워밍업 클럽 3기 2주차 발자국(박우빈 - 클린코드, 테스트코드)

강의 수강

요약

클린코드 6. 코드 다듬기

  • 코드를 설명하는 주석을 쓰게되면 주석에 의존하게 되버린다.

  • 코드로 설명이 힘든 의사결정 히스토리를 주석으로 상세 설명하는게 좋다.

  • 변수와 메서드의 나열 순서도 중요하다.

    • 둘다 사용하는 순서대로 작성한다.

    • 메서드는 다음과 같은 기준으로 배치한다.

      • public 을 상단 / private 을 하단

      • 읽는 순으로 배치하는것도 좋다.

      • 중요도가 높은 메서드 순으로 배치하는것도 좋다.

        • 상태변경 >> 판별 ≥ 조회

      • 공통으로 사용하는 메서드는 가장 하단과 같은 적절한 곳에 배치

  • 리팩토링 과정중 이 메서드가 클래스 내부에서만 쓰이게되면 private으로 꼭 바꿔주자

  • 패키지를 나누지 않으면 관리가 어렵고, 너무 잘게 쪼개도 관리가 힘들어진다.

    • 처음부터 패키지 잘 나누자

  • Ctrl + Alt + L 의 습관화


클린코드 7. 리팩토링 연습

  • 다음은 안티패턴들이다.

    • 메서드가 null 을 반환

    • 메서드가 Optional 을 파라미터로 받음

  • 메소드 오버로딩으로 null 을 파라미터로 받는것을 방지 가능하다.

  • 커밋을 코드 양과 상관없이 잘게 쪼개자.

  • TDA. getter 로 갈취하지 말고 물어보자.

  • InputHandlerOutputHandler 가 같이 쓰이는 부분이 많아 통합해줄 수 있었다.

  • 관점의 차이로 추상화가 달라질 수 있다.

    • 최대한 중요한 관점에서 추상화를 진행해야 좋다.


클린코드 8. 기억하면 좋은 조언들

  • 눈으로만 읽지 말고 코드를 계속 만져보면서 이해하기. 망해도 git reset 있다.

  • 오버 엔지니어링 조심

    • 구현체 하나인 인터페이스

    • 너무 빠른 추상화


테스트코드 1-5

  • 테스트코드 작성은 귀찮지만 결국 해야한다.

  • 수동 테스트는 경험과 감에 의존하는 테스트 → 소프트웨어 신리하기 어려움

  • 테스트코드가 주는 안정감이 있어서. 결국엔 빠른 방법임

  • JUnit5 프레임워크 기반에서 AssertJ 라이브러리로 테스트코드를 작성하면 메서드 체이닝도 쓸 수 있고 편하다.

  • 테스트하기 어려운 영역이 있다면 분리한다. 순수함수가 될때까지.

  • TDD 라는 개발 방법론이 있다.

    • RED - GREEN - REFACTOR 가 핵심

    • 빠른 피드백이 TDD의 핵심 가치

  • 테스트는 하나의 문서 라고 할 수 있다.

  • DisplayName 섬세하게 작성하자. 변수명처럼 생각 많이하고 짓자.

  • BDD를 통해 테스트를 구조화하자. Given / When / Then

회고

클린 코드 강의 마무리와. 테스트코드 강의를 새로 시작하는 주차.

클린코드는 리팩토링 연습 부분은 미수강 상태로 남겨두었었는데, 이번 참에 다 보았고. 배운점이 굉장히 많았다. 관점에 따라 달라지는 추상화 가 가장 중요했던것 같다. 어떠한 관점에 의해 좋게 추상화를 진행했어도. 그것이 정말로 필요한 추상화인지는 생각해봐야할 문제이다.

테스트코드는 아직까지 크게 어려운점이 없었다. 기본적인 테스트 방법만을 배우기도 했고. 이론적인 부분이 조금 더 많았다.

말로 많이 들었던 TDD를 실제로 보았는데, 시간이 조금 걸릴 지언정 굉장히 좋은 개발 방법론 같다. 꼼꼼히 테스트를 만들어두고. 해당 테스트 위에서는 어떤 방식으로 코드를 짜든 테스트를 통과하는 방식으로 리팩토링하면 더욱 좋은 코드를 제약없이 만들 수 있으니 말이다. 하지만 역시 테스트를 좋게 짜놔야 가능한 방법론이라고 생각한다.

미션

요약

Day 7

  • 스터디 카페 이용권 선택 시스템을 리팩토링 해보는 미션

  • MineSweeper 처럼 완전히 엉망인 코드는 아니지만, 리팩토링 할 부분이 많고. 실제로 적용할 수 있는 것들이 많았다.

  • 리팩토링 했던 부분

    • 코드의 중복 제거

    • 인터페이스를 통한 DIP 준수

    • 메서드 추출

    • SRP 준수

    • 일급 컬렉션의 활용

  • 물론 리팩토링 하지 못한 부분이 훨씬 많았고. 아쉬운 부분들은 강의에서 확인할 수 있었다.

회고

단순히 강의를 따라하며 리팩토링 할때는 굉장히 쉽게 진행하면서 어려울게 없어 보였지만. 실제로 리팩토링 해본 결과, 해당 게임보다 덜 복잡한 시스템인데도 이틀동안 계속해서 고민하고 힘들었다.

리팩토링을 하는것도 중요하지만 강사님께서 말씀 하셨듯이 이유가 더 중요한것이 더욱 와닿았다. 리팩토링 자체가 미래의 나와 동료들이 더 쉽게 유지보수 할 수 있도록 하기 위함도 있는데, 동료들에게 충분히 설명할 수 없는 리팩토링은 의미가 없다.

댓글을 작성해보세요.


채널톡 아이콘