# anti-pattern

좋은 소프트웨어에는 다양하고 공통적인 디자인패턴들이 적용되어있는데,

나쁜 소프트웨어도 마찬가지로 다양하고 안 좋은 패턴들이 있다.

여기에선 구조상 좋지 않고 피해야할 패턴들을 소개한다.

# 첫번째 사례

var a = 1;
console.log(a);

// some code

function someAddFunc(b) {
  a = a + b;
}

// ...some code

console.log(a);

위 코드는 함수내에 선언된 변수나 파라미터변수가 아닌 외부 변수의 값을 변경하고 있다.

위와 같은 구조의 코드는 상당히 나쁜 패턴이고 피해야한다.

변수 선언과 함수선언 사이에 a값을 변경하거나,

나중에 a 값을 사용하려고 했을때 함수 선언과 그 변수의 사용하는 시점 사이의 코드가 많다면

결과값을 예측하기가 쉽지 않고 사이드이펙트 우려가 크다.

# 두번째 사례

function someAddFunc2(a, b) {
  a = a || 1;
  b = b || 2;
  return a + b;
}

console.log(someAddFunc2()); //3
console.log(someAddFunc2(2, 2)); //4

예제에서는 괜찮아 보일 수 있지만, 가독성이 떨어지고 사이드이펙트 우려도 있습니다.

(paramter 변수가 primitive type이 아닌 경우를 생각해보세요.)

es6에서는 default paramter를 제공합니다.

function someAddFunc2(a = 1, b = 2) {
  return a + b;
}

console.log(someAddFunc2()); //3
console.log(someAddFunc2(2, 2)); //4

코드가 훨씬 간결하고 가독성도 더 좋으며,

사이드이펙트에 대한 우려도 줄어들었습니다.