[워밍업 클럽 2기 BE - 클린코드&테스트] 1주차 발자국
이번 주는 클린한 코드를 작성하는 방법에 대해서 쭉 배웠습니다.
수강하면서 가장 느꼈던 것은 클린 코드는 단순히 '나 이렇게 코드 깔끔하게 짠다'라는 것을 자랑하기 위함이 아닌
내가 아닌 함께 일하는 동료를 위한, 이타적인 행위임을 느꼈습니다.
학습 내용 요약
Day 2 - 추상과 구체
추상과 구체 시간에는 다시 한번 추상화를 잘하는 것이 클린한 코드의 시작점임을 깨달았습니다.
강사님께서 파블로 피카소가 한 말을 말씀하신 것이 인상 깊었는데요.
추상은 항상 구체적인 실재에서 시작해야 한다.
사실 얼마전에 팀에서 개발하던 프로젝트가 지나치게 '이른' 추상화 때문에 모든 팀원이 고생한 적이 있습니다.
외부 서버와 통신하는 클라이언트를 공통화 했는데, 너무 섣부른 나머지 추가적인 요구사항에 전혀 대응을 할 수
없었습니다. 앞으로 나올 구체적인 실재들을 간과한 추상화가 문제였기 때문입니다. 최근의 경험과 더불어서
저 문장을 보고 구체와 추상간의 Context Switching을 잘 해야겠다고 생각이 들었습니다.
Day 3 - 논리, 사고의 흐름 | 객체 지향 패러다임
Day 3의 주제들은 사실 미리 알고 있었던 내용입니다. 저도 입사하고나서 다른 팀원들에게 적극적으로
권유하고 있는 방법입니다. 논리, 사고의 흐름이라는 섹션은 딱 하나의 주제를 관통합니다.
"읽는 사람으로 하여금 덜 고생하게 하자"
우리의 뇌를 메모리에 비유하여 읽는 사람으로 하여금 이 자원을 덜 쓰도록 하는 것이 좋은 코드라는 가르침을
얻었고 Early Return이나 Depth 줄이기(else 지양), 공백에 의미 부여하기, 부정어를 가급적이면 사용하지 않
기처럼 실제로 글쓰기나 말하기에서도 중요한 것들을 코드에 녹이는 방법을 배웠습니다.
Day 4 - SOLID
Day 4는 객체 지향의 Core라고 할 수 있는 SOLID입니다. 지뢰찾기 게임을 이 원칙에 맞춰서 리팩토링 해나아
갔는데요. 제가 이해한 SOLID는 서로 많이 연관되어 있습니다. 하나의 톱니바퀴 여러개를 맞물려야하는 느낌이
었는데요. 이 원칙을 지키는데에 있어서 가장 중요한 것은 도메인 지식을 잘 이해하고 있는 것이 중요하다고
생각합니다. 그래야 필요한 인터페이스는 뭐가 있고 그 인터페이스의 명세는 어떻게 되어야 하며, 객체 간 책임
분리를 통한 올바른 설계를 완성할 수 있는 것 같습니다. 개인적으로 단순히 기획서의 디스크립션만 보고 급급하게
기능을 개발했던 지난 날을 반성하게 되었습니다.
Day 5 - 객체 지향 적용하기
Day 5에서 배운 것들 중에서는 상속과 조합, 일급 컬렉션이 가장 기억에 남았습니다. 사실 상속보다는 조합을
지향하라는 문구를 본 적은 있는데 실제로 적용을 해본 적은 없었거든요. 이번에 좋은 레퍼런스를 얻었고
단순한 상속보다는 약간은 더 복잡하고 코드 양이 늘어나지만 변경에 유연한 조합을 추후에 사내 프로젝트에서
적용해보고 싶다는 생각이 들었습니다. 또한 일급 컬렉션의 효용성과 불변성에 대해서 다시 중요성을 깨달았
습니다.
개인적으로 칭찬하는 점은 강의를 들으면서 알고 있는 내용도 있었고 몰랐던 내용도 있었는데요.
알고 있는 내용에 대해서 강의를 들을 땐 '이렇게 소스 코드를 정리하실 거 같은데?' 라는 생각이 들때쯤
제 예상이 맞았던 적이 많았습니다. 이전에 배웠던 것들을 그래도 잘 머릿속에 담아두고 있구나 라는 생각이
들었구요.
아쉬웠던 점은 강의에서 배웠던 점들을 적용시키는데 있어서 그 적용 범위를 확장하지 못하고 있는 것
같습니다. 아무래도 경험 부족이 원인인 것 같은데 이 부분은 시간이 해결해주리라 믿고 있겠습니다 ㅠㅠ
발자국 끝!
댓글을 작성해보세요.