변수선언 그 참을 수 없는 가벼움

이미지

동료 개발자와 페어 프로그래밍을 하다가 아래와 같은 스타일로 변수선언을 하는 것을 보고, 변수의 선언과 사용간의 거리가 너무 멀어서 좁혔으면 좋겠다고 피드백을 드렸다.

function doSomething() {

  const { lion, tiger, duck, dog, cat } = animal

  ...
  doSomething(lion)
  ...

  ...
  doSomething(tiger)
  ...

  ...
  doSomething(duck)
  ...

  ...
  doSomething(dog)
  ...

  ...
  doSomething(cat)
  ...

}

가령 나는 아래 방식이 더 좋다고 생각한다.

function doSomething() {

  const { lion } = animal
  doSomething(lion)
  ...

  const { tiger } = animal
  doSomething(tiger)
  ...

  const { duck } = animal
  doSomething(duck)
  ...

  const { dog } = animal
  ...
  doSomething(dog)
  ...

  const { cat } = animal
  ...
  doSomething(cat)
  ...
}

(물론 좀 더 근본적인 원인은 함수가 너무 많은 일을 하기 때문에 함수를 더 잘게 쪼개야 하는 신호일 수도 있다.)

사실 나는 당연 하다고 생각했던 부분이라 충돌 지점이 생길거라고는 생각하지 못하였다. 충돌 지점이 생겼기 때문에 부랴부랴 근거를 찾아봤다. (충돌지점 오히려 좋아)

내가 근거로 제시한 것은 아래와 같다.

클린코드 100p - 세로 밀집도

줄바꿈이 개념을 분리한다면 세로 밀집도는 연관성을 의미한다. 즉 서로 밀집한 코드 행은 세로로 가까이 놓여야 한다는 뜻이다 … 중략


동료 개발자 분께서 함수의 최상단에 모든 변수를 선언 하는 방식을 선호하는 이유로 할당된 변수의 개수로 함수의 크기를 가늠한다는 의견을 주셨다.

스타일의 차이(소설로 치면 문체의 차이) 정도이기 때문에 공감대 형성이 서로 크게 되지 않으면 서로 존중하는 것이 더 좋다고 생각한다. 따라서 절충안으로 각자가 생각하는 방식대로 작성하고, 함수의 크기가 너무 클때 리팩터링을 진행하는 방향으로 결정하였다.

근거 보충 가즈아ㅏㅏㅏ

마침 이 계기로 왜 세로로 밀집한 코드 가 더 좋은지 내 빈약한 근거를 보충하는 시간이 되었다.

근거를 보충하자면 아래와 같다.

SO : Is defining every variable at the top always the best approach?

따라서 나는

해체할당을 할때 변수 선언과 사용하는 코드는 서로 가까이 두는게 더 좋은거 같다 (코드 세로 밀집도)


노파심에 말하지만 함수 전체 컨텍스트에서 사용해야 하는 경우는 당연히 최상단에 놓는 것을 선호한다.

function doSomethingDaily() {
  const { today } = createDateContext();

  ..
  today...
  ..

  ...
  today..
  ...

  ..
  today
  ..
}