[JavaScript] use strict (엄격 모드)

'use strict'는  javascript의 초기 설계에서 발생한 허점이나 비일관성 때문에 생길 수 있는 잠재적인 오류를 방지하고, 코드를 보다 안전하고 예측 가능하게 작성하도록 돕는 기능이다.


자바스크립트는 기존의 기능을 유지하면서 계속해서 새로운 기능들을 추가하며 발전되어왔다.


기존의 코드를 수정하지 않고 기능을 추가한 덕분에 기존에 작성한 코드는 호환성과 관련되어 문제가 발생하지 않았다. 


하지만 자바스크립트 개발 초기에 발생된 실수나 불완전한 결정이 수정되지 않고 계속해서 유지되어 발전된다는점이 문제였다.


이런 방식으로 자바스크립트는 ECMAScript5(ES5)가 등장하기 전까지 기능만 추가되며 계속 발전되어왔다. 그런데 ES5부터 새로운 기능을 추가 뿐만아니라 기존 기능 중 일부를 수정하였다.


이전과 달리 기존 기능을 수정하였기 때문에 코드의 하위 호환성 문제가 발생할 가능성이 생기게 되었다. 


그래서 이런 호환성 문제를 해결하기위해 수정된 기능들이 'use strict'라는 특별한 지시자를 사용해 엄격 모드(strict mode)를 활성화 했을 때만 적용되도록 개발되었다.


'use strict'는 단순한 문자열처럼 생겼다. 하지만 이 특별한 지시자가 스크립트 최상단에 오면 스크립트 전체가 “모던한” 방식으로 동작하게 된다.


'use strict'는 스크립트 최상단에 작성되어야하며 그렇지 않으면 엄격 모드가 활성화되지 않을 수도 있다.


'use strict' 스크립트 최상단이 아닌 함수 본문 앞에 수도 있다. 이렇게 작성하면 오직 해당 함수에만 엄격 모드가 적용된다.



자바스크립트는 flexible한 언어이다. flexible한것은 프로그래밍에있어서 많은 문제점을 발생시킬 수 있다. 

자바스크립트에서는 선언되지 않은 변수에 값을 할당한다던지 기존에 존재하는 프로토타입을 변경한다던지와 같은 다른 언어에서는 볼 수 없는 유연함이 존재한다.

이러한 유연함을 제한해주는것 또한 'use strict'의 역할 이다.


a = 6;

console.log(a); // 6

이렇게 선언되지 않은 a라는 변수에 6을 대입하여 실행하면 6을 반환한다.









하지만 'use strict' 를 선언하면

'use strict'
a = 6;

console.log(a); // error


이렇게 에러를 발생한다.



특별한 지시자 'use strict' 를 사용하여 Strict Mode(엄격 모드)로 개발하게되면 자바스크립트 엔진이 조금 더 효율적으로 빠르게 자바스크립트를 분석할 수 있기 때문에 코드를 실행하는데 있어서 조금 더 나은 성능개선을 기대해볼 수 있으며 javascript의 초기 설계 결함을 해결할 수 있고 명확하고 일관된 코드를 작성할 수 있게되어 조금 더 견고하게 프로그램을 개발할 수 있다.


es6에서는 Strict Mode(엄격 모드)가 기본으로 설정되어 있기 때문에 'use strict'를 작성하지 않아도 Strict Mode로 실행된다.

댓글