JavaScript에서 문자열은 불변(immutable)입니다. 문자열을 수정하려고 하면, 기존 문자열을 수정하지 않고 새로운 문자열을 생성합니다.
즉, += 연산을 사용할 때마다 메모리에 새로운 문자열 객체가 만들어집니다.
let str = "A";
str += "B"; // 새로운 문자열 "AB"가 생성됨
str += "C"; // 또 다른 새로운 문자열 "ABC"가 생성됨
Array.prototype.join은 배열의 요소를 한 번에 연결하여 하나의 새로운 문자열을 만듭니다.
내부 동작:
배열의 각 요소를 순회하며 문자열을 생성하는 대신, 하나의 버퍼를 만들어 요소를 모두 연결한 뒤 최종 문자열을 반환합니다.
이 과정에서 문자열 복사 작업이 최소화됩니다.
// 문자열 덧셈
let result1 = "";
for (let i = 0; i < 100000; i++) {
result1 += "A";
}
// join
let result2 = new Array(100000).fill("A").join("");
문자열 덧셈: 매 반복마다 새로운 문자열 생성 → 시간이 오래 걸림.
join: 배열에 요소를 추가한 뒤 한 번에 연결 → 더 빠르고 메모리 효율적.