
워밍업 클럽 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% 할인을 진행중이다
리팩토링 내용
사물함을 의미하는 Locker 와 이용권을 의미하는 CafePass 개념을 도출
사물함 이용권을 찾고, 사물함에 대한 총 금액을 출력하는 코드는 사물함 관련 로직임으로 Locker 클래스로 이관
이용권별로 일어나는 비즈니스 로직은 이용권 도메인에 관련된 로직임으로 CafePass 클래스로 이관
구체적인 코드들의 경우 메서드로 추출해 의미를 더욱 명확하게 전달
"1".equals(userInput)
의 경우 doesUserChooseToHourlyType(userInput) 메서드로 추출System.out.println();
와 같이 반복되어 나타나는 코드의 경우lineBreak();
라는 메서드로 추출
댓글을 작성해보세요.