인프런 워밍업 클럽 스터디 2기 백엔드 - 2주차 회고록
벌써 워밍업 클럽 스터디를 진행한지 2주차가 마무리가 되었다.
1주차에는 추상에 대한 이해도를 높이기 위한 여러 예시와 상황들을 배웠으며
2주차에는 배운 내용을 깊이 이해할 수 있도록 많은 예시들을 보며 설명을 해주었고
그 과정에서 미션3 을 통해 배운 내용을 써 먹을 수가 있었다.
특히 섹션5 객체지향 적용하기 에서 배운 내용은 정말 인상적이었다.
상속과 조합 (상속보다는 조합 사용하자)
Value Object, Entity (불변성, 동등성, 유효성 검증)
일급 컬렉션
Enum
추상화와 다형성 활용하여 반복되는 if 문 제거, OCP 지키기
숨겨져 있는 도메인 개념 도출하기.
간단하게 이렇게 키워드를 정리해주셨는데
실무에서 1,2,4,5 는 최대한 지키기 위해 노력하고 있지만
일급컬렉션 부분은 처음듣는 내용이라 어려웠다
그리고 마지막 섹션인 '기억하면 좋은 조언들'
위 부분은 키워드만 줄여서 회사 모니터앞에 출력해두고 매번 상기시키면서 코드를
짜려고 실천하는 중이다.
능동적 읽기
복잡하거나 엉망인 코드를 읽고 이해하려 할 때, 리팩토링 하면서 읽기
공백으로 단락 구분하기
메소드와 객체로 추상화 해보기
주석으로 이해한 내용 표기하며 읽기
우리에게는 언제든 돌아갈 수 있는 git reset --hard 가 있다.
핵심 목표는 우리의 도메인 지식을 늘리는 것.
그리고 이전 작성자의 의도를 파악하는 것이 중요하다.
오버 엔지니어링
필요한 적정 수준보다 더 높은 수준의 엔지니어링의 오버 엔지니어링 이라고 한다
ex) 구현체가 하나인 인터페이스 를 추상화 한다.
인터페이스 형태가 아키텍처 이해에 도움을 주거나, 근시일 내에 구현체가 추가될 가능성이 높다면 OK
구현체를 수정할 때 마다 인터페이스도 수정해야 함
불필요 인터페이스가 많으면, 코드 탐색에 영향을 줌. 애플리케이션이 비대해 진다.
ex) 너무 이른 추상화 or 과도한 추상화
정보가 숨겨지기 때문에 복잡도가 높아진다.
후대 개발자들이 선대의 의도를 파악하기가 어렵다.
지금까지 배운것이 절대법칙은 아니고 경험을 쌓으면서 필요한 곳에서 잘 적용을 해야한다
은탄환은 없다
'파이브 라인스 오브 코드' 라는 책이 있다.
클린 코드도 은탄환이 아니다.
실무 : 2가지 사이의 줄다리기
지속 가능한 소프트웨어의 품질 vs 기술 부채를 안고 가는 빠른 결과물
대부분의 회사는 돈을 벌고 성장해야 하고, 시장에서 빠르게 살아남는 것이 목표다
이런 경우에도, 클린 코드를 추구하지 말라는 것이 아니라, 미래 시점에 잘 고치도록 할 수 있는 코드 센스가 필요하다.
ex) TODO , 주석 달아 두기
결국은 클린 코드의 사고법을 잘 알고 있는 것이 중요하다.
위 2가지 사이에서 줄타기를 잘해야 한다고 생각한다.
모든 기술과 방법론은 적정 기술의 범위 내에서 사용되어야 한다.
ex) 당장 급하게 배포 나가야 하는데, 동료에게 style 관련된 리뷰를 주고 고치도록 강요하는 사람
도구라는 것은, 일단 그것을 한계까지 사용할 줄 아는 사람이 그것을 사용하지 말아야 할 때도 아는 법이다.
적정 수준을 알기 위해, 때로는 극단적으로 시도해보자.
-> 항상 정답인 기술은 없다.
-> 한계까지 연습해보고, 적정 수준, 적정 시점을 깨달아보자
객체지향의 꽃은 '추상' 이라는 개념을 정말 잘 이해해야 한다.
"함께 자라기 애자일로 가는 길" 책을 추천 : 탑-다운(추상 -> 구체)
추상과 구체를 넘나들 수 있게끔 노력을하자 소프트웨어 장인이 되보자
미션
미션은 총 1개를 진행하였고 내용 자체가 어려웠다.
배운 내용을 토대로 리팩토링을 하는 것이였는데 딱 주어진 코드를 보자마자
망치로 한대 맞은듯이 멍해졌다.
뭐부터 시작해야 하지 고민을 30분정도 한 것 같다.
그리고 제일 쉬운 메소드 추출부터 시작하였고 그 이후로는 어떻게 접근 해야할지에 대한 고민을 하다
결국 강의를 보며 인사이트를 얻기로 했다.
정말 객체지향, 추상화 위 내용은 개념을 안다고 해서 무언가를 잘 할수있다? 이런건 대부분 없는 것 같다.
많은 경험과 많은 인사이트를 직접 채득을 하는게 중요하다고 생각한다.
이제는 리팩토링 파트에서 넘어가 실용적인 테스트 파트 강의를 앞두고 있는데 기대가 많이 된다.
실무에서 한 프로젝트는 JPA 를 다른 프로젝트는 MyBatis 를 사용하고 있지만
테스트에 대한 기본 개념과 내용을 알아두면 분명 큰 도움이 될거라고 생각한다.
모든 정리 내용은 Github 에 기록을 해두었습니다.
댓글을 작성해보세요.