본문 바로가기
도서로 공부하는 프로그래밍/코딩 자율학습

[JS] 타입의 강제 변환

by 열공노년 2024. 4. 14.
반응형

타입의 강제 변환

타입 강제 변환(Type coercion)은 프로그래밍 언어가 예상치 못한 타입의 값이 주어졌을 때, 명시적으로 변환을 요구하지 않더라도 자동으로 한 타입에서 다른 타입으로 값을 변환하는 것을 말합니다. 자바스크립트에서 이는 매우 흔한 현상이며, 때로는 예측하기 어려운 결과를 초래할 수 있습니다.

자바스크립트의 타입 강제 변환의 두 유형

  1. 명시적 타입 변환(Explicit coercion):
    개발자가 코드에서 직접 타입 변환을 지시하는 경우입니다. 예를 들면, 문자열을 숫자로 변환하고자 할 때 Number('123')을 사용하거나, 숫자를 문자열로 변환할 때 String(123) 또는 123.toString()을 사용하는 것입니다.
  2. let value = '100'; let number = Number(value); // 명시적으로 문자열을 숫자로 변환
  3. 묵시적 타입 변환(Implicit coercion):
    자바스크립트 엔진이 표현식의 평가 과정에서 자동으로 타입 변환을 수행하는 경우입니다. 예를 들면, 비교 연산자를 사용할 때 자바스크립트는 두 항목을 같은 타입으로 변환하려고 시도합니다.
  4. let result = '3' * '2'; // '3'과 '2'는 숫자로 묵시적 변환되어 결과는 6이 됩니다.

타입 강제 변환의 예

  • 문자열과 숫자의 연산: 숫자와 문자열에 + 연산자를 사용하면 문자열이 됩니다. 다른 산술 연산자는 문자열을 숫자로 변환하려고 시도합니다.
  • let result1 = '3' + 2; // '32' (문자열 결합) let result2 = '3' * 2; // 6 (숫자로 변환 후 곱셈)
  • 논리적 강제 변환: 논리 연산자는 보통 불리언 값(true 또는 false)을 예상합니다. 비-불리언 값이 주어지면, truefalse로 간주될 수 있는 "truthy"나 "falsy" 값으로 강제 변환됩니다.
  • if ('0') { // '0'은 truthy 값으로 취급되어 이 블록은 실행됩니다. console.log('The string is truthy!'); }
  • == 대 === 연산자: == (동등 연산자)는 값이 같은지 비교하기 전에 두 변수를 같은 타입으로 변환합니다. === (일치 연산자)는 타입 변환 없이 값을 비교합니다.
  • '2' == 2; // true, 문자열 '2'가 숫자 2로 암시적 변환됩니다. '2' === 2; // false, 타입이 다르기 때문에 변환 없이 비교합니다.

타입이 명시적으로 또는 묵시적으로 변환된 결과를 보여줌

정리

이러한 변환은 때때로 코드의 의도와 다른 결과를 초래할 수 있으므로 주의가 필요합니다. 명확한 코드를 작성하려면 가능한 한 명시적 타입 변환을 사용하고, 타입 안정성을 위해 ===와 같은 일치 연산자를 사용하는 것이 좋습니다.

반응형