[JavaScript] 'use strict' 를 사용하는 이유. strict mode.

V·2021년 7월 6일
0

JavaScript 

목록 보기
3/6
post-thumbnail

참고 자료

👶🏻🏻‍🏫strict mode란 무엇인가?

자바스크립트는 꽤 오랫동안 호환성 이슈 없이 발전해 왔다. 기존의 기능을 변경하지 않으며 새로운 기능이 계속 추가되어 왔기 때문에 오래된 코드는 절대 망가지지 않는다는 장점이 있었다. 그러나 동시에 자바스크림트 창시자들이 했던 실수나 불완전한 결정이 언어 안에 영원히 박제되어 버린다는 단점도 가지게 된다.

그러나 2009년에 새롭게 제정된 ECMAScript5(ES5)에서는 새로운 기능이 추가됨과 동시에 일부 기능이 변경되었다. 때문에 변경사항 대부분은 ES5의 기본 모드에서는 활성화되지 않도록 설계되었고, ES5에 새롭게 추가된 기능인 strict mode에서 활성화 된다. 스크립트 상단에 'use strict'라는 특별한 지시자를 사용해 strict mode를 활성화 했을 때에만 이 변경사항이 활성화 되게 된다. 그렇기 때문에 모던한 코드를 작성하고 싶다면 스크립트 상단에 'use strict'를 적어주자!

"use strict";
alert("strict mode on");

위의 예와 같이 스크립트 최상단에 'use strict' 를 위치시키면 strict mode가 활성화 된다. "use strict"로 적어도 동일하다. 코드 중간에 위치하게 될 경우 strict mode가 활성화 되지 않으며 한번 활성화 시키고 나면 취소할 수 있는 지시자는 없다.

(function(){ "use strict";})();

스크립트 상단에서 'use strict'를 사용하게 되면 파일 전체에 strict mode가 적용되지만 함수 내에서만 적용시킬 수도 있다. 위와 같은 방식은 예전의 레거시 코드와 새 코드가 한 파일 안에 섞여 있을 때 도움이 될 것이다.

👨🏻반드시 'use strict'를 사용해야 하는가?

모던 자바스크립트에서 제공하는 클래스와 모듈을 사용하게 되면 'use strict'가 자동으로 적용된다. 그렇기 때문에 스크립트 내에 클래스 또는 모듈을 사용할 경우에는 'use strict'를 적지 않아도 strict mode가 활성화 된다.

class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}

🧓🏻 'use strict'를 사용해 안전한 스크립트를 작성하자.

'use strict'를 사용하는 몇가지 예시를 살펴보자.

{
console.log(age); // undefined -> var hoisting으로 인해 선언,값 할당 전에도 출력됨
age = 4; // -> 변수 age를 선언하기 전에 할당
console.log(age);  // 4 -> 변수를 선언하기 전에 할당하고 출력도 됨 
var age;
console.log(age); // 4 -> 값을 먼저 할당하고 변수를 선언했음에도 출력이 됨
}
console.log(age); // 4 -> 변수가 선언되고 할당된 블럭 밖에서도 출력이 됨

위의 코드는 'use strict'를 사용하지 않았다. 아주 유연한 언어인 javascript에서 ES5이전에는 var을 사용하지 않아도 곧바로 변수에 값을 할당할 수 있으며 var hoisting으로 변수 선언과 값 할당 이전에도 출력하는 것이 가능했다.

'use strict'
{
age = 4; 
console.log(age); // Uncaught ReferenceError: age is not defined
}

strict mode를 적용시킬 경우 선언하지 않은 변수에 값을 할당할 경우 에러를 발생시킨다.

'use strict'
{
console.log(age); // undefined 
age = 4; 
console.log(age);  // 4
var age;
console.log(age); // 4 
}
console.log(age); // undefinde

가장 마지막 줄을 보자. 이번에는 var를 사용해 변수를 선언했음에도 age가 코드 블럭 밖에서 undefined 인 것을 볼 수 있다.

이와 같이 'use stric'를 사용하게 되어 얻는 이점은 여러가지가 있다.

  • 흔히 발생하는 코딩 실수를 잡아내서 예외를 발생시킨다.
  • 상대적으로 안전하지 않은 액션이 발생하는 것을 방지하거나 그럴 때 예외를 발생시켜준다.
  • 혼란스럽거나 제대로 고려되지 않은 기능들을 비활성화시킨다.

결론적으로, 모던하게 javscript 코드를 작성하고 싶다면 'use strict'를 사용하도록 하자.

👶🏻읽어주셔서 감사합니다!

profile
블로그 이전중 https://sungbeen.com

0개의 댓글