본문 바로가기

프로그래밍/Node.js

[JavaScript] Strict Mode란?

반응형

 

'use srict'???

'use strict';

Strict Mode란 ECMAScript 5에서 소개된 것으로 JavaScript로 작성된 코드가 제한된 버전을 선택하여 작성하게끔 하는 방법이다.

 

Strict Mode에서는 기존에 조용하게 무시되던 에러들(Silent Errors)이 Error로 Throw될 수 있도록 처리가 된다.

JavaScript의 장점이자 단점인 엄격한 방식의 코드 작성의 결핍을 일부 채워줄 수 있는 방법이 된다.

 

비슷한 맥락에서 JavaScript Engine의 최적화 작업이 어려워지는 일부 코드 상의 실수들을 바로잡을 수 있도록 지원한다.

간혹 Strict Mode 하에서 작성된 JavaScript 코드가 그렇지 않은 코드보다 빨리 작동하기도 한다.

 

Strict Mode라는 표현과 같이 JavaScript를 보다 안전하게 사용할 수 있도록 지원하는데,

ECMAScript의 Next Version에서 정의 되는 문법을 사용하지 못하도록 하고,

Global 변수에 직접 접근하는 것과 같이 상대적이로 안전하지 않은 코드(unsafe code)가 무분별하게 사용되는 것을 방지한다.

 

Strict Mode의 사용법

기본적으로 Strict Mode는 전체 Script 또는 부분 함수에 적용할 수 있으나, Block 구문에서는 사용할 수 없다.

 

객체를 불변의 속성으로 만드는 Object.freeze를 strict mode와 그렇지 않은 경우 결과는 아래와 같다.

'use strict';

const pet = { name: 'Berry', type: 'dog' };
const PetObj = Object.freeze(pet);
PetObj.name = 'Candy';
console.log(PetObj);

// Uncaught TypeError: Cannot assign to read only property 'name' of object '#<Object>'
    at <anonymous>:5:13

const pet = { name: 'Berry', type: 'dog' };
const PetObj = Object.freeze(pet);
PetObj.name = 'Candy';
console.log(PetObj);

// {name: "Berry", type: "dog"}

Strict Mode에서는 불변의 속성으로 만들어진 Object에 새로운 값을 할당하는 순간 즉, 런타임 과정에서 에러를 발생하도록 하지만, 일반 모드에서는 에러 없이 Frozen된 객체가 리턴되고 있다.

 

이러한 예제 외에도 Strict Mode와 일반 Mode에서 코드 실행 시 서로 다른 결과가 발생하는 경우가 있다.

그리고 그런 결과의 차이는 런타임 시 에러의 발생 유무로 나타나는데, 

JavaScript의 경우 Type에 대한 정의가 없기 때문에 발생하는 코드의 불분명성 등이 있는데, 이러한 이슈를 줄일 수 있고 정상 응답이 아닌 에러 응답으로 노출하여 디버깅을 보다 용이하도록 하는 장점이 있을 것이다.

 

 

References

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Strict_mode

 

반응형