JavaScript의 `strict mode`

JavaScript의 `strict mode`

이 글은 JavaScript의 strict mode에 대해 설명합니다.

YouTube Video

JavaScript의 strict mode

JavaScript에서 엄격 모드는 코드를 더 안전하고 오류가 발생하지 않도록 하기 위해 ECMAScript 5 (ES5)에서 도입된 기능입니다. 엄격 모드를 사용하면 일부 관대한 구문 및 잠재적으로 위험한 기능이 비활성화되고 더 엄격한 오류 검사가 적용됩니다. 이를 통해 개발자는 예상치 못한 동작을 방지하고 더 견고하고 고성능의 코드를 작성할 수 있습니다.

strict mode 활성화하기

strict mode를 활성화하려면, 코드의 시작 부분에 다음 지시어를 추가하세요.

1"use strict";

이 선언은 전체 스크립트에 적용하거나 함수 단위로 적용할 수 있습니다. 예를 들어, 전체 스크립트에 적용하려면 다음과 같이 작성할 수 있습니다:.

1"use strict";
2
3function example() {
4    // Strict mode is applied
5}

함수별로 적용하려면 다음과 같이 작성할 수 있습니다:.

1function example() {
2    "use strict";
3    // Strict mode is applied only within this function
4}

strict mode는 범위별로 적용되므로 함수 내에서 활성화할 수도 있습니다. 또한, 모듈에서는 기본적으로 strict mode가 활성화되어 있으므로 모듈 내에서 개별적으로 선언할 필요가 없습니다.

strict mode의 주요 기능과 차이점

strict mode를 사용하면 JavaScript의 기본 동작 중 일부가 변경됩니다. 다음은 주요 예시들입니다.

암시적 전역 변수 금지

일반 JavaScript에서는 변수 선언을 생략하면 자동으로 전역 변수를 정의하지만, strict mode에서는 오류를 발생시킵니다.

1"use strict";
2
3x = 10;  // Error: x is not defined

변수는 항상 var, let, 또는 const를 사용하여 선언해야 합니다.

예약어 사용에 대한 제한

향후 JavaScript 키워드(예: implements, interface, package 등)는 strict mode에서 변수 이름이나 함수 이름으로 사용할 수 없습니다.

1"use strict";
2
3var package = "strict mode";  // Error: Unexpected strict mode reserved word

this 동작의 변경

일반 모드에서는 함수 내의 this가 전역 객체(예: 브라우저에서는 window)를 참조하지만, strict mode에서는 thisundefined입니다.

1"use strict";
2
3function example() {
4    console.log(this);  // undefined
5}
6
7example();

이것은 this의 잘못된 사용으로 인한 버그를 방지하는 데 도움이 됩니다.

삭제 불가능한 속성 삭제 금지

일반 모드에서는 삭제할 수 없는 객체 속성을 삭제하려고 하면 오류 없이 무시되지만, strict mode에서는 오류를 발생시킵니다.

1"use strict";
2
3var obj = Object.freeze({name: "John"});
4delete obj.name;  // Error: Cannot delete property 'name'

중복된 매개변수 이름 금지

일반 모드에서는 동일한 이름의 매개변수를 여러 번 선언할 수 있지만, strict mode에서는 오류를 발생시킵니다.

1"use strict";
2
3function example(a, a) {
4    // Error: Duplicate parameter name not allowed in this context
5}

with 문 금지

with 문은 코드의 가독성을 저하시킬 수 있으며, strict mode에서는 사용할 수 없습니다.

1"use strict";
2
3with (Math) {
4    // Error: Strict mode code may not include a with statement
5}

strict mode의 장점

strict mode는 여러 가지 방법으로 코드 안전성과 효율성을 향상시킵니다.

향상된 오류 감지

strict mode에서는 일반 모드에서 간과되는 오류를 감지하여 개발자가 잠재적인 버그를 조기에 찾아낼 수 있습니다. 예를 들어, 의도하지 않은 전역 변수의 생성과 예약어의 오용을 방지합니다.

성능 향상

strict mode에서는 JavaScript 엔진이 코드를 더 효율적으로 최적화할 수 있습니다. 그 결과 실행 속도가 향상될 수 있습니다.

코드 보안 강화

this 처리 방식이 더 엄격해져 불필요한 전역 객체에 접근하는 것을 방지하고 코드 보안을 강화합니다. 추가적으로, 예약어 사용 제한은 향후 키워드와의 충돌을 방지합니다.

호환성 및 고려사항

strict mode는 ECMAScript 5에서 도입되었으며, 이전에 출시된 브라우저에서는 지원되지 않습니다. 그러나, strict mode를 활성화해도 지원하지 않는 브라우저에서는 단순히 무시되며, 스크립트는 깨지지 않습니다. 따라서 일반적으로 안전하게 사용할 수 있습니다.

대규모 기존 프로젝트에 strict mode를 도입할 때는 예기치 않은 오류를 방지하기 위해 철저한 테스트가 필수입니다.

결론

JavaScript의 strict mode는 코드 품질을 향상시키는 데 매우 유용한 기능입니다. 특히 대규모 프로젝트나 팀 개발에서는 예기치 않은 버그와 오류를 방지하고 코드 가독성과 유지 보수성을 높이기 위해 엄격 모드를 적극적으로 사용하는 것이 권장됩니다.

strict mode를 이해하고 적절히 적용하면 JavaScript의 문제점을 피하고 더 안전하고 효율적인 개발이 가능합니다.

위의 기사를 보면서 Visual Studio Code를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.

YouTube Video