HisStory

[NextStep] TDD, Clean Code with Java 13기 1~2주차(자동차 경주) 회고

Hyo Kim 2021. 11. 15. 19:33
728x90
반응형

😆서론

2021.11.01 부터 진행하여 11.14까지 자동차 경주를 진행하였다.

아직 step5 PR을 진행 중에 있지만.. 어제가 2주차 마지막 이었으니 까먹기 전에 미리

자동차 경주를 진행하면서 느낀 것들에 대해서 정리를 하는 게 좋다고 생각이 들어 적어본다.

 

목차

  • GIT을 활용한 PR 경험과 GIT commit 메세지 컨벤션
  • 객체지향 생활체조 원칙, 객체지향설계(SOLID)
  • TDD와 클린코드
  • 코드리뷰 경험
  • TDD란 무엇인가? 클린코드란 무엇인가

😏본론

1. GIT을 활용한 PR 경험과 GIT commit 메세지 컨벤션

지금까지는 git을 제대로 써볼 기회? 노력? 과 같은 것들을 하지 않았었다.

- 현재 회사에서 svn을 사용하고 있고

- 혼자서 어떻게 써야할지 감도 안 오고

- 회사 다닌 이후로 개인 프로젝트를 진행하지 못(?) 했다.

 

위와 같은 이유로 git을 사용하긴 했지만 제대로 사용해본 적이 없었다.

branch도 main 브런치만 사용하고, commit 메세지도 규칙 없이 작성하고,

친구와 졸업 프로젝트를 진행했을 때에도 그냥 각자 main에 바로 push를 하였기에

PR을 진행해본 겸험 또한 없었다.

 

이번 수업을 진행하게 되면서 가장 처음 진행한 것이 git 사용방법 이었다.

fork -> branch 생성 -> commit -> push -> PR요청 -> branch 삭제 -> branch 병합 ...

등 위와 같은 진행을 이번 수업을 진행하면서 계속 하게 될 것이다.

 

svn에도 커밋메세지를 작성하는 곳이 있긴 하다.

하지만, 회사 분들도 커밋 메세지를 잘 작성하지 않으셨고,

최근에야 커밋 메세지를 강제해서 꼭 적어야되긴 하지만 익숙치 않으신지

따로 규칙이 없어서 대충 적곤 했다. 물론 나 포함..

 

이번 github를 사용하면서 깃 커밋에서도 메세지 컨벤션이 있다는 걸 알게 되었고,

그 컨벤션에 맞게 메세지를 작성하려고 노력하게 되었다.

덕분에 커밋할 때에 더욱 작은 단위로 커밋을 할 수 있게 되었고

어느 부분을 수정했는지 작은 단위로 생각해서 커밋을 할 수 있게 되어 좋은 경험이었다.

회사에서도 점차 커밋메세지를 컨벤션에 맞춰서 작성해보는 연습을 하게 될 것 같다.

 

git 사용해볼 기회가 없었던 나에겐 정말 좋은 기회인 것 같다.

왜냐하면 요즘에는 svn보다 git을 사용하는 회사가 더 많기 때문에 미리

github를 통해서 실제 어떻게 협업을 하고, 코드리뷰를 진행하는지에 대해서 경험할 수 있어서

정말 좋은 경험이었다.

 

2. 객체지향 생활체조 원칙, 객체지향설계(SOLID)

객체지향 생활체조 원칙

1. 한 메서드에 오직 한 단계의 들여 쓰기만 한다.
2. else 예약어를 쓰지 않는다.
3. 모든 원시 값과 문자열을 포장한다.
4. 한 줄에 점을 하나만 찍는다.
5. 줄여 쓰지 않는다(축약 금지).
6. 모든 엔티티를 작게 유지한다.
7. 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
8. 일급 컬렉션을 쓴다.
9. getter/setter/프로퍼티를 쓰지 않는다.

객체지향설계(SOLID)

- SRP (Single Responsibility Principle) 단일 책임 원칙
- OCP (Open Closed Principle) 개방 폐쇄 원칙
- LSP (Liskov Substitution Principle) 리스코프 치환 원칙
- ISP (Interface Segregation Principle) 인터페이스 분리 원칙
- DIP (Dependency Inversion Principle) 의존 역전 원칙

 

이 수업에서는 위 두 내용을 지키면서 코드를 작성하고 있다.

예전에 글로만 내용을 읽을 때에는 사실 잘 이해가 안 됐다.

아 물론 어떻게 하는지를 몰랐던 것은 아니었다.

 

"왜?" 였다.

왜 굳이 else를 안쓰지?

왜 귀찮게 모든 원시 값과 문자열을 포장해야되지?

왜 getter/setter를 쓰지 말아야 되지?

이러한 의문이 있었다.

 

역시 글로만 봤을 때에는 잘 이해하지 못하였지만 실제로 적용해보면서

왜 저렇게 작성하라고 하는지에 대해서 어느정도 알게 되었다.

 

객체지향으로 짜기 위해서는 위 원칙들을 지키면 좀 더 객체지향 답게 코드가 작성이 된다는 걸 깨달았다.

더 작게 한 가지 일만 시킬 수록 해당 객체가 하는 일이 더욱 분명해진다는 걸 알게 되니

좀 더 객체지향에 재미를 붙게 된 것 같다.

 

객체지향설계는 아직 해당 단어들의 뜻을 제대로 이해하진 못하긴 했지만 차차 계속

읽어보면서 이해해볼 예정이며

이번 수업을 진행하면서

생활체조 원칙을 지키면서 코드를 작성하면서 좀 더 클린코드에 가깝게 코드를 짜도록 노력해볼 생각이다.

많은 생각을 하면서 진행할 수 있어서 재미있게 진행하는 요소 중 하나다.

 

3. TDD와 클린코드

이 수업의 목표이자 이 수업의 주 내용이다.

 

졸업작품을 만들 때 까지만 해도 테스트코드의 필요성을 하나도 느끼지 못했었고,

회사에서도 테스트코드를 작성하지 않고 하다 보니

다른 회사들에서는 사용한다던데 .. 나도 이걸 배워야만 매리트가 있겠구나 정도로만 생각했었다.

왜 테스트코드를 작성해야하고, 어떻게 작성해야하고.. 하나도 몰랐었다.

어떻게 실패하는 케이스를 만들고, 그걸 성공시키고, 또 어떻게 리팩토링을 해야되지..?

 

이런 고민이 있었던 과거의 나..(불과 2주 전)

포비님께서 직접 온라인 강의와 동영상 강의를 통해 TDD 작성 방법을 보여주시면서

TDD 사이클이 돌아가는 방식에 대해서 '아!' 를 외치며 깨우치게 되었다.

'이렇게 작성하는구나..!'

빨간 줄을 없앤다는 게 무슨 소리였는지 하나도 몰랐지만 조금씩 해보면서

TDD에 재미에 빠지고 있는 것 같다.

 

또 테스트코드를 작성하다 보니 내가 무얼 만들어야 되는지 정확히 알아야 하고,

무얼 테스트할지 작게 어디서부터 작성해야 할지 생각을 하다보니

바로 코드부터 작성하는게 아닌

미리 해당 도메인에 대해서 생각을 해보고, 정리를 하는 습관을 들일 수 있게 되어

정말 좋은 습관이 생기는 과정인 것 같다.

 

4. 코드리뷰 경험

이번 수업을 진행하면서 어찌보면 가장 중요하고, 가장 뜻 깊은 시간들인 것 같다.

 

위에서 얘기했던 내용 모두 코드리뷰를 통해서 얻을 수 있다.

내 코드를 보고 어느 점이. 무엇 때문에 잘못 되었는지를 짚어주시고

코드를 작성하다가 고민되는 부분은 나보다 먼저 이 문제에 대해 고민을 해본 선배(?)에게 직접 물어볼 수 있다.

또 내 코드를 보시고 좀 더 생각해보면 좋을 만한 것들을 하나씩 알려주시면서

새로운 것들을 하나씩 배울 수 있는 길을 알려주신다.

이게 정말 이번 수업을 진행하면서 좋은 경험이라 생각이 들고, 더 넓은 시각을 가질 수 있는 기회라 생각이 된다.

 

그리고, 하나 더 좋은 점이 있었는데

이번 수업을 진행하는 사람 모두 한 slack 방에 있어서

다른 사람들이 코드리뷰 요청하는 걸 계속 확인할 수 있다.

지금 다른 사람들이 얼마나 진행 했는지 어디까지 진행했는지 몇시까지 진행했는지..

정말 열심히 하는 사람들이 많아 동기부여도 되고 나도 더 열심히 하는 이유를 만들어준다고 생각한다.

 

또한 github를 통해서 다른 사람들이 작성한 코드를 볼 수 있다.

코드를 보면서 아 이런 방법이 있구나, 이런 식으로도 하는구나, 이것보단 이 방식이 나을 것 같은데?

라는 생각을 할 수 있고 더 다양한 코드를 볼 수 있으며

다른 사람들이 올린 PR을 통해서 더욱 다양한 코드리뷰를 경험할 수 있다.

다양한 코드리뷰들을 확인하면서 내 코드 뿐 아니라 여러 코드들의 문제점과 장점들도 파악할 수 있어서

이렇게 다른 분들과 같이 공유를 하면서 많이 배울 수 있다는 것이 정말 큰 장점이라 생각된다.

 

 

아직 1/4밖에 진행하지 않았고,, 앞으로도 3개의 파트가 남았다.

이번 수업을 통해 정말 많은 걸 얻고, 꼭 기간 내에 수료하는 것을 목표로..

12월 28일까지 열심히 달려볼 생각이다 !

화이틩 😎

728x90
반응형