'String' 형식은 'string' 형식에 할당할 수 없습니다.
string'은(는) 기본 개체이지만 'String'은(는) 래퍼 개체입니다. 가능한 경우 'string'을(를) 사용하세요.
결론은: 다르다!
타입스크립트는 string
과 String
타입을 구분한다.
원시 타입(Primitive Type)은 가장 기본적인 데이터 타입이다. 자바스크립트에는 number
, bigint
, boolean
, null
, undefined
, symbol
이 있다. 메서드를 가지지 않는다는 특징이 있다.
let str: string = "Hello";
console.log(str.toUpperCase());
// 자바스크립트가 임시로 String 객체를 생성하여 메서드 호출한다.
참조 타입(Reference Type)은 복합적인 데이터 구조를 가진다. 실제 값을 저장하지 않고, 값이 저장된 메모리 주소를 저장한다. array
, function
, object
등이 있으며, 동일한 객체를 여러 변수에서 참조할 수 있다. 원시 타입과 달리 메서드를 가질 수 있다.
래퍼 객체(Wrapper Object)는 원시 값을 객체처럼 다룰 수 있게 해주는 객체 타입이다. 자바스크립트에서는 각 원시 타입에 대응하는 래퍼 객체가 있다.
string
-> String
number
-> Number
boolean
-> Boolean
let primitiveString: string = "Hello"; // 원시 타입
let wrappedString: String = new String("Hello"); // 래퍼 객체
console.log(typeof primitiveString); // "string"
console.log(typeof wrappedString); // "object"
console.log(primitiveString === "Hello"); // true
console.log(wrappedString === "Hello"); // false
console.log(wrappedString == "Hello"); // true (타입 강제 변환)
console.log(primitiveString.length); // 5
console.log(wrappedString.length); // 5
string
은 기본 문자열 타입이다. 원시 타입(primitive type)으로, 문자열 값을 나타낸다.
let myString: string = "Hello";
String
은 객체 타입이다. 문자열 값을 감싸는 래퍼 객체이기도 하다.
let myString: String = new String("Hello");
string
이 더 가볍고 성능 면에서 유리하다. String
객체는 불필요한 오버헤드를 추가할 수 있기 때문에 단순히 값을 저장할 때는 적합하지 않다. 특별한 이유가 없다면 string
을 사용하자.