자 일단 원시타입이 뭔데? 자 간단하게 설명해보자. 원시타입은 프로그래밍 언어에서 기본적으로 제공되는 데이터 유형이며. 이것은 다른 데이터 유형으로 분류되지 않는 가장 기본적인 유형으로, 보통 숫자, 텍스트 또는 논리값과 같은 간단한 값을 나타내게 된다. 원시타입은 일반적으로 메모리에 직접 저장되며, 객체가 아니라는 점이 중요하다.
자 객체가 아니다?? 그것은 무슨 뜻일까? "객체가 아니다"는 원시타입이 다른 데이터 유형인 객체와는 다르게 메모리에 직접적으로 저장되는 데이터 유형이라는 것을 의미한다. 객체는 데이터와 그 데이터를 조작하기 위한 메서드(method)들을 포함하는 복합적인 개념이며, 일반적으로 참조(reference)로 저장된다. 이에 반해, 원시타입은 데이터 값 자체가 메모리에 저장된다
자 이제 참조라는 단어가 나왔다. 이건 간단하게 코드로 보자 :)
let arr = ['1', '2', '3' , '4']
let str = '1234'
arr[1] = '3'
str[1] = '3'
console.log(arr.join('')) // 1334
console.log(str) // 1234
자, 위의 값에서 arr은 변경이 되었지만, str은 변경 되지 않았다.
arr[1] = '3' // 해당 라인의 의미는 arr의 1번 인덱스의 값을 '3'으로 바꾸어라 라는 의미이다.
// 해당 라인의 의미는 str[1]의 평가가 끝나서
// "2" = '3'이 되게 된다.
str[1] = '3'
레퍼런스의 참조는 평가를 진행하는 경우, 메모리 주소의 참조가 되게 된다. 원시타입은 무엇을 해도, 값일 뿐이라서, 값을 가지고만 핸들링하게 된다.
자바스크립트 세상의 원시타입은 string, number, bigint, boolean, undefined, symbol, null이 있다.
const str = '1134'
console.log(str.replaceAll('1', '2'))
자 생각해보자, 위의 내용에 문제가 있다고 생각하지 않은가? "객체는 데이터와 그 데이터를 조작하기 위한 메서드(method)들을 포함하는 복합적인 개념" 내가 위에서 설명하기에 객체는 메서드들을 포함한다라고 하였다.
하지만, string은 원시타입이지 않은가?
위와 같이 .을 찍는 행위를 하게 되면, 레퍼 객체로 오토박싱이 발생하게 된다. 원시 값에는 메서드가 없지만 마치 메서드가 있는 것처럼 동작하게 된다.
댓글
댓글 쓰기