자바스크립트는 꽤 오랫동안 호환성 이슈 없이 발전해왔습니다. 기존의 기능을 변경하지 않으면서 새로운 기능이 추가되었죠.

덕분에 기존에 작성한 코드는 절대 망가지지 않는다는 장점이 있었습니다. 하지만 자바스크립트 창시자들이 했던 실수나 불완전한 결정이 언어 안에 영원히 박제된다는 단점도 생겼습니다.

이런 상황은 ECMAScript5(ES5)가 등장하기 전인 2009년까지 지속되었습니다. 그런데 새롭게 제정된 ES5에서는 새로운 기능이 추가되고 기존 기능 중 일부가 변경되었습니다. 기존 기능을 변경하였기 때문에 하위 호환성 문제가 생길 수 있겠죠? 그래서 변경사항 대부분은 ES5의 기본 모드에선 활성화되지 않도록 설계되었습니다. 대신 "use strict"라는 특별한 지시자를 사용해 엄격 모드(strict mode)를 활성화 했을 때만 이 변경사항이 활성화되게 해놓았습니다.

“use strict”

지시자 "use strict", 혹은 'use strict'는 단순한 문자열처럼 생겼습니다. 하지만 이 지시자가 스크립트 최상단에 오면 스크립트 전체가 “모던한” 방식으로 동작합니다.

예시:

"use strict";

// 이 코드는 모던한 방식으로 실행됩니다.
...

명령어를 그룹화하는 방식인 함수에 대해선 곧 학습하도록 하겠습니다. 함수에 대해 학습하기 전에, "use strict"는 스크립트 최상단이 아닌 함수 본문 맨 앞에 올 수도 있다는 점을 알아두시기 바랍니다. 이렇게 하면 오직 해당 함수만 엄격 모드로 실행됩니다. 엄격 모드는 대게 스크립트 전체에 적용되지만 말이죠.

"use strict"는 반드시 최상단에 위치시키세요.

"use strict"는 스크립트 최상단에 있어야 한다는 점을 잊지 마세요. 그렇지 않으면 엄격 모드가 활성화되지 않을 수도 있습니다.

다음 코드에서는 엄격 모드가 활성화되지 않습니다.

alert("some code");
// 하단에 위치한 "use strict"는 스크립트 상단에 위치하지 않으므로 무시됩니다.

"use strict";

// 엄격 모드가 활성화되지 않습니다.

"use strict"의 위에는 주석만 사용할 수 있습니다.

use strict를 취소할 방법은 없습니다.

자바스크립트 엔진을 이전 방식으로 되돌리는 "no use strict"같은 지시자는 존재하지 않습니다.

일단 엄격 모드가 적용되면 돌이킬 방법은 없습니다.

브라우저 콘솔

개발한 기능을 테스트하기 위해 브라우저 내 콘솔을 사용하는 경우, 기본적으로 use strict가 적용되어있지 않는다는 점에 주의하셔야 합니다.

use strict가 기능이 동작하는 방식에 영향을 주는 경우라면 기대치 않았던 결과를 얻을 수 있기 때문입니다.

이럴 땐 'use strict’를 입력한 후, Shift+Enter키를 눌러 줄 바꿈 해 원하는 스크립트를 테스트해 볼 수 있습니다. 아래와 같이 말이죠.

'use strict'; <Shift+Enter를 눌러 줄 바꿈 함>
//  ...테스트하려는 코드 입력
<Enter를 눌러 실행>

이 기능은 Firefox와 Chrome 같은 유명한 브라우저에서 대부분 사용 가능합니다.

만약 콘솔 창에 use strict를 입력하는 게 불가능하다면, use strict를 적용하는 가장 확실한 방법은 아래와 같이 코드를 작성하는 것입니다.

(function() {
  'use strict';

  // ...테스트하려는 코드...
})()

항상 "use strict"를 사용하세요.

엄격 모드와 “기본” 모드의 차이점에 대해선 아직 다루지 않았습니다.

다음 챕터에서 자바스크립트에 대해서 좀 더 학습하면서 엄격 모드와 기본 모드의 차이점에 대해 알아볼 예정인데, 다행히도 차이점이 그리 많지는 않습니다. 두 모드의 차이점은 개발을 용이하게 해줍니다.

지금까지 살펴본 엄격 모드에 대해 간단히 정리해 보도록 하겠습니다.

  1. "use strict" 지시자는 자바스크립트 엔진을 “모던한” 모드로 전환해줍니다. 이 모드에선 몇 가지 내장 기능의 동작 방식이 변경됩니다. 자세한 변경사항은 추후 살펴보도록 하겠습니다.
  2. "use strict"를 스크립트나 함수 본문 최상단에 위치시키면 엄격 모드가 활성화됩니다. “클래스”, “모듈” 같은 몇몇 기능은 자동으로 엄격 모드가 활성화되도록 합니다.
  3. 모든 모던 브라우저는 엄격 모드를 지원합니다.
  4. 스크립트는 항상 "use strict"로 시작하길 권장합니다. 특별한 언급이 없으면 이 튜토리얼에 등장하는 모든 예시엔 엄격 모드를 적용할 예정입니다.
튜토리얼 지도

댓글

댓글을 달기 전에 마우스를 올렸을 때 나타나는 글을 먼저 읽어주세요.
  • 추가 코멘트, 질문 및 답변을 자유롭게 남겨주세요. 개선해야 할 것이 있다면 댓글 대신 이슈를 만들어주세요.
  • 잘 이해되지 않는 부분은 구체적으로 언급해주세요.
  • 댓글에 한 줄짜리 코드를 삽입하고 싶다면 <code> 태그를, 여러 줄로 구성된 코드를 삽입하고 싶다면 <pre> 태그를 이용하세요. 10줄 이상의 코드는 plnkr, JSBin, codepen 등의 샌드박스를 사용하세요.