지금 배우고 있는 언어는 자바스크립트인데,
심심하면 MDN(https://developer.mozilla.org/ko/)에 들어가
(정말 다행스럽게도 한글화가 많이 되어있으니 필요한 정보를 여기서 많이 얻으셔라)
어떤 함수가 있는지 슥삭슥삭 하는 취미가 있었다.
요즘 관심있는 함수는 Math.floor와 같은 Math로 시작하는 함수들인데
마침 지금 프로젝트에서도 로그인 파트를 담당하던 중
닉네임을 받아 적어야 하는데, 선택사항이다보니
입력하지 않게 된다면 빈칸을 둘 순 없으니 무작위 문자열을 입력해줘야 하는데
너무 진부한 것 같아 고민을 해보던 중
아주 오래전 썼던 어플에서 닉네임을 따로 입력하지 않았을 때
랜덤으로 닉네임을 작명 해줬던 곳이 떠올랐다!
바로 시작해보자
우선 간단하게 랜덤세팅을 해보면

이렇게 Math.random()을 사용하면
소숫점 아래 15자리까지 표시되는 0과 1사이의 난수를 생성해준다!
이걸로 간단히 테스트를 해보았다!

나 같은 바보는 없겠지?
변수에 저장이되면 그 숫자는 고정이다..
(이렇게 자라는 것 같다..ㅋㅋ)

오케이.. 확인 완료
조금 더 다듬어보자!

자 이렇게
0이상 1미만의 난수를 생성하고(Math.random())
거기에 10을 곱하면 0이상 10미만의 난수가 되는 것이 되고
여기서 Math.floor()란 수학으로 치면
가우스함수와 같은 의미라고 생각하면 되는데
Math.floor(x) ≒ [x] = x보다 크지 않은 최대의 정수 라고 생각하면 된다!
고 해도 어려워 하는 동기의 말에 부연설명을 붙이자면
양수(+)일 때는 무조건 소수 부분을 버리고
음수(-)일 때도 마찬가지로 소수를 버리되 1이 작아진다고 생각하면 된다!
([3.2] = [3.987] = [3.1] = [3.0] = 3, [-2.02] = [-2.1] = [-2.978] = -3)
여기서는 양수만 사용되기 때문에 소수부분을 버리기 위한 용도!라고 생각하면 된다
Math.round()라는 반올림 함수가 있는데
나 같은 경우에는 정수 부분을 그대로 살리고자 함이기 때문에 floor를 썼다!
라고 생각했지만..(거의 의식의 흐름 포스팅)
Math.floor는 0이상 1미만의 소수인 난수를 생성하기 때문에
1을 절대로 만들어 내지 못한다!
이를 비교해보면,

이렇게 10을 곱했지만 10을 만들어 내지 못하는
floor에 비해 round로 만들어 낸 난수에는 10이 출력 되는 경우가 보인다.
그럼 round가 낫지 않나? 싶은데 10을 곱했지만 10이 필요 없기 때문!
(만약 필요하다면 round를 쓰는게 더 낫다!)
다시 이어서 세팅을 조금 더 해보면!

이렇게
랜덤으로 생성할 문자열로 배열을 만들고
그 배열의 길이에 맞는 난수를 만든뒤
그 난수를 배열의 인덱스에 넣어버리면 계속해서 다른 문자열이 튀어나오게 할 수 있다!
(floor를 쓴 이유는 n개의 배열은 인덱스가 0에서 시작해 n-1로 끝나기 때문)
이 모든 것을 종합하면!

이렇게 랜덤 닉네임 생성기 완성!
### javascript
/// 실행시 자동으로 닉네임을 생성해주는 함수
const nicknameMaker = () => {
const day = ["월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"];
const time = ["동틀녘의", "새벽의", "아침의", "점심의", "저녁의", "해질녘의", "밤의"];
const face = ["화난", "여유로운", "심심한", "외로운", "행복한", "졸린"];
const animal = ["고양이", "강아지", "호랑이", "쿼카", "고슴도치", "햄스터"];
const dayIndex = Math.floor(Math.random() * day.length);
const timeIndex = Math.floor(Math.random() * time.length);
const faceIndex = Math.floor(Math.random() * face.length);
const animalIndex = Math.floor(Math.random() * animal.length);
return day[dayIndex] + " " + time[timeIndex] + " " + face[faceIndex] + " " + animal[animalIndex];
};
++
발돋움 중인 예비 개발자 입니다.
태클 및 의견 공유 언제나 환영 :D