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

JavaScript에서 toUpperCase() 없이 문자열을 대문자로 변환하는 방법

문제 소개

JavaScript에는 문자열을 대문자로 변환하는 내장 메서드인 String.prototype.toUpperCase()가 이미 존재합니다. 하지만 이번 글에서는 이 메서드를 사용하지 않고 동일한 기능을 직접 구현해 보겠습니다.

요구 사항은 다음과 같습니다.

  • 작성할 함수는 String 클래스의 프로토타입(prototype) 객체에 정의되어야 합니다.
  • 문자열에 포함된 모든 영문 알파벳을 대문자로 변경한 새로운 문자열을 반환해야 합니다.

구현 방법

핵심 아이디어는 매우 단순합니다. 먼저 소문자 알파벳 목록과 대문자 알파벳 목록을 각각 준비합니다. 그다음 원본 문자열을 한 글자씩 순회하면서 해당 문자가 소문자 목록에 있는지 확인하고, 존재한다면 동일한 위치(인덱스)의 대문자로 치환합니다. 공백이나 숫자, 특수문자처럼 소문자 목록에 없는 문자는 그대로 결과에 추가됩니다.

이 방식은 별도의 내장 변환 메서드 없이 문자열 순회와 인덱스 매핑만으로 대소문자 변환이 가능하다는 점에서 학습 가치가 큽니다.

코드 예제

다음은 전체 구현 코드입니다.

const str = 'This is a lowercase String';

String.prototype.customToUpperCase = function () {
  const legend = 'abcdefghijklmnopqrstuvwxyz';
  const UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  let res = '';

  for (let i = 0; i < this.length; i++) {
    const el = this[i];
    const index = legend.indexOf(el);

    if (index !== -1) {
      // 소문자인 경우 → 같은 인덱스의 대문자로 치환
      res += UPPER[index];
    } else {
      // 소문자가 아니면 → 원래 문자 그대로 유지
      res += el;
    }
  }

  return res;
};

console.log(str.customToUpperCase());

실행 결과

위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.

THIS IS A LOWERCASE STRING

동작 원리 정리

  1. legend 문자열에서 현재 문자의 인덱스를 찾습니다.
  2. 인덱스가 -1이 아니라면 해당 문자는 소문자이므로, UPPER에서 같은 인덱스의 대문자를 가져옵니다.
  3. 인덱스가 -1이라면 소문자가 아니므로 원래 문자를 그대로 결과에 이어 붙입니다.

참고로 이 구현은 ASCII 영문 소문자(a~z)만 처리하며, 한글이나 악센트 문자 같은 유니코드 확장 문자의 대문자 변환까지는 지원하지 않습니다. 실무 환경에서는 검증된 내장 메서드 toUpperCase()를 사용하는 것이 안전하지만, 문자열 순회와 프로토타입 확장 개념을 익히기에는 훌륭한 예제입니다.