좋은 소프트웨어 만들기

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

  • 자바스크립트 함수는 메서드/프로퍼티를 지닌 객체로, 다른 언어의 함수보다 훨씬 유연하고 강력하다.

  • 자바스크립트에서 객체 지향적 오버로딩 개념은 함수의 arguments를 보고 여기에 뭔가 맞추는 행위다.

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


  • 덕 타이핑

    • 사람이 오리처럼 행동하면 오리로 봐도 무방하다라는게 **덕 타이핑(Duck Typing)**이다.

    • 타입을 미리 정하는게 아니라 실행이 되었을 때 해당 Method들을 확인하여 타입을 정한다.

    • 장점

      • 타입에 대해 매우 자유롭다.

      • 런타임 데이터를 기반으로 한 기능과 자료형을 창출하는 것

    • 단점

      • 런타임 자료형 오류가 발생할 수 있다 런타임에서, 값은 예상치 못한 유형이 있을 수 있고, 그 자료형에 대한 무의미한 작업이 적용된다.

      • 이런 오류가 프로그래밍 실수 구문에서 오랜 시간 후에 발생할 수 있다

      • 데이터의 잘못된 자료형의 장소로 전달되는 구문은 작성하지 않아야 한다. 이것은 버그를 찾기 어려울 수도 있다.


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

  • 자바스크립트에서 this는 설계 관점에서 절호의 기회가 될 수 있다.


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

    • 자바스크립트는 이벤트 루프(event loop)에서 한 번에 하나씩 함수를 꺼내 실행한다.

  • 대규모 시스템에서 자바스크립트 함정을 피하라

    • 스크립트는 모듈이 아니다.

    • 스코프는 중첩 함수로 다스린다.

    • 규약을 지켜 코딩한다.

      • 함수 인자에 특정한 조건이 있다면 그 값을 꼭 검증해야 한다.

  • 소프트웨어 공학 원칙을 적용하라

    • SOLID 원칙

    🔥 **S**ingle Responsibility Principle(단일 책임 원칙) **O**pen/Closed Principle(개방/폐쇄 원칙) **L**iskov Substitution Principle(리스코프 치환 원칙) **I**nterface Segregation Principle(인터페이스 분리 원칙) **D**ependency Inversion Principle(의존성 역전 원칙)

    • 단일 책임 원칙

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

    • 개방/폐쇄 원칙

      • “모든 소프트웨어 개체는 확장 가능성은 열어 두되 수정 가능성은 닫아야 한다”라는 원칙

    • 리스코프 치환 원칙

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

      • 한 객체를 다른 객체에서 파생하더라도 그 기본 로직이 변경되어서는 안된다는 뜻

    • 인터페이스 분리 원칙

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

      🔥 인터페이스 사용부는 ‘뚱뚱한’ 전체가 아니라 아주 작은 인터페이스만 바라보면 된다.

    • 의존성 역전 원칙

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


    • DRY 원칙

      🔥 반복하지 마라(Don’t Repeat Yourself)


바르게 유지되는 코드 작성

  • 단위 테스트

    🔥 단위(unit) : 특정 조건에서 어떻게 작동해야 할지 정의한 것

    • 준비(arrange) : 단위를 실행할 조건을 확실히 정하고, 의존성 및 함수 입력 데이터를 설정

    • 실행(act) : 단위를 실행

    • 단언(assert) : 예상대로 단위가 작동하는 확인


  • 테스트 주도 개발(Test-Driven Development, TDD)

    • 적색(red) : 완벽이 변경하면 성고하나 그렇게 되기 전까지는 반드시 실패하는 단위 테스트를 작성

    • 녹색(green) : 테스트가 성공할 수 있을 만큼만 ‘최소한으로’ 코딩

    • 리팩터(refactor) : 애플리케이션 코드를 리팩토링하며 중복을 제거

Last updated