워밍업 클럽 3기 BE - 발자국 2주 차

워밍업 클럽 3기 BE - 발자국 2주 차

1. 들어가며

어쩌다보니 2추 차까지 왔네요? 이번주는 일이 많아서 정신없이 보냈습니다.

게다가 클린코드 리팩토링 실습 미션이 있었습니다.

아쉽게도 리팩토링을 깔끔하게 마무리 짓지 못해서 코드 리뷰 신청은 못했네요.. 후회할 일이 늘어났습니다... 😢

어쨌든 미션 덕분에 지난주 강의를 꽤 여러번 반복해서 들었는데요, 생각보다 더 많은 인사이트를 얻었습니다.

그리고 갈 길이 참 멀다는 사실도 알게 되었죠 ㅎ...

 

2. 학습했던 내용 나만의 키워드로 작성하기


섹션 6. 코드 다듬기

image

  • 좋은 주석

    • 주석이 많다는 것은 가독성이 좋지 않은 코드

    • 주석이 필요한 경우는 히스토리를 알 수 없을 경우

  • 변수와 메서드 나열 순서

    • 변수는 사용하는 순서대로

    • 공개 메서드를 상단에 위치하고, 비공개 메서드 하단에 위치

  • 패키지 나누기

  • 기능 유지보수하기

  • 기능 유지보수하기

    정렬 단축키, linting, style - sonarlint, editorconfig

     

     

     

섹션 7. 리팩토링 연습

image

  • Optional

    • return null / Optional 파라미터 사용은 안티패턴

  • 객체에 메시지 보내기

    • 공개 메서드를 통해 객체끼리 협력하기

  • 객체의 책임과 응집도 - IO 통합, 일급컬렉션, display(), Order 추출

  • 추상화 관점의 차이 - FileHandler

    • 구현에 초점을 맞춘 추상화 VS 도메인 개념에 초점을 맞춘 추상화 

     

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

image

  • 능동적 읽기

     

  • 오버 엔지니어링

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

    • 너무 이른 추상화

  • 은탄환은 없다

    • 클린 코드도 은탄환 x

    • 항상 정답인 기술은 없음. 경험이 중요!

     

    섹션 3. 단위 테스트

    image

  • 수동 테스트, 자동화 테스트

     

  • Junit5, AssertJ

    • 단위 테스트: 작은 코드 단위(클래스 or 메서드)를 독립적으로 검증하는 테스트

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

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

  • 해피 케이스, 예외 케이스

    • 항상 예외 케이스가 있는지 고민하고 테스트를 작성해야 함

  • 경계값 테스트

    • 먼저 테스트 케이스를 세분화하고 경계값이 존재하는 경우는 경계값에서 항상 테스트를 할 수 있도록 고민을 하는게 중요

  • 테스트하기 쉬운/어려운 영역 (순수함수)

    • 관측할 때마다 다른 값에 의존하는 코드

    • 우리가 작성한 코드가 외부 세계에 영향을 주는 코드

     

섹션 4.TDD: Test Driven Development

image

  • TDD

    • 테스트를 먼저 작성한 후에 그를 통해 기능을 만들고 그 다음에 기능을 수정할 때 테스트의 도움을 받을 수 있도록 하는 개발 방법론 중에 하나

  • 레드 - 그린 - 리팩토링

    • 레드: 실패하는 테스트를 먼저 작성하는 단계

    • 그린: 테스트가 통과할 수 있는 최소한의 코딩을 하는 단계

    • 리팩토링: 테스트를 통과하는 것을 유지하면서 구현 코드를 개선하는 단계

섹션 5. 테스트는 []다

image

  • @DisplayName - 도메인 정책, 용어를 사용한 명확한 문장

    • DisplayName을 섬세하게!

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

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

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

    • 4. 테스트의 현상을 중점으로 기술하지 말 것

  • Given / When / Then - 주어진 환경, 행동, 상태 변화

    • Given : 시나리오 진행에 필요한 모든 준비 과정 (객체, 값, 상태 등)

       

    • When : 시나리오 행동 진행

    • Then : 시나리오 진행에 대한 결과 명시, 검증

  • TDD vs BDD

 

3. 학습 회고


컴퓨터 공학과를 나왔고 실무에서 몇 년을 일했지만 객체 지향으로 코드를 작성하는 방법은 배운적이 없는 것 같습니다.
캡, 추, 상, 다가 뭔지는 알고, SOLID가 뭔지는 알지만 코드에 잘 적용이 됐는지는 항상 의문이였죠.
이 강의는 정말 기대했던 것 보다 더 많은 인사이트를 얻는 강의였습니다. 아마 당분간은 몇 번 더 돌려볼 것 같네요.

그래도 지금까지 여러 블로그나 책들을 읽으면서 객체 지향적으로 코드를 작성하려고 노력했었는데요, 강의와 어느정도 결이 비슷하더라구요. 가는 길이 얼추 올바른 길이였다는 사실이 안심이 됩니다.

 

테스트 코드 강의는 정말 빠르게 봤던 것 같습니다. 강의가 출시되자마자 바로 봤었죠.
그 때는 테스트 코드를 잘 작성하는 게 뭔지 모르기도 했고, 주변에서도 작성하는 사람이 단 한명도 없었기에 정말 도움이 되는 강의였습니다.

이번에 속도 3배로 다시 쭉 훑었는데 처음 들었을 때 생각이 많이 났습니다.
당시에는 몰랐는데 지금은 테스트 코드를 작성하는데 부담이 없는 것을 보니 성장하긴 했나봅니다. ㅋㅋ

 

 

4. 미션 회고


미션 Day 7

개인적으로 이번 미션에 대해 나에게 점수를 매긴다면 좋은 점수를 주지 못할 것 같네요.
강의에서 배운 내용을 제대로 적용하지 못했다는 생각이 듭니다.
(변명을 해보자면 시간이 너무 부족했다는... 💦💦)

 

저는 인터페이스로 빼서 구현하는 방법으로 코드를 꽤 많이 작성합니다. 그리고 객체를 조합으로 풀어서 코드를 작성하는 것을 선호합니다.
그래서 리팩토링이 쉬울 줄 알았는데요, 강의 내용을 어떻게든 쑤셔넣으려고 하니까 잘 안되더라구요.. 😭
아직은 이론과 실전에 갭이 있다는 뜻이겠죠?
더 열심히 해야겠습니다!!

 

그리고 금요일에 진행된 코드 리뷰는 재미있었습니다. 😆😆😆
딴 사람들이 작성한 코드를 편하게 리뷰하는 우빈님한테 감탄했던 것 같네요.
역시 세상은 넓고 고수는 많다는?

댓글을 작성해보세요.


채널톡 아이콘