함수 분리는 항상 좋은 것일까?

·

2 min read

내가 안티 패턴 생성자였다.

무슨 일이 있었냐면..

  • audio resource 가져오는 api 호출과, api 호출 이후에 audio element에 설정해주는 로직이 함께 쓰이니까 하나로 묶자.

  • 부모와 자식 모두가 쓰니까, 나는 함수 하나로 사용하고 싶어!

  • axios 에러 체크도 모두 하나의 함수가!!! 너넨 한 몸이니까!

  • 그리고 에러 발생시 아래 로직 실행되지 않도록 얼리 리턴까지 처리해야하니까.. 값 체크를 위해 boolean 값을 리턴해야지. 호출부에서는 boolean 값 여부를 체크해서 얼리 리턴 해주면 근사해!

  • 해당 함수의 이름은 fetch와 set을 다하니까 그래 명확한게 좋지? fetchAndSetAudioUrl 이면 충분해!

코드리뷰를 받았다

땡떙님, 이름에서부터 나타나듯이 단일 책임 원칙에서 벗어나는 것 같아요!

early return을 하기 위해 boolean값을 추가하고 리턴하는 방식이 자연스럽지 못한것 같아요!

fetch와 set이 뒤섞인 느낌이에요.

처음엔 몰랐다. fetchAndSetAudioUrl함수가 범인이라는 걸..

  • 하나의 함수를 묶어서 호출하는게 추상화라고 생각했다.

  • 그런데 말입니다.. 함수 분리를 분리함으로써..리턴값이 필요해지고, try catch문을 이중으로 써야하고.. error 객체를 처리할 필요가 없는데도 던지고..로직이 꼬인다 꼬여..api 호출이 포함된 함수로 분리하니까 매번 추가되는 try catch문은 어떻구요..

여기서 질문하게 되었다. 이 함수 진짜 존재해야 할까?

  • 함수 분리가 좋은 건, 그로 인해 이득이 있어야 한다.

    • 단일 책임 원칙을 지키는가

    • 가독성이 개선되었는가

    • 함수 줄수를 줄였는가

  • 그게 아니라면 불필요한 질문일 수 있으니 또 질문해야한다.

    • 이 함수 분리 꼭 필요한가?

    • 함수 네이밍이 명확하지 않으면 단일책임원칙을 어기고 있는것이다. 특히 And 키워드가 쓰이면 이것은..진정한 스멜이지..

그래서 느낀 것..

  • 의도를 가지고 코드를 작성하자. 무엇을 개선하려고 하는지 스스로 물어보고 명확한 의도가 드러나게 코드를 짜자

  • 그럼에도 불구하고 코드 스멜 맡아서 더 좋는 방법을 찾느라 토요일 쓴 것 칭찬해!! 하나씩 배워나가자~!

이 경험으로 하고싶은 액션 아이템