JavaScript는 문자열의 특정 위치에 다른 문자열을 삽입하는 전용 메서드를 직접 제공하지 않습니다. 하지만 slice() 메서드를 활용하면 손쉽게 구현할 수 있습니다. slice() 메서드는 문자열의 일부를 추출하여 새로운 문자열을 반환하는 내장 함수입니다.
slice() 메서드를 활용한 삽입 원리
삽입 로직은 간단합니다. 원본 문자열을 삽입할 위치를 기준으로 두 부분으로 나눈 뒤, 그 사이에 새 문자열을 끼워 넣고 하나로 합치는 방식입니다.
- 앞부분:
str1.slice(0, x)— 인덱스 0부터 x 직전까지 추출 - 뒷부분:
str1.slice(x)— 인덱스 x부터 끝까지 추출
구현 예제
다음과 같이 함수를 작성할 수 있습니다.
function insertAtX(str1, str2, x) {
return `${str1.slice(0, x)}${str2}${str1.slice(x)}`;
}
console.log(insertAtX("Hello World", "Test", 5));실행 결과
HelloTest World
위 코드에서는 "Hello World" 문자열의 5번째 인덱스 위치에 "Test"가 삽입되어 "HelloTest World"라는 결과가 출력됩니다. 템플릿 리터럴(Template Literal)을 사용해 세 개의 문자열 조각을 깔끔하게 연결했습니다.
엣지 케이스 처리
기본 구현은 엣지 케이스를 고려하지 않으므로, 실제 프로젝트에서 사용하려면 상황에 맞게 추가 처리가 필요합니다. 예를 들어 다음과 같은 경우를 생각해 볼 수 있습니다.
- x가 음수인 경우: 문자열 길이에 더해 뒤에서부터 계산하도록 처리
- x가 문자열 길이보다 큰 경우: 문자열 맨 끝에 추가하도록 처리
function insertAtX(str1, str2, x) {
if (x < 0) x = Math.max(str1.length + x, 0);
if (x > str1.length) x = str1.length;
return `${str1.slice(0, x)}${str2}${str1.slice(x)}`;
}이렇게 보완하면 잘못된 인덱스 값이 입력되어도 안전하게 동작하는 견고한 함수를 만들 수 있습니다.