All Articles

[JavaScript Patterns] 2장 기초

유지보수 가능한 코드란 다음과 같은 특징을 지닌다.

  • 읽기 쉽다.
  • 일관적이다.
  • 예측 가능하다.
  • 한 사람이 작성한 것처럼 보인다.
  • 문서화되어 있다.

단일 선언 패턴

함수 상단에서 let, const 선언을 한 번만 쓰는 패턴은 다음과 같은 이점들이 있다.

  • 함수에서 필요로 하는 모든 지역 변수를 한군데서 찾을 수 있다.
  • 변수를 선언하기 전에 사용할 때 발생하는 로직상의 오류를 막아준다.

단점은 디버깅할 때 선언부의 변수에 접근하기 어렵다.

function fun() {
  let a = 1,
      b = {},
      c = a + 3,
      i;

      //함수 본문
}

for 루프

//최적화되지 않은 푸르
for (let i = 0; i < arr.length; i++) {
  //arr[i] ..
}

이 패턴의 문제점은 루프순회마다 배열의 length에 접근한다는 점이다. arr가 평범한 배열이면 괜찮을 수도 있지만, DOM접근이 필요한 배열이라면 상당한 비용이 발생한다.

아래와 같이 배열의 length를 캐시하자.

for (let i = 0, max = arr.length; i < max; i++) {
  //arr[i] ..
}

for-in 루프

for-in 루프는 객체를 순회할 때 사용하는데, for-in으로 루프를 도는 것을 열거(enumeration)라고도 한다. for-in에서는 프로퍼티를 열거하는 순서가 정해져있지 않으므로 유의하자.

객체의 프로퍼티를 순회할 때는 프로토타입 체인을 따라 상속되는 프로퍼티들을 걸러내기 위해 hasOwnProperty()메서드를 사용해야한다.

오로지 자신의 property만 나올 수 있도록, 즉, prototype의 property를 걸러내도록 꼭 사용해야한다는 의미이다.

let man = {
  hands: 2,
  legs: 2,
  haed: 1
};

for (let i in man) {
  if (man.hasOwnProperty(i)) {
    //내용
  }
}

parseInt()를 통한 숫자 변환

parseInt()를 사용해서 문자열 -> 숫자로 변환하는 경우, 두 번째 인자에 꼭 기수를 넘겨줄 것! 두 번째 인자인 기수(radix, 진수)의 default 값이 10이 아니므로, 명확하게 꼭 써줘야 한다.

그 외..

  • 전역 변수 최소화
  • 암묵적 type casting 피하기 (== 말고 === 사용)
  • 코드 작성 규칙 준수(공백, 들여쓰기, 중괄호, 세미콜론, 명명 규칙)