숫자를 인수로 딱 하나만 받아서, 그 숫자가 지정한 길이만큼의 무작위(랜덤) 문자열을 반환하는 자바스크립트 함수를 작성해 보겠습니다.
여기서 문자열 생성에 사용할 문자 집합은 영문 대문자와 소문자 알파벳으로만 구성되어야 하며, 공백·특수문자·숫자는 포함하지 않습니다.
예제 코드
구현 코드는 다음과 같습니다.
const num = 13;
const randomString = (len = 1) => {
const charSet =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
let randomString = '';
for (let i = 0; i < len; i++) {
let randomPoz = Math.floor(Math.random() * charSet.length);
randomString += charSet.substring(randomPoz, randomPoz + 1);
}
return randomString;
};
console.log(randomString(num));
실행 결과
콘솔에 출력되는 결과는 아래와 같습니다.
EqprjcudAhmVg
무작위로 생성된 값이므로 실행할 때마다 결과는 달라집니다.
코드 동작 원리
핵심 로직을 단계별로 살펴보면 다음과 같습니다.
- charSet 정의: 대문자 A~Z와 소문자 a~z, 총 52개의 알파벳 문자를 하나의 문자열로 저장합니다.
- 반복문: 매개변수로 전달받은 길이(len)만큼 반복하면서 매번 새로운 문자를 하나씩 결과에 추가합니다.
- 무작위 인덱스 계산:
Math.random()은 0 이상 1 미만의 난수를 반환하므로, 여기에 charSet의 길이를 곱한 뒤Math.floor()로 내림하면 0부터 51 사이의 정수 인덱스를 얻을 수 있습니다. - 문자 추출:
substring(randomPoz, randomPoz + 1)로 해당 인덱스 위치의 문자 한 개를 꺼내어 결과 문자열에 이어 붙입니다.
대안: charAt() 활용하기
substring() 대신 charAt() 메서드를 사용하면 코드를 더 간결하게 작성할 수 있습니다.
const randomString = (len = 1) => {
const charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
let result = '';
for (let i = 0; i < len; i++) {
result += charSet.charAt(Math.floor(Math.random() * charSet.length));
}
return result;
};두 방식 모두 동일하게 동작하므로, 상황과 취향에 맞게 선택하여 사용하면 됩니다.