Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 문자열의 대소문자 서로 바꾸는 방법

이번 글에서는 문자열을 입력받아 대문자는 소문자로, 소문자는 대문자로 변환한 새로운 문자열을 만들어 반환하는 JavaScript 함수를 작성해 보겠습니다.

핵심 원리

ASCII 코드 기준으로 영어 대문자 A~Z는 65~90, 소문자 a~z는 97~122 범위에 속합니다. 그리고 대문자와 소문자 사이의 코드 값 차이는 정확히 32입니다. 따라서 각 문자가 대문자인지 소문자인지 판별한 뒤, 이 차이(32)를 더하거나 빼주면 대소문자를 쉽게 뒤집을 수 있습니다.

예제 코드

다음은 위 원리를 구현한 전체 코드입니다.

const str = 'The Case OF tHis StrinG Will Be FLiPped';

const isUpperCase = char => char.charCodeAt(0) >= 65 && char.charCodeAt(0) <= 90;
const isLowerCase = char => char.charCodeAt(0) >= 97 && char.charCodeAt(0) <= 122;

const flipCase = str => {
    let newStr = '';
    const margin = 32; // 대문자와 소문자 간의 ASCII 코드 차이
    for (let i = 0; i < str.length; i++) {
        const curr = str[i];
        if (isLowerCase(curr)) {
            // 소문자 → 대문자로 변환
            newStr += String.fromCharCode(curr.charCodeAt(0) - margin);
        } else if (isUpperCase(curr)) {
            // 대문자 → 소문자로 변환
            newStr += String.fromCharCode(curr.charCodeAt(0) + margin);
        } else {
            // 알파벳이 아닌 문자는 그대로 유지
            newStr += curr;
        }
    }
    return newStr;
};

console.log(flipCase(str));

코드 설명

  • isUpperCase / isLowerCase: 문자의 첫 번째 문자 코드(charCodeAt(0))를 확인해 해당 문자가 대문자 또는 소문자 범위에 있는지 검사합니다.
  • margin(=32): ASCII 표에서 대문자와 소문자 사이의 고정된 값 차이를 나타냅니다.
  • String.fromCharCode(): 숫자 형태의 문자 코드를 다시 실제 문자로 변환하는 데 사용됩니다.
  • 공백, 숫자, 특수문자 등 알파벳이 아닌 문자는 조건에 맞지 않으므로 원본 그대로 결과 문자열에 추가됩니다.

실행 결과

콘솔 출력 결과는 다음과 같습니다.

tHE cASE of ThIS sTRINg wILL bE flIpPED

참고: 더 간단한 방법

사실 JavaScript에는 내장 메서드를 활용하면 같은 기능을 한 줄로 처리할 수도 있습니다.

const flipCaseSimple = str =>
    [...str].map(c => c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase()).join('');

console.log(flipCaseSimple(str)); // tHE cASE of ThIS sTRINg wILL bE flIpPED

내장 메서드 방식은 코드가 간결하고 가독성이 좋다는 장점이 있으며, ASCII 코드를 직접 다루는 방식은 문자 인코딩의 동작 원리를 이해하는 데 도움이 됩니다. 상황에 맞게 두 방식 중 하나를 선택해 활용하시면 됩니다.