JavaScript 스트릭트 모드(Strict Mode)란?
스트릭트 모드(Strict Mode)는 ECMAScript 5(ES5)에서 도입된 JavaScript의 실행 방식입니다. 일반적인 JavaScript 코드에서는 조용히 통과되어 놓치기 쉬운 오류들이 스트릭트 모드에서는 명시적인 에러로 발생합니다. 이로 인해 디버ging이 훨씬 수월해지고, 개발자가 사소한 실수를 미리 잡아낼 수 있어 전반적인 코드 품질이 향상됩니다.
특히 스트릭트 모드는 선언되지 않은 변수에 값을 할당하려 할 때 예외(exception)를 던지기 때문에, 의도치 않은 전역 변수 생성으로 인한 메모리 누수(memory leak)를 크게 줄여줍니다.
스트릭트 모드 활성화 방법
스트릭트 모드를 사용하려면 해당 범위(scope)의 시작 부분에 "use strict"
예제 1: 스트릭트 모드가 정상 동작하는 경우
다음 예제에서는 두 개의 변수를 사용합니다. 하나는 함수 외부에, 다른 하나는 함수 내부에 위치합니다. 함수 외부의 변수는 선언 없이 값을 할당했지만(비-스트릭트 모드 영역), 함수 내부의 변수는 var 키워드로 제대로 선언했습니다.
함수 내부에는 스트릭트 모드가 적용되어 있지만 변수가 올바르게 선언되었기 때문에 아무런 에러도 발생하지 않고, 외부 변수의 값도 그대로 출력됩니다.
<html>
<body>
<script>
myString1 = "non-strict mode will allow undeclared variables";
document.write(myString1);
document.write("</br>");
function myFun(){
"use strict";
var myString2 = "Strict mode will allow declared variables";
document.write(myString2);
}
myFun();
</script>
</body>
</html>실행 결과
non-strict mode will allow undeclared variables Strict mode will allow declared variables
예제 2: 스트릭트 모드에서 에러가 발생하는 경우
이번 예제에서는 함수 내부에 스트릭트 모드가 적용된 상태에서 변수를 var 키워드 없이 선언하지 않고 값을 할당했습니다. 스트릭트 모드에서는 선언되지 않은 변수에 대한 할당이 허용되지 않으므로, 해당 코드는 실행되지 않고 에러를 발생시킵니다.
이때 발생한 에러는 브라우저 개발자 도구의 콘솔(Console) 탭에서 확인할 수 있습니다. 참고로 함수 외부의 첫 번째 출력문은 스트릭트 모드 적용 전에 실행되었기 때문에 정상적으로 화면에 표시됩니다.
<html>
<body>
<script>
myString1 = "non-strict mode will allow undeclared variables";
document.write(myString1);
document.write("</br>");
function myFun(){
"use strict";
myString2 = "Strict mode will allow declared variables";
document.write(myString2);
}
myFun();
</script>
</body>
</html>실행 결과
non-strict mode will allow undeclared variables Uncaught ReferenceError: myString2 is not defined
정리
스트릭트 모드는 선언되지 않은 변수 사용, 삭제 불가능한 속성 삭제 시도, 중복 매개변수 이름 등 기존에 조용히 무시되던 문제들을 에러로 알려주는 강력한 안전장치입니다. 현대적인 JavaScript 개발에서는 ES 모듈과 클래스가 기본적으로 스트릭트 모드로 동작하므로, 이러한 개념을 잘 이해해 두면 안정적이고 유지보수하기 좋은 코드를 작성하는 데 큰 도움이 됩니다.