https://chat.openai.com/share/3c93f263-b068-4c6b-bc75-3de7989b4bcc
ChatGPT
A conversational AI system that listens, learns, and challenges
chat.openai.com
위에는 내가 자바스크립트의 String이 C언어처럼 참조형이 아니고 원시값인게 이해가 안가서 gpt에게 물어본 내용이 들어있는 대화록 링크.
GPT내용 요약하자면
자바스크립트는 효율적이 사용을 위해 문자열을 원시값으로 만들어 빠른 엑세스가 가능하도록 했고, 원시값임에도 동일한 문자열이 여러개 있는 경우 자바스크립트 엔진에 자체적으로 한군데의 메모리값을 여러군데 할당해서 메모리 사용을 효율적으로 관리한다.
이때 C언어와 다르게 가비지컬렉터가 연결이 끊긴 메모리의 영역을 수거해서 재활용하도록 도와준다. (메모리값 해제 불필요)
근데 이렇게 문자열이 원시타입임에도,
자바스크립트는 친절하게도 array와 같이 문자열의 값에 접근할수 있도록 만들어주었다. -> 유사배열객체
따라서 우리는 문자열에 index로 접근이 가능하고, length프로퍼티를 가지고, for문으로 순회도 가능하다.
(사실 우리가 원시값을 객체처럼 사용하면, 자바스크립트는 원시값을 감싸는 래퍼객체로 임시로 바꿔준다)
let test = 'hihi';
console.log(test[1]); // i
console.log(test.length); // 4
console.log(test.toUpperCase()); // HIHI
근데
이러한 특성에도 불고하고 근본적으로 문자열은 불변객체이기 때문에 array처럼 접근은 가능하지만 array처럼 일부값만 수정은 불가능하다.
let cat = 'meow~';
cat[0] = 'K'; //첫 문자를 바꿔주려고 해도
console.log(cat); // meow~ (바뀌지 않는다. Keow~가 아니다!!)
cat = 'Keow~';
console.log(cat); // Keow~ 이렇게 재할당을 해서 변경해야 한다.
비록 array처럼 접근도 가능하고 길이도 알 수 있지만, 이렇게 값 변경이 불가능하다는 것을 유념해야한다.
(효율적인 메모리 관리, 데이터의 신뢰성을 보장하기 위함)
참고
자바스크립트 DEEPDIVE p.141