문자열 바꾸기 문제로 보는 알고리즘


예를 들어 텍스트에서 foo라는 단어를 찾아 전부 다른 단어로 바꿔주는 코드를 작성한다고 가정해봅시다. 다음은 pseudocode의 예제입니다.

이제 이 pseudocode를 실제로 작성가능한 JavaScript로 바꾸고자 한다면, 기본적으로 반복문, 조건문에 대한 이해를 해야합니다. 그 다음엔 JavaScript가 할수 있는 것과 할수 없는 것들에 대한 이해가 있어야 합니다. (이 예제의 경우, String은 Immutable하다는 특징, 즉 내용을 직접 바꿀 수 없다는 특징을 알고 있어야 합니다.) 이제 알고리즘을 작성할 준비가 되었습니다. 위의 pseudocode에서 구체화할 수 있는 부분을 구체화해봅시다.

이제 이것을 코드로 옮겨봅시다.

function replaceFoo(text) {
  // foo라는 글자의 index가 -1이 아니면 단어를 찾은 것이다
  while( text.indexOf('foo') !== -1 ) { // index를 발견하면
    let index = text.indexOf('foo');

    // index를 이용해 foo 바로 앞까지의 텍스트를 얻어내고
    let beforeText = text.slice(0, index);
    // foo 대신 새로운 단어를 넣는다
    let replaceText = 'BAR';
    // foo 이후의 텍스트를 넣는다
    let afterText = text.slice(index + 3); // 'foo'는 세 글자이므로 3을 더함

    text = beforeText + replaceText + afterText;
  }

  return text; // 바뀐 내용을 리턴한다
}

이와 같이 자연스럽게 pseudocode는 주석으로 변경될 수 있습니다.

문제 분해


조금 더 나아가, foo를 찾는 부분과, 텍스트를 바꾸는 기능을 분리해봅시다.

replaceFoo(text)

위 함수는 아래 두 함수로 분리할 수 있습니다.

findFoo(text);
replaceFoo(text);