기술/JavaScript

자바스크립트의 '동적 타이핑'과 '형 변환'에 대하여

빔네모 2025. 5. 29. 14:39

자바스크립트는 동적 타이핑 언어입니다.

✅ 변수를 선언할 때 타입을 정하지 않아도 되고,
 값을 넣는 순간 타입이 자동으로 정해집니다.
✅ 나중에 다른 타입의 값으로 바꾸는 것도 가능합니다.

 

정적 타이핑 언어는 선언한 타입에 맞는 값만 할당할 수 있습니다.

//정적 타이핑 언어
char c; //선언한 타입에 맞는 값만 할당

int num;  //변수 선언 시점에 변수 타입이 결정되고 변경할 수 없음
num = "hello"; // ❌ 오류 발생 (타입 불일치)

 

반면에, 동적 타이핑 언어는 타입 변경이 가능합니다.

//동적 타이핑 언어
let value = 10;      // 숫자로 시작
value = "hello";     // 나중엔 문자열로 변경!
value = true;        // 불린 값으로도 변경 가능!

 

이처럼 자바스크립트는 동적 타이핑 언어이기때문에, 

값이 필요한 상황에 따라 자동으로 다른 자료형으로 바뀌기도 합니다. 

 

동적 타이핑 언어 Tip!
이유
정말 필요한 변수만 만들기 코드가 깔끔해지고 실수도 줄어든다
변수의 범위(스코프)를 좁게 유지 예상치 못한 값 변경 방지한다
전역 변수는 피하기 어디서든 값이 바뀔 수 있어서 위험하다
가능하면 const를 사용하기 값을 바꾸지 않게 해서 안정성이 높아진다
의미 있는 변수 이름 사용하기 코드 읽기 쉬워지고, 실수를 줄여준다.

 

 

명시적 변환 vs 암묵적 변환

타입을 변경하는 방법으로는 명시적 변환과 암묵적 변환이 있습니다.

  • 명시적 변환 (Explicit): 개발자가 직접 바꿈. String(123), Boolean(0);
  • 암묵적 변환 (Implicit): 자바스크립트가 자동으로 바꿈 123 + "px" → "123px";

📌문자형 변환

  • 명시적으로 변환: String() 사용
  • 암묵적 변환: 덧셈 연산(+)에서 하나라도 문자열이면 나머지도 문자열로 변환
//명시적 변환
String(123) //"123"

//암묵적 변환
console.log(1 + "2");   // "12"
console.log("1" + true);   // "1true"
console.log("1" + {});   // "1[object Object]"
console.log("1" + null);   // "1null"
console.log("1" + undefined);   // "1undefined"

📌 숫자형 변환

  • 명시적으로 변환: Number() 사용
  • 암묵적 변환: 뺄셈(-), 나눗셈(/), 비교 연산자(<, >, == 등) 등을 사용하는 경우 숫자형으로 변환
//명시적 변환
Number("   123   "); // 123
Number("123z");      // NaN ("z"를 숫자로 변환하는 데 실패함)
Number(true);        // 1
Number(false);       // 0
Number(undefined)    //NaN
Number(null)        //0
//이때, 빈 문자열("")이나 공백 문자열(" ")은 0으로 변환


//암묵적 변환
console.log(1 - "2");   // -1
console.log("2" * "3");   // 6 //수학 표현식이 있으면 자동변환
console.log(4 + +"5");   // 9

📌 불린형 변환

  • 명시적으로 변환: Boolean() 사용
  • 암묵적 변환: 조건문(if, while, 삼항연산자)에서 자동으로 Boolean으로 변환
//명시적 변환
console.log(Boolean(0));   // false
console.log(Boolean(""));   // false
console.log(Boolean(null));   // false
console.log(Boolean(undefined));   // false
console.log(Boolean(NaN));   // false
console.log(Boolean("false"));   // true
console.log(Boolean({}));   // true


//암묵적 변환
if ("hello") { ... }   // 문자열은 true
if (0) { ... }         // 숫자 0은 false
//0, 빈 문자열(""), null, undefined, NaN은 false로 변환됩니다. 그 외의 값은 true로 변환

 

⚠️ 주의해야 할 타입 변환 예시
Number("   ")      // 0  ← 공백만 있어도 숫자 0으로 변환
Boolean("0")       // true ← 빈 문자열만 false, "0"은 true
"5" - "2"          // 3 ← 문자열끼리도 숫자 연산 가능
"5" + 1            // "51" ← 이건 문자열 덧셈​