JavaScript 숫자 앞에 0 붙이기 - padStart()와 커스텀 함수 완벽 가이드
JavaScript 숫자 앞에 0 붙이기 - 완벽 가이드
🎯 핵심 해결책 (바로 사용 가능)
가장 많이 사용되는 패턴
// 1. 최신 방법 - padStart() 사용 (ES2017+)
const number = 5;
const paddedNumber = number.toString().padStart(2, '0');
console.log(paddedNumber); // "05"
// 2. 함수형으로 재사용
function pad(num, size = 2) {
return num.toString().padStart(size, '0');
}
pad(1); // "01"
pad(9); // "09"
pad(10); // "10"
pad(5, 3); // "005"
// 3. 레거시 환경용 커스텀 함수
function pad(d) {
return (d < 10) ? '0' + d.toString() : d.toString();
}
pad(1); // "01"
pad(9); // "09"
pad(10); // "10"
// 4. 다양한 자릿수 지원하는 범용 함수
function zeroPad(num, places) {
const zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
}
zeroPad(5, 2); // "05"
zeroPad(123, 5); // "00123"
📚 상세 설명
배경 및 필요성
숫자 앞에 0을 붙이는 것은 다음과 같은 상황에서 자주 필요합니다:
- 시간 표시: 09:05, 01:30
- 날짜 형식: 2023-07-01
- 파일 정렬: file001.txt, file002.txt
- 고정 자릿수 표시: 상품코드, ID 등
방법별 상세 분석
1. padStart() 메서드 (권장)
// 기본 사용법
const num = 7;
const result = num.toString().padStart(3, '0');
console.log(result); // "007"
// 다양한 패딩 문자
const text = "5";
console.log(text.padStart(4, '0')); // "0005"
console.log(text.padStart(4, '*')); // "***5"
console.log(text.padStart(4)); // " 5" (기본값: 공백)
장점:
- ES2017 표준 메서드
- 다양한 패딩 문자 지원
- 가독성이 좋음
단점:
- 구형 브라우저 미지원 (IE 등)
2. 커스텀 함수 (호환성)
// 간단한 2자리 패딩
function pad(d) {
return (d < 10) ? '0' + d.toString() : d.toString();
}
// 확장된 버전
function pad(num, size = 2, char = '0') {
let s = num.toString();
while (s.length < size) {
s = char + s;
}
return s;
}
// 사용 예시
console.log(pad(5)); // "05"
console.log(pad(42, 4)); // "0042"
console.log(pad(3, 3, '*')); // "**3"
3. Array와 join 활용
function zeroPad(num, places) {
const zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
}
// 또는 더 간단하게
function pad(num, size) {
return Array(size).join('0').slice((size || 2) * -1) + num;
}
실제 활용 사례
시간 포맷팅
function formatTime(hours, minutes, seconds) {
const pad = (num) => num.toString().padStart(2, '0');
return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`;
}
console.log(formatTime(9, 5, 30)); // "09:05:30"
console.log(formatTime(14, 0, 7)); // "14:00:07"
날짜 포맷팅
function formatDate(date) {
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
return `${year}-${month}-${day}`;
}
const today = new Date();
console.log(formatDate(today)); // "2023-07-10"
순서 번호 생성
function generateSequence(start, end, digits = 3) {
const sequence = [];
for (let i = start; i <= end; i++) {
sequence.push(i.toString().padStart(digits, '0'));
}
return sequence;
}
console.log(generateSequence(1, 5, 3));
// ["001", "002", "003", "004", "005"]
성능 비교
// 성능 테스트 (1,000,000회 실행)
const numbers = Array.from({length: 1000000}, (_, i) => i);
console.time('padStart');
numbers.forEach(n => n.toString().padStart(2, '0'));
console.timeEnd('padStart'); // 약 150ms
console.time('custom function');
numbers.forEach(n => (n < 10) ? '0' + n : n.toString());
console.timeEnd('custom function'); // 약 100ms
결론: 커스텀 함수가 약간 더 빠르지만, 실제 사용에서는 차이가 미미함
에러 처리
function safePad(value, length = 2, char = '0') {
// 입력값 검증
if (value === null || value === undefined) {
return char.repeat(length);
}
// 숫자가 아닌 경우 처리
if (isNaN(value)) {
return value.toString().padStart(length, char);
}
return value.toString().padStart(length, char);
}
console.log(safePad(null)); // "00"
console.log(safePad(undefined)); // "00"
console.log(safePad("abc")); // "0abc"
브라우저 호환성 대안
// padStart가 지원되지 않는 환경에서의 폴리필
if (!String.prototype.padStart) {
String.prototype.padStart = function(targetLength, padString) {
targetLength = Math.floor(targetLength) || 0;
if (targetLength < this.length) return this;
padString = String(padString || ' ');
let pad = '';
let len = targetLength - this.length;
while (pad.length < len) {
pad += padString;
}
return pad.slice(0, len) + this;
};
}
결론
JavaScript에서 숫자 앞에 0을 붙이는 방법은 여러 가지가 있습니다:
- 최신 환경:
padStart()
메서드 사용 (가장 권장) - 레거시 환경: 커스텀 함수로 간단 구현
- 고성능 필요: 조건문 기반 커스텀 함수
실무에서는 브라우저 지원 범위를 확인한 후 padStart()
를 우선 사용하고, 필요시 폴리필이나 커스텀 함수로 대체하는 것이 좋습니다.