이번 글에서는 문자열을 입력받아 영어 알파벳으로 구성된 모든 문자를 바로 다음 알파벳으로 바꾸는 JavaScript 함수를 작성해 보겠습니다.
예를 들어 다음과 같은 문자열이 있다고 가정해 봅시다.
const str = 'how are you';
출력 결과
함수 실행 후 기대되는 출력은 다음과 같습니다.
const output = 'ipx bsf zpv';
즉, 각 알파벳이 한 칸씩 뒤로 이동합니다(h → i, o → p, w → x). 공백처럼 알파벳이 아닌 문자는 원래 그대로 유지되며, z나 Z처럼 알파벳의 마지막 문자는 다시 a 또는 A로 순환 처리되어야 합니다.
구현 코드
이러한 동작을 수행하는 전체 코드는 다음과 같습니다.
const str = 'how are you';
const isAlpha = code => (code >= 65 && code <= 90) || (code >= 97 && code <= 122);
const isLast = code => code === 90 || code === 122;
const nextLetterString = str => {
const strArr = str.split('');
return strArr.reduce((acc, val) => {
const code = val.charCodeAt(0);
if(!isAlpha(code)){
return acc+val;
};
if(isLast(code)){
return acc+String.fromCharCode(code-25);
};
return acc+String.fromCharCode(code+1);
}, '');
};
console.log(nextLetterString(str));
코드 설명
- isAlpha: 문자의 유니코드 값이 영문 대문자(A~Z, 65~90) 또는 소문자(a~z, 97~122) 범위에 포함되는지 확인하는 헬퍼 함수입니다.
- isLast: 해당 문자가 알파벳의 마지막 문자(Z 또는 z)인지 판별합니다.
- nextLetterString: 문자열을
split('')으로 개별 문자 배열로 나눈 뒤,reduce를 사용해 각 문자를 순회하며 새로운 문자열을 조립합니다. 알파벳이 아니면 그대로 추가하고, 마지막 알파벳이면 25를 빼 처음 문자로 되돌리며, 그 외의 경우에는 1을 더해 다음 문자로 변환합니다.
여기서 핵심은 charCodeAt()으로 문자를 숫자 코드로 변환하고, String.fromCharCode()로 다시 문자로 되돌리는 방식입니다. 이를 활용하면 별도의 알파벳 매핑 테이블 없이도 간결하게 문자 치환 로직을 구현할 수 있습니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
ipx bsf zpv