Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 'use strict' 엄격 모드란? 코드를 안전하게 보호하는 방법

자바스크립트(JavaScript)의 "use strict"는 지시문(directive) 형태의 문자 표현식입니다. ECMAScript 5(JavaScript 1.8.5)에서 처음 도입되었으며, 이름 그대로 코드가 엄격 모드(strict mode)로 실행되어야 함을 브라우저에 알려주는 역할을 합니다.

엄격 모드를 사용하면 일반적인 코딩 실수로 인한 오류를 조기에 잡아낼 수 있습니다. 예를 들어, 일반 모드에서는 선언하지 않은 변수를 사용해도 자동으로 전역 변수가 생성되지만, 엄격 모드에서는 즉시 에러가 발생합니다. 이처럼 잠재적인 버그와 안전하지 않은 동작을 차단해 더 견고한 코드를 작성할 수 있게 해줍니다.

엄격 모드 선언 방법

엄격 모드를 선언하려면 코드의 시작 부분에 "use strict"를 추가하기만 하면 됩니다. 적용 범위에 따라 선언 위치가 달라집니다.

  • 전역 범위(Global Scope): 스크립트 최상단에 선언하면 해당 스크립트 전체에 엄격 모드가 적용됩니다.
  • 함수 범위(Function Scope): 함수 본문의 첫 번째 문장에 선언하면 해당 함수 내부에서만 적용됩니다.

예제

다음 예제는 엄격 모드에서 선언되지 않은 변수를 사용했을 때 오류가 발생하는 상황을 보여줍니다. 개발자 도구 콘솔(F12)을 열고 확인해 보세요.

<!DOCTYPE html>
<html>
   <body>
      <p>변수를 사용했지만 선언하지 않았기 때문에 오류가 발생합니다</p>
      <p>F8을 눌러 오류를 확인해 보세요.</p>
      <script>
         "use strict";
         a = 1;
      </script>
   </body>
</html>

출력 결과

변수를 사용했지만 선언하지 않았기 때문에 오류가 발생합니다
F8을 눌러 오류를 확인해 보세요.
Uncaught ReferenceError: a is not defined

엄격 모드의 주요 제한 사항

엄격 모드가 활성화되면 다음과 같은 동작들이 금지되거나 에러로 처리됩니다.

  • 선언되지 않은 변수나 객체 사용 시 에러 발생
  • 변수, 함수, 객체 속성 삭제(delete) 불가
  • 함수 매개변수 이름 중복 불가
  • 8진수 숫자 리터럴 및 이스케이프 문자 사용 불가
  • 읽기 전용(read-only) 속성에 값 할당 불가
  • with 문 사용 불가
  • 일반 함수 호출 시 thisundefined로 처리되어 전역 객체 오염 방지

이처럼 "use strict"는 개발자의 실수를 컴파일 단계가 아닌 실행 초기에 바로잡아 주므로, 신규 프로젝트에서는 항상 엄격 모드를 활성화하는 것이 좋은 습관입니다. ES6(ECMAScript 2015) 이상의 모듈이나 클래스 코드에는 기본적으로 엄격 모드가 적용된다는 점도 함께 기억해 두세요.