인프런 워밍업 클럽 스터디 2기  BE 클린코드 & 테스트 과정- 1주차 발자국

인프런 워밍업 클럽 스터디 2기 BE 클린코드 & 테스트 과정- 1주차 발자국

1주차 발자국 회고

 

  1. 클린 코드를 추구해야 하는 이유

    1. 누구를 위한 가독성?

      사실 처음에는 마음에 크게 와닿지 않았다. 코드를 짜는 방법에 대하여 수 많은 개발자들이 각자의 방식을 통해 공부하였을 것이고 그 방법은 분명 천차만별일 것이기 때문이다. 예를 들자면 어떠한 사람에게는 지저분하고 정리 되어있지 않는 책상으로 보이는 것이 그 책상의 주인에게는 잘 정리된 책상으로 보일 수 있을 것이다. 결국 정말 누구에게나 지저분해 보이는 코드가 아니라면 코드를 짠 당사자에게는 언뜻 가독성이 높을 것이라는 생각이 들었다.

      하지만 혼자 하는 것이 아닌 이후 새로이 팀에 합류할 사람들 또한 단번에 이해 가능해야 한다는 말에 개발은 혼자 하는 것이 아니라는 사실을 다시금 깨달았다. 많은 경험은 아니지만 프로젝트를 진행할 당시 코드 리뷰를 진행 했던 경험이 있었지만 문제가 될 수 있는 요소를 같이 찾는 과정에 불과했고 각자의 코딩 방식에 서로 개입하지 않았기에 각자 담당한 역할만 잘 소화해낸다면 충분할 거라는 생각을 갖고 있었기 때문인지 나의 코드를 다른 사람이 이어받을 수 있다는 생각을 전혀 하지 못했던 것 같다. 워밍업 클럽이 끝난다면 이전 프로젝트에서 작성하였던 코드를 다시 읽어보며 과연 타인에게도 읽기 좋은 코드였는지 오랜만에 읽어보는 자신에게도 막힘이 없었는지 확인해 보는 시간을 갖고 또 부족한 부분에 대해 파악하고 싶다는 생각이 들었다.

    2. 추상적 사고 기반의 이름 짓기

      이름 짓기에 대한 강의는 무척 간단해 보이면서도 굉장히 큰 깨달음을 주는 듯한 내용이었다. 예전부터 변수명, 함수명에 대한 표현의 중요성을 자주 접해왔지만 적절한 예시를 보지 못했기 때문인지 충분히 잘 해내고 있었다고 생각했지만 강의 안에서 차례로 큰 흐름에서 코드의 추상화 레벨을 맞추어 나가는 과정에서 추출해내고 이름을 붙이는 각 함수와 변수들을 통해 이름 짓기가 가독성에 얼마나 많은 정보를 전달 가능한 지 배울 수 있었다.

  2. 객체 지향 패러다임

     

     

    1. 관심사

      '단 하나의 관심사로 책임을 정의 하는 것' 그리고 '그것을 파악하는 눈'에 대한 공부는 굉장히 놀라웠던 것 같다. 단계적으로 관심사를 분리해나가는 과정에서 언뜻 완벽해 보이지만 높은 결합도는 계속해서 발견되었고 그것을 분리해 내는 과정은 인상적이었다. 관심사를 분리해 내는 것은 어떻게든 해낼 수 있을 것 같았지만 그 결합을 발견해내는 것은 어려운 일이었다. 그렇기에 클린 코드를 추구하며 결합도를 보는 눈을 끈임 없이 연습해야함을 느낄 수 있었다.

    2. " 객체에 메세지를 보내라! "

      setter의 위험성에 대해서는 수 없이 들어왔지만 getter의 필요성에 대한 의문은 단 한번도 가지지 않았던 나에게는 놀라운 사실이었다. 정말이지 익숙하지 않아 강의 도중 객체의 필드가 필요해 질 때마다 "지금이야말로 getter가 필요한 타이밍인가?"라는 생각이 수 없이 들었던 것 같다. 그리고 나는 개발을 할 때 불필요한, 코치님의 표현에 의하면 객체에게 굉장히 무례한 코드를 남발하였던 것 같다. 항상 왜 필요한 지, 반드시 필요한 것인지에 대한 의문을 제기할 줄 알아야함을 깨달을 수 있었다.

    3. SOLID

      각각의 원칙을 이론이 아닌 상황에 맞춰 직접 실습해 볼 수 있는 것은 좋았지만, 만일 혼자서 코드를 리팩토링하게 된다면 코드를 어떠한 원칙을 기반으로 수정을 해야겠다는 생각이 들었는지 다른 사람들에게 잘 설명할 자신이 없었다...
      SOLID 원칙을 이해하고 적용하는 것의 중요성과 반복적인 학습의 필요성을 느꼈다.

       

  3. 객체 지향 적용

    1. 완벽한 설계는 없다. 그 당시의 최선만 있을 뿐



      인터페이스, Value Object, 일급 컬렉션, Enum 등의 활용에 대한 많은 것을 배울 수 있었지만, 가장 흥미로웠던 과정은 도메인에 대해 이해하게 되는 과정이었던 것 같다. 객체 지향을 위해 활용하면 좋은 내용들은 많지만 그러한 것들은 결국 도메인에 대해 이해하고 그 필요성을 얻는 과정이 선행되었던 것 같다. 도메인을 설계하면서 생각해낸 개념이 아닌 개발해가는 과정에서 숨겨져 있던 도메인의 개념을 도출하고 그것을 언제든지 받아들일 수 있도록 대비할 수 있는 개발자가 되어야겠다는 생각이 들었다.


    강의 : Readable Code: 읽기 좋은 코드를 작성하는 사고법 (박우빈)

댓글을 작성해보세요.

채널톡 아이콘