자바스크립트는 왜 그모양일까?
Sep. 5, 2021, 7:35 am.

By Jaekwon Han

Jaekwon Han leads Front-end team at 29CM and has worked as a Front-end developer and an UI designer.

Program

모든 소스 단위에 자동으로 만들어지는 객체와 함수들이 있습니다. ... 전부 ECMAScript 표준에서 제공하는 것입니다.

전역 변수

전역 변수는 악의 근원입니다. 함수 바깥에 변수를 선언하는 더 좋은 방법은 모듈(module) 스코프에 선언하는 것입니다.
소스 유닛의 코드 몸체는 한 번만 실행됩니다. 즉, 임포트하는 여러 주체들은 동일한 익스포트 내용을 공유한다는 것이죠.
거시적 수준에서 좋은 프로그래밍은 좋은 모듈 설계에 달렸습니다. 좋은 모듈은 응집도가 높습니다. 다시 말해 모듈의 모든 요소가 어우러져 하나의 목적을 이루기 위해 함께 동작한다는 것이죠. 좋은 모듈들은 약하게 결합되어 있습니다. 상호 의존적인 모듈은 결국 서로 강하게 결합할 수밖에 없죠.

this

객체가 가지고 있지 않은 속성의 값을 얻으려고 하면, ... 프로토타입의 프로토타입의 ... 속성 값을 찾습니다. 이 과정은 프로토타입이 더 이상 없을 때까지 반복됩니다.
프로토타입을 사용하는 가장 큰 이유 중 하나는 메서드를 저장하는 공간으로 쓰기 위함입니다. 비슷한 객체들이 전부 비슷한 메서드를 가지는 경우가 많기 때문에, 이런 메서드들을 하나의 공유 프로토타입에만 저장한다면 메모리를 절약할 수 있겠죠.
그렇다면 프로토타입에 있는 함수가 어떤 객체에서 동작하고 있는지는 어떻게 알 수 있을까요? 그것을 알아내기 위해서 this가 등장하게 됩니다.
오직 메서드 호출만 this 바인딩을 제공받죠.
this는 보안이나 신뢰성 위험을 초래할 수 있습니다. 함수가 배열에 저장되어 나중에 호출된다면, 해당 함수를 호출할 때는 해당 배열에 대한 참조가 this로 제공됩니다.
모든 변수는 정적으로 바인딩됩니다. 이게 좋은 것이죠. 오직 this만이 동적으로 바인딩되며, 결국 함수를 만든 쪽이 아닌 함수를 호출하는 쪽이 this 바인딩을 결정합니다.

클래스 없는 자바스크립트

상속은 클래스 사이의 강한 결합도를 유발하죠. 한 클래스에 가해지는 변경은 의존적인 다른 클래스에 문제를 일으킵니다. ... 좋은 설계에서는 속성들이 숨겨져 있고 메서드들이 속성 값을 단순히 변경하는 것이 아닌 트랜잭션을 처리하지만, 이렇게 만들어진 경우는 드물죠.

컴포지션

'거의 다 같지만 약간 다른' 것을 만드는 대신, 여기서 조금, 저기서 조금 가져와서 만들 수 있습니다.