1.7 엄격모드
ES5에 엄격 모드(strict mode)가 추가되고, 선택 사항으로 엄격 모드를 사용할 수 있게 되면서 더 나은 JS 프로그램을 만들기 위한 장치가 마련되었다.
엄격 모드를 사용하면 손실보다 이득이 크다. 하지만, 레거시(legacy)라 부르는 기존 코드에 기반한 관성은 바꾸기 어렵다. 이런 이유로 엄격 모드는 기본이 아닌 선택 사항이다.
왜 엄격 모드를 사용해야 할까?
할 수 있는 것에 제약을 두는 모드가 아니다. JS 엔진이 코드를 최적화하고 효율적으로 실행할 수 있게 해주는 안내 가이드 역할을 하는 모드이다. JS 코드 대부분은 여러 개발자에 의해 작성된다. 린터(linter) 같은 도구를 사용해 엄격 모드로 작업한다면 비엄격 모드에서 발생할 수 있는 실수와 문제를 미연에 방지할 수 있어 협업이 수월하다.
엄격 모드에서만 활성화되는 가이드 대부분은 초기 오류 형태를 띤다. 초기 오류는 구문 오류는 아니지만 코드 실행 전 컴파일 단계에서 잡아낼 수 있는 오류를 의미한다. (ex. 함수에 동일한 이름을 가진 매개변수가 있는 경우 오류 발생)
엄격 모드에서만 활성화되는 가이드 몇 가지는 런타임에서만 발견할 수 있다. (ex. 런타임에 this의 값을 찾을 수 없는 경우, this에 글로벌 객체 대신 undefined를 할당하는 가이드)
엄격 모드 적용하기
🔗 파일 대상으로 적용되는 엄격 모드는 전처리 구문 "use strict"; 가 있는 경우에 활성화된다. 이 구문 앞에는 주석,공백 이외에는 허용되지 않는다.
🔗 함수 단위. 파일 단위 엄격 모드와 동일한 규칙이 적용된다.
파일 단위 엄격 모드가 적용되면 함수에는 엄격 모드 전처리 구문을 사용할 수 없다. 파일에만 or 함수에만 둘 중 하나를 택해야 한다.
함수 단위 엄격 모드는 비엄격 모드에서 작성했던 기존 프로그램에 점진적으로 엄격 모드를 적용할 때만 사용하는게 좋다. 그게 아니라면, 파일 모드에 한 번에 적용하는게 더 낫다.
❓ 엄격 모드가 기본 모드가 될 날이 올까?
하위 호환성에서 다뤘던 부분 처럼 엄격 모드가 기본이 되면 기존 코드가 엄격 모드 가이드로 인해 작동하지 않을 위험이 있다. 엄격 모드는 기본 모드가 될 수 없다. 하지만, 엄격 모드가 기본이 아니어서 발생할 수 있는 '불확실성'을 줄여주는 여러 요인이 있다.
원본 코드가 비엄격 모드에서 작성되었더라도 트랜스파일 처리된 코드는 엄격 모드를 준수한다.
상용 환경에 배포하는 JS 코드 대부분은 트랜스파일 처리된다. 이미 엄격 모드를 준수한다고 가정할 수 있다.
JS 코드를 작성할 때 ES6 모듈 형식으로 작성하는 경우가 많고, 이런 현상이 더욱 심화되고 있다는 사실 때문에 불확실성이 점차 줄어들고 있다. ES6 모듈은 기본이 엄격 모드이므로 ES6 모듈 형식으로 만든 파일은 자동으로 엄격 모드를 준수한다.
Last updated