이론 (Front-end)/JavaScript

[모던 자바스크립트] 2.3 엄격 모드

이우열 2023. 1. 5. 00:01
728x90

https://ko.javascript.info/strict-mode

 

엄격 모드

 

ko.javascript.info

 

  • 자바스크립트는 꽤 오랫동안 호환성 이슈 없이 발전해왔음
  • 기존의 기능을 변경하지 않으면서 새로운 기능이 추가됨
  • 덕분에 기존에 작성한 코드는 절대 망가지지 않는다는 장점이 있었지만 자바스크립트 창시자들이 했던 실수나 불완전한 결정이 언어 안에 영원히 박제된다는 단점도 생겼음
  • 이런 상황은 ECMAScript(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를 사용할 수 있나?
    • use strict를 입력한 후, Shift + Enter 키를 눌러 줄 바꿈 해 원하는 스크립트 입력
      • 'use strict'; <Shift + Enter를 눌러 줄 바꿈>
        // ... 테스트하려는 코드
        <Enter를 눌러 실행>
    • 이 기능은 FirefoxChrome같은 유명한 브라우저에서 대부분 사용 가능
    • 브라우저가 오래 되어서 콘솔 창에 use strict를 입력하는 게 불가능하다면, use strict를 적용하는 가장 확실한 방법은 아래와 같은 코드를 래퍼로 감싸면 됨
      • (function() {
            'use strict';
            
            // ... 테스트하려는 코드
        })()

 

✏️ 'use strict'를 꼭 사용해야 하는가?

  • 당연하게 사용해야 하는 것은 아님
  • 모던 자바스크립트는 '클래스'와 '모듈'이라 불리는 진일보한 구조를 제공
  • 이 둘을 사용하면 use strict가 자동으로 적용됨. 따라서 이 둘을 사용하고 있다면 스크립트에 "use strict"를 붙일 필요가 없음

 

✅ 결론

  • 코드를 클래스와 모듈을 사용해 구성한다면 "use strict"를 생략해도 됨. 아직 이 둘을 배우지 않았으니 "use strict"를 꼭 붙이자
  • 엄격 모드와 비 엄격 모드의 차이를 보이는 기능은 많지 않음
  • 엄격 모드를 사용하면 개발자의 삶의 질이 조금 더 높아짐
728x90