๐Ÿ‘ฉ‍๐Ÿ’ป/JavaScript

[JavaScript] ์—„๊ฒฉ ๋ชจ๋“œ (use strict)

ํ•œ๋‚˜ 2021. 5. 5. 23:45

์—„๊ฒฉ ๋ชจ๋“œ๋Š” ES5์— ๋„์ž…๋œ ๋ฌธ๋ฒ•์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ตœ์ƒ๋‹จ์— use strict ๋ฌธ๊ตฌ๋ฅผ ๋„ฃ์–ด ์‹คํ–‰ํ•œ๋‹ค. ๋˜๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ๋„ ์ž‘์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์—„๊ฒฉ ๋ชจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์—๋Š” ๊ด€์šฉ์ ์œผ๋กœ ๋Š์Šจํ•˜๊ฒŒ ํ—ˆ์šฉ๋˜๋Š” '์˜ค๋ฅ˜๋ฅผ ์œ ๋ฐœํ•  ๊ฐ€๋Šฅ์„ฑ ์žˆ๋Š” ๋ฌธ๋ฒ•' ๋•Œ๋ฌธ์— ๋””๋ฒ„๊น…์ด ์–ด๋ ค์šด ์š”์ธ์ด ๋˜๊ณค ํ–ˆ๋‹ค. strict mode๋ฅผ ์‹คํ–‰ํ•ด์ฃผ๋ฉด ๋ฏธ๋ฆฌ ํ•ด๋‹น ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•ด์„œ ๋ฐ”๋กœ์žก์„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ์—…๋ฐ์ดํŠธ ๋  ์ƒˆ๋กœ์šด ๋ช…์„ธ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ๋Œ€์‘ํ•˜๊ธฐ๋„ ํŽธํ•˜๊ณ , ์ตœ์ ํ™” ์ด์Šˆ์—๋„ ๋„์›€์ด ๋˜์–ด์„œ use strict๋ฅผ ์‚ฌ์šฉ์ด ๊ถŒ๊ณ ๋œ๋‹ค.

 

๋ฆฌ์•กํŠธ, ๋ทฐ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ž๋™์œผ๋กœ ์—„๊ฒฉ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์„œ ํฌ๊ฒŒ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•˜์ง€๋งŒ, ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ๋•Œ๋Š” ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ์Šต๊ด€์ด ์ข‹๊ฒ ๋‹ค.

 

๋ณดํ†ต npx๋กœ CRA์„ ํ•˜๊ณ  ๋‚˜๋ฉด ์•„๋ž˜ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

ReactDOM.render(
  <React.StrictMode> 
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

reportWebVitals();

<React.StrictMode>๊ฐ€ ์—„๊ฒฉ ๋ชจ๋“œ๋ฅผ ์„ค์ •ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด๋‹ค.

 

๋Œ€ํ‘œ์ ์œผ๋กœ ์—„๊ฒฉ ๋ชจ๋“œ์™€ ์ผ๋ฐ˜ ๋ชจ๋“œ(or sloppy mode)์˜ ์ฐจ์ด์ ์€ this ์ปจํ…์ŠคํŠธ์˜ ์ฐจ์ด๋ฅผ ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜ ๋ชจ๋“œ์—์„œ๋Š” null ๋˜๋Š” undefined๋กœ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•  ์ƒํ™ฉ์— ์ตœ์ƒ์œ„ ์ปจํ…์ŠคํŠธ๋กœ ๋Œ€์ฒด๋˜์ง€๋งŒ, strict mode๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ทธ๋Ÿฌํ•œ ๋Œ€์ฒด๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š์•„ ๊ทธ๋Œ€๋กœ null๊ณผ undefined๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

 

์„ ์–ธํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹น๋งŒ์œผ๋กœ ์ „์—ญ ๊ฐ์ฒดํ™”ํ•˜๋Š” ๊ฒƒ๋„ ๊ธˆ์ง€๋˜๊ณ , ๊ธฐ์กด์— delete ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์‚ญ์ œํ•œ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ๋„ ๊ธˆ์ง€ํ•œ๋‹ค.