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

JavaScript 문자열 대소문자 뒤집기(Swap Case) 함수 구현 방법

이번 글에서는 문자열 하나를 인수로 받아, 포함된 모든 알파벳의 대소문자를 서로 뒤바꾸어 새로운 문자열을 만들어 반환하는 JavaScript 함수를 작성해 보겠습니다.

문제 정의

입력 문자열에는 대문자와 소문자가 섞여 있을 수 있습니다. 함수는 원본 문자열을 기반으로 다음 조건을 만족하는 새 문자열을 생성해야 합니다.

  • 모든 대문자소문자로 변환
  • 모든 소문자대문자로 변환
  • 공백이나 숫자 등 알파벳이 아닌 문자는 그대로 유지

예를 들어 'ThIs Is A STriNG'이 입력되면 'tHiS iS a stRIng'이 결과로 나와야 합니다.

구현 코드

다음은 위 요구 사항을 충족하는 전체 코드입니다 −

const str = 'ThIs Is A STriNG';

// 한 글자씩 판별하여 대소문자를 변환하는 헬퍼 함수
const findLetter = (char = '') => {
    // 대소문자 구분이 없는 문자(숫자, 공백 등)는 그대로 반환
    if (char.toLowerCase() === char.toUpperCase()) {
        return char;
    } else if (char.toLowerCase() === char) {
        // 소문자라면 대문자로 변환
        return char.toUpperCase();
    } else {
        // 대문자라면 소문자로 변환
        return char.toLowerCase();
    }
};

// 문자열 전체를 순회하며 각 글자를 변환하는 메인 함수
const swapCase = (str = '') => {
    let res = '';
    for (let i = 0; i < str.length; i++) {
        res += findLetter(str[i]);
    }
    return res;
};

console.log(swapCase(str));

코드 동작 원리

핵심 아이디어는 toLowerCase()toUpperCase() 메서드의 성질을 활용하는 것입니다.

  1. 알파벳 여부 판별: 어떤 문자에 두 메서드를 적용한 결과가 서로 같다면(예: 공백, 숫자), 해당 문자는 대소문자 개념이 없으므로 그대로 반환합니다.
  2. 소문자 판별: 원본 문자와 toLowerCase() 결과가 같다면 소문자이므로 toUpperCase()로 변환합니다.
  3. 대문자 처리: 위 조건에 해당하지 않으면 대문자이므로 toLowerCase()로 변환합니다.

swapCase 함수는 이 로직을 문자열의 각 문자에 반복 적용하고, 결과를 하나의 문자열로 합쳐 반환합니다.

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다 −

tHiS iS a stRIng

보너스: 한 줄짜리 간결한 버전

배열 메서드를 활용하면 같은 기능을 훨씬 짧게 표현할 수도 있습니다.

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

console.log(swapCaseShort(str)); // tHiS iS a stRIng

알파벳이 아닌 문자는 toLowerCase()를 적용해도 값이 변하지 않으므로, 별도의 분기 처리 없이도 안전하게 동작합니다. 상황에 따라 가독성 좋은 첫 번째 버전 또는 간결한 두 번째 버전을 선택해 사용하시면 됩니다.