자바 스크립트(java script)/자바 스크립트 기초
자바 스크립트 기초(5) - 동적 언어, 타입 변환
lamarcK
2025. 3. 18. 15:17
타입 변환(Type Conversion) 이란?
변수의 데이터 타입을 다른 타입으로 변경하는 것을 의미한다.
자바스크립트는 동적 타입 언어이므로 변수의 타입이 고정되어 있지 않고, 필요에 따라 자동으로 또는 명시적으로 타입을 변환할 수 있다.
동적 언어란?
동적 언어(Dynamic Language)는 프로그램 실행 중에 변수의 데이터 타입이 결정되거나 변경될 수 있는 프로그래밍 언어를 의미한다. 이는 정적 언어와 대비되는 개념이다.
- 동적 언어
- 실행 시점에 변수의 데이터 타입을 결정한다.
- 변수를 선언할 때 타입을 지정하지 않아도 된다.
- 예시 : JavaScript, Python, Ruby
- 정적 언어
- 컴파일 시점에 변수의 데이터 타입을 결정한다.
- 변수를 선언할 때 타입을 명시적으로 지정해야 한다.
- 예시 : Java, C++, C#
Java의 경우 정적 언어라서 이미 변수 x를 정수형으로 선언했기 때문에 문자열을 할당하면 컴파일 오류가 발생한다.
int x = 10;
// x = "hello"; // 컴파일 오류 발생
String str = "hello";
Python의 경우 동적 언어라서 x에 정수를 할당했다가 문자열을 할당해도 오류가 발생하지 않는다.
x = 10
print(type(x)) # <class 'int'>
x = "hello"
print(type(x)) # <class 'str'>
타입변환 종류
자바 스크립트에서 타입 변환은 2가지 종류가 있다.
- 암시적 타입 변환
- 명시적 타입 변환
1. 암시적 타입 변환 (자동 타입 변환)
자바스크립트 엔진이 자동으로 타입을 변환하는 것이다. 주로 연산자나 함수가 예상치 못한 타입의 값을 받았을 때 발생한다.
문자열 변환
let result = 1 + "2"; // 숫자 1이 문자열 "1"로 변환되어 "12"가 됨
console.log(result); // "12"
console.log(typeof result); // "string"
숫자 변환
let result = "5" * 2; // 문자열 "5"가 숫자 5로 변환되어 10이 됨
console.log(result); // 10
console.log(typeof result); // "number"
2. 명시적 타입 변환 (강제 타입 변환)
개발자가 의도적으로 타입을 변환하는 것이다. 함수나 메서드, 연산자를 사용하여 명시적으로 타입을 변환할 수 있다.
- 함수
- Number() : 값을 숫자로 변환
- String() : 값을 문자열로 변환
- Boolean() : 값을 불리언으로 변환
- parseInt() : 문자열을 정수로 변환
- parseFloat() : 문자열을 실수로 변환
- 메서드
- toString() : 값을 문자열로 변환
- toFixed() : 숫자를 지정된 소수점 자리수까지 문자열 타입으로 변환
- 연산자
- 단항 더하기 연산자(+): 문자열을 숫자로 변환 (예: +"123")
- 비트 부정 연산자(~~): 숫자를 정수로 변환 (예: ~~3.14)
문자열 변환
let num = 123;
let str = String(num); // 숫자를 문자열로 변환
console.log(str); // "123"
console.log(typeof str); // "string"
숫자 변환
let mixedValue = "3.14159 with some text"; // 원본 문자열
let integerValue = parseInt(mixedValue); // 정수로 변환
let floatValue = parseFloat(mixedValue); // 실수로 변환
let fixedString = floatValue.toFixed(2); // 소수점 2자리까지 문자열로 변환
let isInteger = Number.isInteger(integerValue); // 정수 여부 확인
console.log(mixedValue); // 원본 문자열
console.log(integerValue, typeof integerValue); // 정수 변환: 3, number
console.log(floatValue, typeof floatValue); // 실수 변환: 3.14159, number
console.log(fixedString, typeof fixedString); // 소수점 2자리 문자열: "3.14", string
console.log(isInteger); // 정수 여부: true
몇몇 값은 변환 후 typeof로 변수 타입 검사까지 실시했다.
데이터 타입 변환 시 let과 const의 차이
- let
- 변수 값을 재할당이 가능하다.
- 때문에 타입 변환 결과를 원래 변수에 직접 할당하여 데이터 타입을 변경할 수 있다.
- const
- 변수 값을 재할당 하는 것이 불가능하다.
- 때문에 타입 변환 결과를 새로운 변수에 할당하거나, 객체의 속성을 변경하는 방식으로 처리해야 한다.
// let 변수 타입 변환
let strNum = "123";
strNum = Number(strNum); // 문자열을 숫자로 변환하여 strNum에 다시 할당
console.log(strNum, typeof strNum); // 123, number
// const 상수 타입 변환 (새로운 변수에 할당)
const strNum2 = "456";
const num = Number(strNum2); // strNum2를 숫자로 변환하여 num에 저장
console.log(strNum2, typeof strNum2); // "456", string (원래 상수 값은 변경되지 않음)
console.log(num, typeof num); // 456, number (새로운 변수에 변환된 값이 저장됨)
// const 상수 타입 변환 (객체 속성 변경)
const obj = { value: "789" };
obj.value = Number(obj.value); // 객체 속성 value를 숫자로 변환
console.log(obj); // { value: 789 }