
워밍업 클럽 3기 BE - 발자국 2주 차
1. 들어가며
어쩌다보니 2추 차까지 왔네요? 이번주는 일이 많아서 정신없이 보냈습니다.
게다가 클린코드 리팩토링 실습 미션이 있었습니다.
아쉽게도 리팩토링을 깔끔하게 마무리 짓지 못해서 코드 리뷰 신청은 못했네요.. 후회할 일이 늘어났습니다... 😢
어쨌든 미션 덕분에 지난주 강의를 꽤 여러번 반복해서 들었는데요, 생각보다 더 많은 인사이트를 얻었습니다.
그리고 갈 길이 참 멀다는 사실도 알게 되었죠 ㅎ...
2. 학습했던 내용 나만의 키워드로 작성하기
섹션 6. 코드 다듬기
좋은 주석
주석이 많다는 것은 가독성이 좋지 않은 코드
주석이 필요한 경우는 히스토리를 알 수 없을 경우
변수와 메서드 나열 순서
변수는 사용하는 순서대로
공개 메서드를 상단에 위치하고, 비공개 메서드 하단에 위치
패키지 나누기
기능 유지보수하기
기능 유지보수하기
정렬 단축키, linting, style - sonarlint, editorconfig
섹션 7. 리팩토링 연습
Optional
return null / Optional 파라미터 사용은 안티패턴
객체에 메시지 보내기
공개 메서드를 통해 객체끼리 협력하기
객체의 책임과 응집도 - IO 통합, 일급컬렉션, display(), Order 추출
추상화 관점의 차이 - FileHandler
구현에 초점을 맞춘 추상화 VS 도메인 개념에 초점을 맞춘 추상화
섹션 8. 기억하면 좋은 조언들
능동적 읽기
오버 엔지니어링
구현체가 하나인 인터페이스
너무 이른 추상화
은탄환은 없다
클린 코드도 은탄환 x
항상 정답인 기술은 없음. 경험이 중요!
섹션 3. 단위 테스트
수동 테스트, 자동화 테스트
Junit5, AssertJ
단위 테스트: 작은 코드 단위(클래스 or 메서드)를 독립적으로 검증하는 테스트
Junit5: 단위 테스트를 위한 프레임워크
AssertJ: 테스트 코드 작성을 원활하게 돕는 테스트 라이브러리
해피 케이스, 예외 케이스
항상 예외 케이스가 있는지 고민하고 테스트를 작성해야 함
경계값 테스트
먼저 테스트 케이스를 세분화하고 경계값이 존재하는 경우는 경계값에서 항상 테스트를 할 수 있도록 고민을 하는게 중요
테스트하기 쉬운/어려운 영역 (순수함수)
관측할 때마다 다른 값에 의존하는 코드
우리가 작성한 코드가 외부 세계에 영향을 주는 코드
섹션 4.TDD: Test Driven Development
TDD
테스트를 먼저 작성한 후에 그를 통해 기능을 만들고 그 다음에 기능을 수정할 때 테스트의 도움을 받을 수 있도록 하는 개발 방법론 중에 하나
레드 - 그린 - 리팩토링
레드: 실패하는 테스트를 먼저 작성하는 단계
그린: 테스트가 통과할 수 있는 최소한의 코딩을 하는 단계
리팩토링: 테스트를 통과하는 것을 유지하면서 구현 코드를 개선하는 단계
섹션 5. 테스트는 []다
@DisplayName - 도메인 정책, 용어를 사용한 명확한 문장
DisplayName을 섬세하게!
1. 명사의 나열보다 문장으로
2. 테스트 행위에 대한 결과까지 기술하기
3. 도메인 용어를 사용하여 한층 추상화된 내용을 담기
4. 테스트의 현상을 중점으로 기술하지 말 것
Given / When / Then - 주어진 환경, 행동, 상태 변화
Given : 시나리오 진행에 필요한 모든 준비 과정 (객체, 값, 상태 등)
When : 시나리오 행동 진행
Then : 시나리오 진행에 대한 결과 명시, 검증
TDD vs BDD
3. 학습 회고
컴퓨터 공학과를 나왔고 실무에서 몇 년을 일했지만 객체 지향으로 코드를 작성하는 방법은 배운적이 없는 것 같습니다.
캡, 추, 상, 다가 뭔지는 알고, SOLID가 뭔지는 알지만 코드에 잘 적용이 됐는지는 항상 의문이였죠.
이 강의는 정말 기대했던 것 보다 더 많은 인사이트를 얻는 강의였습니다. 아마 당분간은 몇 번 더 돌려볼 것 같네요.
그래도 지금까지 여러 블로그나 책들을 읽으면서 객체 지향적으로 코드를 작성하려고 노력했었는데요, 강의와 어느정도 결이 비슷하더라구요. 가는 길이 얼추 올바른 길이였다는 사실이 안심이 됩니다.
테스트 코드 강의는 정말 빠르게 봤던 것 같습니다. 강의가 출시되자마자 바로 봤었죠.
그 때는 테스트 코드를 잘 작성하는 게 뭔지 모르기도 했고, 주변에서도 작성하는 사람이 단 한명도 없었기에 정말 도움이 되는 강의였습니다.
이번에 속도 3배로 다시 쭉 훑었는데 처음 들었을 때 생각이 많이 났습니다.
당시에는 몰랐는데 지금은 테스트 코드를 작성하는데 부담이 없는 것을 보니 성장하긴 했나봅니다. ㅋㅋ
4. 미션 회고
미션 Day 7
개인적으로 이번 미션에 대해 나에게 점수를 매긴다면 좋은 점수를 주지 못할 것 같네요.
강의에서 배운 내용을 제대로 적용하지 못했다는 생각이 듭니다.
(변명을 해보자면 시간이 너무 부족했다는... 💦💦)
저는 인터페이스로 빼서 구현하는 방법으로 코드를 꽤 많이 작성합니다. 그리고 객체를 조합으로 풀어서 코드를 작성하는 것을 선호합니다.
그래서 리팩토링이 쉬울 줄 알았는데요, 강의 내용을 어떻게든 쑤셔넣으려고 하니까 잘 안되더라구요.. 😭
아직은 이론과 실전에 갭이 있다는 뜻이겠죠?
더 열심히 해야겠습니다!!
그리고 금요일에 진행된 코드 리뷰는 재미있었습니다. 😆😆😆
딴 사람들이 작성한 코드를 편하게 리뷰하는 우빈님한테 감탄했던 것 같네요.
역시 세상은 넓고 고수는 많다는?
댓글을 작성해보세요.