문제 개요
JavaScript에서는 문자열에 포함된 모든 공백(whitespace)을 제거한 새로운 문자열을 반환하는 함수를 작성해야 하는 경우가 자주 있습니다. 예를 들어 사용자 입력값을 정리하거나, 데이터를 비교하기 전에 형식을 통일할 때 이런 처리가 유용하게 활용됩니다.
반복문을 이용한 기본 구현
가장 기본적인 접근 방식은 문자열을 한 글자씩 순회하면서 공백이 아닌 문자만 새로운 문자열에 이어 붙이는 것입니다. 아래 예제 코드를 살펴보겠습니다.
const str = "This is an example string from which all whitespaces will be removed";
const removeWhitespaces = str => {
let newStr = '';
for(let i = 0; i < str.length; i++){
if(str[i] !== " "){
newStr += str[i];
}else{
newStr += '';
};
};
return newStr;
};
console.log(removeWhitespaces(str));
이 코드는 원본 문자열을 처음부터 끝까지 차례대로 검사하면서, 각 문자가 공백(" ")이 아닌 경우에만 결과 문자열에 추가합니다. 그 결과 모든 공백이 걸러진 문자열이 최종적으로 반환됩니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
Thisisanexamplestringfromwhichallwhitespaceswillberemoved
정규표현식을 활용한 더 간결한 방법
실무에서는 replace() 메서드와 정규표현식을 조합하면 한 줄로 동일한 작업을 처리할 수 있습니다.
const removeWhitespaces = str => str.replace(/\s/g, '');
console.log(removeWhitespaces(str)); // Thisisanexamplestringfromwhichallwhitespaceswillberemoved
여기서 \s는 일반적인 공백뿐만 아니라 탭(\t), 줄바꿈(\n), 캐리지 리턴(\r) 등 모든 종류의 공백 문자를 의미합니다. 또한 플래그 g(global)는 문자열 전체에서 일치하는 모든 부분을 치환하도록 지정하는 역할을 합니다.
참고: 다른 대안들
str.split(' ').join(''): 공백을 기준으로 문자열을 나눈 뒤 다시 하나로 합치는 방식입니다.str.replaceAll(' ', ''): ES2021에서 도입된 메서드로, 일반 공백을 한 번에 모두 치환할 수 있습니다.
마무리
반복문 방식은 내부 동작을 이해하기에는 좋지만, 실제 프로젝트에서는 가독성과 성능 면에서 replace(/\s/g, '')처럼 정규표현식을 활용하는 방법이 권장됩니다. 상황에 맞게 적절한 방식을 선택해 사용하시기 바랍니다.