반응형
타입의 강제 변환
타입 강제 변환(Type coercion)은 프로그래밍 언어가 예상치 못한 타입의 값이 주어졌을 때, 명시적으로 변환을 요구하지 않더라도 자동으로 한 타입에서 다른 타입으로 값을 변환하는 것을 말합니다. 자바스크립트에서 이는 매우 흔한 현상이며, 때로는 예측하기 어려운 결과를 초래할 수 있습니다.
자바스크립트의 타입 강제 변환의 두 유형
- 명시적 타입 변환(Explicit coercion):
개발자가 코드에서 직접 타입 변환을 지시하는 경우입니다. 예를 들면, 문자열을 숫자로 변환하고자 할 때Number('123')
을 사용하거나, 숫자를 문자열로 변환할 때String(123)
또는123.toString()
을 사용하는 것입니다. let value = '100'; let number = Number(value); // 명시적으로 문자열을 숫자로 변환
- 묵시적 타입 변환(Implicit coercion):
자바스크립트 엔진이 표현식의 평가 과정에서 자동으로 타입 변환을 수행하는 경우입니다. 예를 들면, 비교 연산자를 사용할 때 자바스크립트는 두 항목을 같은 타입으로 변환하려고 시도합니다. let result = '3' * '2'; // '3'과 '2'는 숫자로 묵시적 변환되어 결과는 6이 됩니다.
타입 강제 변환의 예
- 문자열과 숫자의 연산: 숫자와 문자열에
+
연산자를 사용하면 문자열이 됩니다. 다른 산술 연산자는 문자열을 숫자로 변환하려고 시도합니다. let result1 = '3' + 2; // '32' (문자열 결합) let result2 = '3' * 2; // 6 (숫자로 변환 후 곱셈)
- 논리적 강제 변환: 논리 연산자는 보통 불리언 값(
true
또는false
)을 예상합니다. 비-불리언 값이 주어지면,true
나false
로 간주될 수 있는 "truthy"나 "falsy" 값으로 강제 변환됩니다. if ('0') { // '0'은 truthy 값으로 취급되어 이 블록은 실행됩니다. console.log('The string is truthy!'); }
- == 대 === 연산자:
==
(동등 연산자)는 값이 같은지 비교하기 전에 두 변수를 같은 타입으로 변환합니다.===
(일치 연산자)는 타입 변환 없이 값을 비교합니다. '2' == 2; // true, 문자열 '2'가 숫자 2로 암시적 변환됩니다. '2' === 2; // false, 타입이 다르기 때문에 변환 없이 비교합니다.
정리
이러한 변환은 때때로 코드의 의도와 다른 결과를 초래할 수 있으므로 주의가 필요합니다. 명확한 코드를 작성하려면 가능한 한 명시적 타입 변환을 사용하고, 타입 안정성을 위해 ===
와 같은 일치 연산자를 사용하는 것이 좋습니다.
반응형
'도서로 공부하는 프로그래밍 > 코딩 자율학습' 카테고리의 다른 글
[NodeJS] 클래스 활용하기 (55) | 2024.04.16 |
---|---|
[JS] 타입 강제변환의 사례 (47) | 2024.04.15 |
[JS] 자바스크립트 이름에 얽힌 사연과 관리 (32) | 2024.04.13 |
[NodeJS] 익스프레스 서버 만들기 (37) | 2024.04.12 |
[NodeJS] VSCode를 프로젝트 디렉터리에서 실행하는 방법 (32) | 2024.04.11 |