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

JavaScript로 기본 toLowerCase()를 대체하는 사용자 정의 함수 구현하기

JavaScript의 문자열 메서드 중 하나인 toLowerCase()는 문자열 내 모든 대문자를 소문자로 변환해 줍니다. 이번 글에서는 이 기본 메서드를 직접 덮어쓰기(override)하면서 동일한 기능을 수행하는 사용자 정의 함수를 만들어 보겠습니다.

구현 원리

핵심 아이디어는 아스키(ASCII) 코드 값을 활용하는 것입니다. 영어 대문자 A~Z는 아스키 코드 65~90에 해당하고, 소문자 a~z는 97~122에 해당합니다. 즉, 대문자와 소문자 사이에는 항상 32만큼의 차이가 존재합니다. 따라서 각 문자의 아스키 코드를 확인한 뒤, 대문자 범위(65~90)에 속하는 문자에 한해서만 코드 값에 32를 더해 소문자로 변환하고, 나머지 문자는 그대로 유지하면 됩니다.

예제 코드

const str = 'Some UpPerCAsE LeTTeRs!!!';

const toLowerCase = function(){
    let str = '';
    for(let i = 0; i < this.length; i++){
        const ascii = this[i].charCodeAt();
        if(ascii >= 65 && ascii <= 90){
            str += String.fromCharCode(ascii + 32);
        }else{
            str += this[i];
        };
    };
    return str;
};

String.prototype.toLowerCase = toLowerCase;
console.log(str.toLowerCase());

코드 설명

  • 함수 내부에서 this는 해당 메서드를 호출한 문자열 자신을 가리킵니다.
  • charCodeAt()으로 각 문자의 아스키 코드 값을 얻습니다.
  • 코드 값이 65 이상 90 이하라면 대문자이므로, String.fromCharCode(ascii + 32)를 통해 소문자로 변환합니다.
  • 그 외의 문자(소문자, 숫자, 특수문자 등)는 원본 그대로 결과 문자열에 추가합니다.
  • 마지막으로 String.prototype.toLowerCase에 새 함수를 할당하여 기본 메서드를 덮어씁니다.

실행 결과

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

some uppercase letters!!!

모든 대문자가 정상적으로 소문자로 변환된 것을 확인할 수 있습니다. 다만 실무 환경에서는 표준 내장 메서드를 덮어쓰는 방식은 코드 예측성을 떨어뜨릴 수 있으므로, 학습 목적이나 특수한 요구 사항이 있을 때만 활용하는 것이 좋습니다.