JavaScript 문자열 뒤집기 3가지 방법

Javascript에서 문자열을 뒤집어야 할 때가 있죠? Javascript 문자열 뒤집기 3가지 방법을 하나씩 알아보도록 하겠습니다.

Javascript 문자열 뒤집기 개요

JavaScript에는 기본적으로 문자열을 뒤집는 내장 메서드가 없습니다. 하지만 이용할 수 있는 손쉬운 방법들이 있습니다. 우선은 가장 많이 사용하는 Array.prototype.reverse 메서드를 활용하는 것을 살펴볼 것입니다. 그리고 for loop을 이용해서 직접 뒤집어 줍니다. 마지막으로는 재귀함수를 이용해서 뒤집어 볼 것입니다. 그리고 이 3가지 방식의 실행 속도를 확인해 보겠습니다.

Array로 변환 후 뒤집고 결합하기

우선 String.prototype.split을 사용하여 문자열 str을 배열로 쪼갭니다. 이제 Array.prototype.reverse를 사용하여 배열의 순서를 뒤집어줍니다. 마지막으로 뒤집어진 배열을 Array.prototype.join을 사용해서 하나의 문자열로 붙여줍니다. 아래의 코드를 통해서 해당 내용을 확인하시기 바랍니다.

var str = 'abcdefg';
var strArray = str.split('');
var reversedArray = strArray.reverse();
var strReversed = reversedArray.join('');
console.log(strReversed);
JavaScript

위의 내용이 너무 번거롭죠 메서드 체이닝을 사용해서 한 줄로 아래와 같이 작성할 수 있습니다.

var str = 'abcdefg';
console.log(str.split('').reverse().join(''));
JavaScript
그림 1. Array로 변환 후 뒤집고 결합한 결과
그림 1. Array로 변환 후 뒤집고 결합한 결과

for loop 사용하여 뒤집기

문자열을 for loop을 이용하여 문자열을 뒤집습니다.

var str = 'abcdefg';
var reversedStr = '';
for (var i=0; i < str.length; i++) {
  reversedStr = str[i] + reversedStr;
}
console.log(reversedStr);
JavaScript

재귀함수를 이용하여 뒤집기

재귀함수를 이용해서도 뒤집을 수 있다. 재귀함수에 첫 자를 제외한 나머지 문자를 파라미터로 넘겨주는 재귀함수를 통해서 문자열을 뒤집을 수도 있습니다.

function reverse(str) {
  if (!str) {
    return '';
  } else {
    return reverse(str.slice(1)) + str[0];
  }
}
console.log(reverse('abcedfg'));
JavaScript

성능 비교

위의 JavaScript 문자열 뒤집기 3가지 방법의 속도가 얼마나 차이나는지 확인해 보겠습니다. 모든 함수는 각 10만 번씩 반복해서 테스트 해 보았습니다.

function funcA(str) {
  return str.split('').reverse().join('');
}

function funcB(str) {
  var reversedStr = '';
  for (var i=0; i < str.length; i++) {
    reversedStr = str[i] + reversedStr;
  }
  return reversedStr;
}

function funcC(str) {
  if (!str) {
    return '';
  } else {
    return funcC(str.slice(1)) + str[0];
  }
}

str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHJIKLMNOPQRSTUVWXYZ가나다라마바사아자차카타파하';
console.time('funcA');
for (var i=0; i<100000; i++) {
  funcA(str);
}
console.timeEnd('funcA');

console.time('funcB');
for (var i=0; i<100000; i++) {
  funcB(str);
}
console.timeEnd('funcB');

console.time('funcC');
for (var i=0; i<100000; i++) {
  funcC(str);
}
console.timeEnd('funcC');
JavaScript

가장 빠른 건 for loop을 사용한 funcB가 가장 빨랐습니다. 가장 편리하게 사용하는 funcA는 가장 느렸네요. 하지만 무려 10만 번의 실행을 했을 때 263ms 정도니까 코드 읽기가 편한 funcA를 사용해도 무리가 없다고 생각합니다. 코드의 실행속도도 중요하지만 개발자의 가독력과 상호간의 소통이 더 중요한 건 다들 아시겠죠? 물론 매우 많은 양의 문자열을 뒤집기 해야 하는 상황이라면 funcB와 같이 활용하시는 편이 중요해질 것 같습니다. 사용자가 오래 기다리게 할 수는 없으니까요.

그림 4. JavaScript 문자열 뒤집기 코드들의 성능 비교
그림 4. JavaScript 문자열 뒤집기 코드들의 성능 비교

여기까지 해서 JavaScript 문자열 뒤집기 3가지 방법을 각각 살펴보고, 성능 테스트 후 비교까지 해 보았습니다. 필요하신 분들께 도움이 되셨길 바랍니다.

관련자료

Array.prototype.reverse() 문서Array.prototype.join() 문서, 그리고 String.prototype.splite() 문서를 참고했습니다. 그리고 코드의 실행시간 체크에는 console.time() 문서를 참고했습니다. 추가적으로 내용 확인이 필요하신 분들은 함께 살펴보세요.

같이 읽으면 좋은 글

Leave a Comment