🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

워밍업 클럽 3기 BE 클린코드&테스트 - 2주차 발자국

워밍업 클럽 3기 BE 클린코드&테스트 - 2주차 발자국

🐾 발자국

워밍업 클럽 3기 BE 클린코드 & 테스트 - 2주차를 듣고 작성하는 발자국입니다

이번에 들은 강의 바로 가기


📃 회고

[워밍업 클럽 2주차를 들으며 .. ]

이번주는 Reable Code 가 끝나고 Practical Testing 으로 넘어가는 주이기도 하고

중간에 미션으로 클린코드 리팩토링 실습이 있어서 꽤나 의미있는 학습을 한 주였습니다 !!

사실 코드리뷰를 신청하기 전까지만 해도 ,,, 코드가 완벽하다고 생각하지 않아서 낼까말까 진짜 고민했는데요

이번주 중간점검을 해보고나니깐 코드리뷰를 신청하기 정말 잘했다는 생각이 들었습니다

다른 분들이 짠 코드를 보고 많이 배우기도 했고, 박우빈 코치님이 주신 제 코드에 대한 피드백에서도 많이 배웠네용

Reable Code 강의는 끝났지만, 앞으로도 클린코드에 대한 관심은 쭈욱 이어갈 생각입니다

👍 2주차에서 잘한 점

  • 코드리뷰 신청하기

  • 이번주 모든 강의를 들은 것 !!

 

👎 2주차에서 못한 점

  • 갑자기 일이 바빠져서 코드를 더욱 심도있게 생각하고 짜지 못한 것

 

🥅 3주차의 목표

  • 다음주에 있는 미션에는 조금 더 깊게 생각해서 미션을 잘 해내자 !!


📺 강의 내용 정리

[Reable Code]

섹션6 코드 다듬기

  • 주석의 양면성

    • 주석이 너무 많다는 것은 비즈니스 요구사항을 코드에 잘 못 녹였따는 이야기

    • 만일, "의사 결정의 히스토리"를 도저히 코드로 알 수 없다면 코드로 상세하게 설명해야 한다

  • 변수와 메서드의 나열 순서

    • 변수는 사용하는 순서대로 나열한다 (인지적 경제성)

    • 공개메서드는 기준을 가지고 배치하고, 비공개 메서드는 공개 메서드에 언급된 순서대로 배치하는 것이 좋다

  • 패키지 나누기

    • 패키지는 문맥으로써의 정보를 제공한다

    • 패키지를 쪼개지 않으면 관리가 어렵고 너무 잘게 쪼개도 관리가 어렵다

    • 처음만들 때부터 잘 고민해서 패키지를 나누자

  • IDE의 도움 받기

    • 코드 스타일에 신경을 써야 가독성을 높일 수 있다

섹션8 기억하면 좋은 조언들

  • 능동적 읽기

    • 복잡하거나 엉망인 코드를 일고 이해할 때 리팩토링하면서 읽기

    • 우리의 핵심 목표는 도메인 지식을 늘리는 것

  • 오버 엔지니어링

    • 필요한 적정 수준보다 더 높은 수준의 엔지니어링을 하는 것은 불필요하다

    • 꼭 필요한 곳에 알맞게 적용하자

  • 은탄환은 없다

    • 실무는 지속가능한 소프트웨어의 품질과 기술 부채를 안고 가는 빠른 결과물의 줄다리기

    • 모든 기술과 방법론은 적정 기수의 범위 내에서 사용되어야 한다

 

[Pratical Testing]

섹션2. 테스트는 왜 필요할까?

  • 사람이 테스트하다보면 다양한 사이드이펙트가 생길 수 있다

  • 테스트 코드를 통해서 빠른 피드백 / 자동화 / 안정감을 얻을 수 있다

  • 테스트는 귀찮지만 해야 한다

 

섹션3. 단위테스트

  • JUnit5로 테스트하기

    • 단위테스트 : 작은 코드 단위를 독립적으로 검증하는 테스트

    • Junit5 : 단위 테스트를 위한 테스트 프레임워크

    • AssertJ : 테스트 코드 작성을 원활하게 돕는 테스트 라이브러리

  • 테스트 케이스 세분화하기

    • 암묵적이거나 아직 드러나지 않은 요구사항이 있는가?

    • 해피 케이크 & 예외 케이스에 대한 고민이 필요

  • 테스트하기 어려운 영역을 분리하기

    • 테스트가 어려운 영역을 외부로 분리

    • 기본적으로는 어려운 영역을 분리해서 외부로 분리를 하면 할 수록 테스트할 수 있는 영역이 많아진다

 

섹션4. TDD

  • 프로덕션 코드보다 테스트 코드를 먼저 작성하여 테스트가 구현과정을 주도하도록 하는 방법론

  • 구현부 없이 테스트 먼저 작성 (실패) > 테스트를 통과하도록 구현부를 엉터리로 작성 (통과) > 리팩토링 (통과)

 

섹션5. 테스트는 []다

  • 테스트는 문서다

    • 프로덕션 기능을 설명하는 테스트 모드 문서

  • DisplayName을 섬세하게

    • 명사의 나열보다 문장으로

    • ~테스트를 지양하기

    • 테스트 행위에 대한 결과까지 기술하기

    • 도메인 용어를 사용하여 한층 추상화된 내용을 담기

  • BDD 스타일로 작성하기

    • TDD 에서 파생된 개발방법

    • Given / When / Then


미션

DAY 7 미션 - 클린코드 리팩토링 실습

코드 : https://github.com/soyeon207/readable-code/pull/1

 

시스템 요구사항

  • 사용자는 시간권, 주단위 이용권, 1인 고정석 중 선택할 수 있다

    • 시간권 : 2, 4, 6, 8, 10, 12시간

    • 주권 : 1, 2, 3, 4, 12주

    • 고정석 : 4주, 12주

  • 추가금액을 내면 사물함도 사용할 수 있는데, 고정석인 경우만 선택 가능하다

  • 선택한 이용권, 사물함 여부에 따른 최종 금액을 계산해 준다.

  • 오픈 이벤트로 2주권 이상 10%, 12주권 15% 할인을 진행중이다

리팩토링 내용

  1. 사물함을 의미하는 Locker 와 이용권을 의미하는 CafePass 개념을 도출

  • 사물함 이용권을 찾고, 사물함에 대한 총 금액을 출력하는 코드는 사물함 관련 로직임으로 Locker 클래스로 이관

  • 이용권별로 일어나는 비즈니스 로직은 이용권 도메인에 관련된 로직임으로 CafePass 클래스로 이관

  1. 구체적인 코드들의 경우 메서드로 추출해 의미를 더욱 명확하게 전달

  • "1".equals(userInput) 의 경우 doesUserChooseToHourlyType(userInput) 메서드로 추출

  • System.out.println(); 와 같이 반복되어 나타나는 코드의 경우 lineBreak(); 라는 메서드로 추출

 

 

댓글을 작성해보세요.

채널톡 아이콘