Javascript

형 변환은 Type Conversion일까? Type Casting일까?

John' 2023. 11. 13. 18:00

인간은 망각의 동물이다. 특정한 행동이나 생각을 자주 하지 않으면 우리 뇌 속에서는 신경의 가지치기 현상이 일어난다고 한다. 우리가 어떤 생각, 기분, 행동을 수행하지 않으면 뇌는 그와 연관된 뉴런들을 발화시키지 않는데, 그 결과 그러한 생각, 기분, 행동이 점점 약해지다가 결국 시들어버리고 잊게 되는 것을 신경 가지치기라고 한다. 그렇기 때문에 우리는 초등학교 시절처럼 리코더를 연주할 수 없는거고, 곡면의 부피를 구하는 적분 공식이나 근의 공식등에 대해 더는 기억하지 못하는 것이다. 쉽건 어렵건 지금 나는 무조건 많이 생각하고 자꾸 써보고 사용해보는 것 밖에 방도가 없다 생각한다.

 

 

형 변환(type conversion)

 

관련 학습을 하던 중, 형 변환을 type conversion이란 명칭을 사용하는 곳도 있고, type casting으로도 사용하고 있어 관련 용어가 잘못 혼용되고 있는 게 아닐까란 생각이 들어 정확한 의미를 아래 키워드를 통해 찾아보았다.

 

What is the difference between type conversion and type casting [in javascript]?

 

 

1. Type Casting: 타입 캐스팅의 경우 프로그램 설계 중에 프로그래머가 해당 언어의 캐스팅 연산자를 사용하여 기존 데이터 유형을 다른 데이터 유형으로 의도적으로 변환하는 작업

 

2.Type conversion: 타입 컨버젼의 경우 데이터 타입이 컴파일러 또는 인터프리터 등을 통해 컴파일러타임, 런타임을 통해 자동으로 다른 데이터 타입으로 변환되는 작업. 그렇기에 대상 데이터 타입은 변경되는 타입보다 작을 수 없으므로 확장 변환(widening conversion)이라고도 한다. 그리고 가장 중요한 점은 서로 호환이 가능한 데이터 타입에만 적용할 수 있다.

 

 

문자형으로 변환

 

문자형으로의 형 변환은 문자형의 값이 필요할 때 일어나는데, alert메서드는 매개변수로 문자형을 받기 때문에, alert(value)에서 value는 문자형이어야 한다. 만약, 다른 형의 값을 전달받으면 이 값은 문자형으로 자동 변환된다. 그리고, String(value) 함수를 호출해 전달받은 값을 문자열로 변환 할 수도 있다.

 

  let value = true;
  alert(typeof value); // boolean

  value = String(value); // 변수 value엔 문자열 "true"가 저장된다.
  alert(typeof value); // string

 

 

false는 문자열 "false"로, null은 문자열 "null"로 변환되는 것과 같이, 문자형으로의 변환은 대부분 예측 가능한 방식으로 일어난다.

 

 

숫자형으로 변환

 

# 숫자으로의 변환은 수학과 관련된 함수와 표현식에서 자동으로 일어난다.
alert( "6" / "2" ); // 3, 문자열이 숫자형으로 자동변환된 후 연산이 수행된다.

Number(value) 함수를 사용하면 주어진 값(value)을 숫자형으로 명시해서 변환할 수 있다.
let str = "123";
alert(typeof str); // string

let num = Number(str); // 문자열 "123"이 숫자 123으로 변환된다.

alert(typeof num); // number


# 숫자형 값를 사용해 무언가를 하려고 하는데 그 값을 문자 기반 폼(form)을 통해 입력받는 경우엔, 이런 명시적 형 변환이 필수인데 숫자 이외의 글자가 들어가 있는 문자열을 숫자형으로 변환하려고 하면, 그 결과는 NaN이 된다.

let age = Number("임의의 문자열 123");

alert(age); // NaN, 형 변환이 실패된다.

 

 

아래는, 숫자형으로 변환 시에 적용되는 규칙을 정리해보았다.

 

전달받은 값형 변환 후

undefined NaN
null 0
true and false 1  0
string 문자열의 처음과 끝 공백이 제거되며, 공백 제거 후 남아있는 문자열이 없다면 0, 그렇지 않다면 문자열에서 숫자를 읽는다. 또, 변환에 실패하면 NaN이 된다.

 

alert( Number("   123   ") ); // 123
alert( Number("123z") );      // NaN ("z"를 숫자로 변환하는 데 실패함)
alert( Number(true) );        // 1
alert( Number(false) );       // 0

`null과 undefined은 숫자형으로 변환 시 결과가 다르다. null은 0이 되고 undefined는 NaN이 된다.`

 

 

불린형으로 변환

 

Boolean(value)를 호출하면 명시적으로 불리언으로의 형 변환을 수행할 수 있으며, 불린형으로 변환 시 적용되는 규칙은 아래와 같다.

숫자 0, 빈 문자열, null, undefined, NaN과 같이 직관적으로도 “비어있다고” 느껴지는 값들은 false가 되며, 그 외의 값은 true로 변환된다.

alert( Boolean(1) ); // 숫자 1(true)
alert( Boolean(0) ); // 숫자 0(false)

alert( Boolean("hello") ); // 문자열(true)
alert( Boolean("") ); // 빈 문자열(false)

`주의: 문자열 "0"은 true이다!!`
alert( Boolean("0") ); // true
alert( Boolean(" ") ); // 공백이 있는 문자열도 비어있지 않은 문자열이기 때문에 true로 변환된다.

 

 

정리

 

문자, 숫자, 논리형으로의 형 변환은 자주 일어나는 형 변환이다.

 

문자형으로 변환 은 무언가를 출력할 때 주로 일어난다. String(value)을 사용하면 문자형으로 명시적 변환이 가능하다. 원시 자료형을 문자형으로 변환할 땐, 대부분 그 결과를 예상할 수 있을 정도로 명시적인 방식으로 일어난다.

숫자형으로 변환은 수학 관련 연산시 주로 일어난다. Number(value)로도 형 변환을 할 수 있다.

숫자형으로의 변환은 아래 규칙을 따른다.

 

전달받은 값형 변환 후

undefined NaN
null 0
true / false 1 / 0
string 전달받은 문자열을 “그대로” 읽되, 처음과 끝의 공백을 무시한다. 문자열이 비어있다면 0이 되고, 오류 발생 시 NaN이 된다.

불린형으로 변환 은 논리 연산 시 발생한다. Boolean(value)으로도 변환할 수 있다.

 

 

불린형으로의 형 변환은 다음 규칙을 따른다.

전달받은 값형 변환 후

0, null, undefined, NaN, "" false
그 외의 값 true

형 변환 시 적용되는 규칙 대부분은 이해하고 기억하기 쉬운 편에 속한다. 다만 아래는 예외적인 경우이기 때문에 실수를 방지하기 위해 따로 기억해 두자.

1.숫자형으로 변환 시 undefined는 0이 아니라 NaN이 된다.

2.문자열 "0"과 " "같은 공백은 불린형으로 변환 시 true가 된다.

 

 

 

참고


 

형 변환

 

ko.javascript.info

 

Difference Between Type Casting and Type Conversion (with Comparison Chat) - Tech Differences

This Content contains a detailed discussion regarding the difference between "type casting' and 'type conversion'. Type casting is basically done by the user to cast one data type to another by using a cast operator. 'Type Conversion', basically done by th

techdifferences.com