String.padStart 자바스크립트 문자열 0으로 채우기

원본: The best way to pad a string in JavaScript (padStart)

자바스크립트는 문자열에 다른 문자를 채우는 다양한 방법을 제공합니다. 하지만 모두가 여러 방법 중 가장 효율적인 방법을 사용하고 싶어 합니다.

이 포스트에서는 문자열에 다른 문자를 채우는 가장 좋은 방법을 알아보겠습니다.

조건문으로 문자열 채우기

문자열 채우기란 문자열에 다른 문자열이나 문자 시퀀스를 채우는 것을 의미합니다.

예를 들어, hh:mm:ss 형식의 시간을 포맷하는 함수가 있다고 가정해보겠습니다:

function getTime() {
  const hour = new Date().getHours();
  const min = new Date().getMinutes();
  const sec = new Date().getSeconds();

  return `${hour}:${min}:${sec}`
}

위의 코드를 개발자 도구에서 실행하면 다음과 같은 시간 문자열을 리턴 할 것 입니다:

시간 포맷

하지만 이 코드는 시, 분, 초 값이 한자리로 나타나는 결과를 보입니다:

시간 포맷 한 자리수

항상 형식이 hh:mm:ss로 유지되도록 한 자리 값의 앞 부분에 0을 추가할 수 있습니다.

이를 처리하는 방법 중 하나로 조건문을 사용하여 시, 분, 초가 한 자리라면 앞에 0을 추가하는 것 입니다.

function getTime() {
  let hour = new Date().getHours();
  hour = hour <= 9 ? `0${hour}` : hour;

  let min = new Date().getMinutes();
  min = min <= 9 ? `0${min}` : min;

  let sec = new Date().getSeconds();
  sec = sec <= 9 ? `0${sec}` : sec;

  return `${hour}:${min}:${sec}`
}

이 방법이 꽤 효과가 있지만 더 좋은 방법이 있습니다.

padStart로 문자열 채우기

String 객체의 padStart() 메소드를 사용하면 원하는 길이만큼 문자열에 다른 문자를 채울 수 있습니다.

메소드의 채우기 작업은 문자열의 시작부분 부터 진행되고 결과적으로 지정된 문자로 패딩된 문자열을 리턴합니다.

const digit = "9";
const paddedDigit = digit.padStart(4, "0");

console.log(paddedDigit);
padStart() 메소드 사용 방법

위의 코드 예제에서는 padStart() 메소드를 사용하여 총 길이가 4가 될 때 까지 문자열에 “0”을 패딩했습니다.

console.log() 메소드를 통해 paddedDigit를 출력해보면 값이 “0009”가 되었습니다.

이 메소드는 두 개의 매개변수를 받습니다:

padStart(targetLength, padString);

첫 번째 매개변수는 패딩의 결과로 리턴될 문자열의 길이를 의미합니다.

두 번째 매개변수는 옵셔널 값으로 패딩 시 넣은 문자를 의미합니다. 기본 값은 유니코드 “space” 입니다.

padStart로 시간 포맷

이제 메소드를 사용하여 시간을 포맷하는 방법을 알아보겠습니다.

첫 번째 섹션에서 조건으로 확인했듯이 한 자리 숫자인 경우 앞에 0을 붙여서 두 자리 숫자로 만드는 것이 목표입니다.

이를 스크립트로 작성하면 다음과 같습니다:

function padByZero(input) {
  return input.toString().padStart(2, '0');
}

위의 함수는 매개변수로 숫자를 받고 이 숫자 변수에 toString() 메소드를 사용하여 숫자를 문자열로 변환 합니다.

그런 다음 padStart() 메소드에 패딩된 문자열의 길이를 나타내는 2와 패딩할 문자 ‘0’을 입력했습니다.

함수 padByZero(8)을 실행하면 ’08’을 리턴합니다.

이제 첫 번째 섹션의 getTime() 함수를 padByZero() 함수를 사용하는 버전으로 변경해 보겠습니다:

function getTime() {
  let hour = padByZero(new Date().getHours());
  let min = padByZero(new Date().getMinutes());
  let sec = padByZero(new Date().getSeconds());

  return `${hour}:${min}:${sec}`
}
padStart로 시간 포맷

이전의 조건문 버전보다 더 효율적이고 가독성이 좋으면서 hh:mm:ss 형식을 항상 유지하는 함수가 만들어졌습니다.

padEnd 메소드

String 객체의 padEnd() 메소드는 padStart() 메소드와 마찬가지로 원하는 길이만큼 다른 문자열을 패딩하는데, 패딩의 위치가 문자열의 끝에서 시작한다는 점이 다릅니다.

const digit = "9";
const paddedDigit = digit.padEnd(4, "0");

console.log(paddedDigit); // Output is 9000

위의 예제에서는 “9” 라는 문자열에 padEnd() 메소드를 호출하여 총 길이가 4가 될 때 까지 “0”을 패딩하는 코드이고 그 결과 “9000”을 리턴했습니다.

관련 글

자바스크립트 튜토리얼