자바스크립트는 오랫동안 호환성 이슈 없이 발전해왔다. 기존 기능을 변경하지 않으면서 새로운 기능을 추가해왔다.
덕분에 기존 코드는 절대 망가지지 않는다는 장점이 있었지만, 초창기 생긴 실수나 불완전한 결정이 자바스크립트라는 언어 안에 영원히 박제되었다는 단점도 존재한다.
ECMAScript5(ES5)가 등장하고 새롭게 제정된 ES5에서는 새로운 기능이 추가되고 기존 기능 중 일부가 변경되었다. 그러면 하위 버전에 호환성에 문제가 생겼어야 했지만, 변경 사항 대부분은 ES5의 기본 모드에선 활성화되지 않도록 설계하였고, 대신 use strict
라는 특별한 지시자를 사용해 엄격 모드(strict mode)를 활성화 했을 때, 이 변경사항들이 활성화되게 해놓았다.
지시자 "use strict"
, 'use strict'
는 단순 문자열처럼 생겼다. 하지만 이 지시자가 스크립트 최상단에 오면 스크립트 전체가 엄격한 방식으로 동작한다.
"use strict"
// 이 코드는 이제 엄격해
...
"use strict"
는 스크립트의 최상단이 아닌 함수 본문의 맨 앞에 올 수도 있다. 이렇게 하면 오직 해당 함수에만 엄격 모드로 실행이 된다. 하지만 보통의 엄격 모드는 대개 스크립트 전체에 적용한다.
"use strict"
는 반드시 최상단에 위치해야한다.
그렇지 않으면 엄격 모드가 활성화되지 않을 수 있다.alert("foofoo") // 하단에 위치한 "use strict"는 스크립트 상단에 위치하지 않으므로 무시된다. "use strict" // 엄격 모드가 활성화되지 않는다.
"use strict"
위에는 오로지 주석만 사용 할 수 있다.
"use strict"
는 취소할 방법이 없다.
자바스크립트 엔진을 이전 방식으로 되돌리는"no use strict"
같은 지시자는 존재하지 않는다.
엄격 모드가 적용되면 돌이킬 수 없다.
개발 기능을 테스트하기 위해 브라우저의 콘솔을 사용하는 경우, 엄격 모드가 적용되어 있지 않다는 점에 주의해야 한다.
"use strict"
에 영향을 받은 경우라면 개발자는 기대하지 않았던 결과를 얻을 수 있기 때문이다.
그렇다면 어떻게 콘솔에서 "use strict"
를 사용할 수 있을까?
"use strict"를 콘솔에 최상단에 입력한 뒤에 줄바꿈을 해 원하는 스크립트를 입력하면 된다.
"use strict";
// ... 테스트 코드
<Enter>
이 기능은 Firefox, chrome 같은 유명 브라우저에서 대부분 사용 가능하다.
브라우저가 오래 되어 콘솔창에 "use strict"
를 입력하는게 불가능하다면(거의 가능하겠지만), "use strict"
를 아래 코드처럼 래퍼로 감싸면 된다.
(function() {
"use strict";
// ... 테스트 코드
})()
모던 자바스크립트는 클래스와 모듈이라는 진일보한 구조를 제공한다. 이 둘을 사용하면 "use strict"
가 자동으로 적용되기 때문에 따로 스크립트에 "use strict"
를 붙힐 필요가 없어진다.
또한 필요성에 대해 묻는다면 엄격 모드와 비 엄격 모드의 차이점을 비교하면 알 수 있지만, 기능적 큰 차이보단 개발자의 삶의 질이 높아진다는 점에서 필요성이 있다고 볼 수 있겠다.