자바스크립트 코딩/테스팅 기본 원칙

업데이트:

자바스크립트의 특성

자바스크립트 함수는 다른 함수 내부에 중첩될 수 있으며, 이는 스코프를 다루는 중요한 수단이다!

  • 자바스크립트는 일급 객체인 함수를 인자로 주고 반환값으로 돌려받는다.
  • 자신만의 메서드와 프로퍼티를 가진다.

항상 함수 오버로딩을 고려하자

  • 함수의 argments를 통해 구현할 수 있다.

  • line.x = function(funcTogetX){
      if(!arguments.length) return getX;
      getX = funcToGetX;
      return line;
    }
    

함수 객체를 반환해서 호출 체이닝을 가능하게 하자

  • 위 함수는 line이라는 함수 객체를 반환함으로써 호출 체이닝을 가능하게 한다.

  • lineGenerator = rj3.svg.line()
      .x(d => {return d.x;})
      .y(d => {return d.y;})
    

덕 타이핑을 잘 활용하라. 적은 코드로도 객체를 폭넓게 다룰 수 있다.

  • “오리처럼 생겨서 오리처럼 걷고 오리처럼 소리를 낸다면 그건 오리다.”

  • 객체 프로퍼티 확인 방법

    if ('x' in something) // something이 x라는 프로퍼티를 소유 또는 상속하는가?
    if (something.hasOwnProperty('x')) // something이 x를 상속이 아닌 자신만의 프로퍼티로 소유하는가?
    

클로저는 자바스크립트의 강력한 설계 요소다. 모든 함수는 클로저다.

  • 클로저는 함수 같은 객체지만, 함수의 생성 당시 환경을 내부에 고스란히 간직한다.

this를 잘 이해하자

  • this란 대충 this가 있는 곳의 함수를 호출하는 ‘점(.) 앞의 객체’라고 할 수 있다.
  • this는 자신이 모습을 드러낸 지점의 함수 또는 그 함수를 감싸는 객체를 가리킨다고 착각하기 쉽다.
  • 절대 아니다. this는 함수를 호출한 객체를 참조한다.

자바스크립트는 싱글 스레드로 움직인다.

  • 비동기 프로그래밍이 요구된다.
  • 자바스크립트 엔진은 이벤트 루프에서 한 번에 하나씩 함수를 꺼내 실행한다.
  • 프로세서를 독차지할 염려가 없다.

함정을 피하자

스크립트는 모듈이 아니다

  • 데이터와 함수를 적절히 캡슐화한 모듈을 만들자.

스코프는 중첩 함수로 다스리자

  • es6에서는 const, let

SOLID 원칙

단일 책임 원칙

모든 클래스는 반드시 한 가지의 변경 사유가 있어야 한다.

개방 / 폐쇄 원칙

모든 소프트웨어 개체는 확장 가능성은 열어두되 수정 가능성은 닫아야 한다.

어떤 경우라도 실행 코드를 변경하지 말고 어떻게든(상속 등) 재사용하고 확장하라.

리스코프 치환 원칙

어떤 타입에서 파생된 타입의 객체가 있다면 이 타입을 사용하는 코드는 변경하지 말아야 한다.

함수의 기반 클래스와 서브 클래스의 로직(하는 일)이 다르면 안된다.

인터페이스 분리 원칙

인터페이스는 기능을 구현하지 않고 서술만 한 코드 조각이다.

기능이 많은 인터페이스는 더 작게 응축시킨 조각으로 나누어야 한다.

의존성 역전 원칙

상위 수준 모듈은 하위 수준 모듈에 의존해서는 안 되며 이 둘은 추상화에 의존해야 한다.

의존성 주입과 연관되는 개념

  • 클래스 A가 클래스 B의 서비스가 필요할 때 A는 B를 생성하지 않는다. 대신 A생성자에 건넨 파라미터 하나가 B를 서술하는 인터페이스 역할을 한다. 이제 A는 B에 의존하지 않고 자신의 인터페이스만 바라본다. A가 생성되면 구체화한 B를 넘겨받는다. B 역시 인터페이스에 의존한다.

DRY원칙

반복하지 마라. 모든 지식 조각은 딱 한번만 나와야 한다.

Reference

“자바스크립트 패턴과 테스트”, 래리 스펜서

태그: ,

카테고리:

업데이트:

댓글남기기