오늘 국비 수업은 JS로 함수, 생성자 만들기, 다양한 내장함수 써보기 위주였다.
수업 중 점점 스스로 코드 짜보는 시간이 늘어나고 있는데,
다 풀고나면 자존감이 수직 상승하다가도, 어 이게 아닌데 싶어서 쌤 답을 참고하거나 구글링을 하는 순간 머리위에 alert('나는 쓰레기야!!!');
가 야동사이트 팝업창마냥 뜨는 것이 아니겠어요? ^^
쌤은 우선 의도한 결과가 출력되는 것의 의의를 두고, 지금 단계에선 알고리즘에 집착하지 말라고 하셨지만.... 사랑은 원래 어느정도의 집착이 필요한 것 아니겠습니까, 선생님.
제가 코딩으로 가계 재정에 이바지하려면 사랑을 좀 해야할 것 같아서요.....낭만적이죠?
오늘 스스로 코딩해보기는
Math.random()
으로 로또 번호 생성기 만들기substring(),toUpperCase(),split()...
등 문자열 함수로 영어 첫글자만 대문자 만들기이렇게 세가지 셀프 코딩 시간이 있었다.
그 중에서 주민번호 유효성 검사가 가장 마지막 순서였고, 나름 제일 복잡...? 했었던 것 같았구요, 오늘 배운거 여러가지 짬뽕 해봤던 과제기 때문에~ 오늘의 코딩 일기 주제로 선정하였습니다 (빠밤!)
주민번호 유효성 알고리즘은 아래 링크를 참조했다 👇
https://blog.naver.com/tgjo0/30068496396
const strJumin = '******-*******';
const jumin = (strJumin) => {
let total = 0;
const jumin = strJumin.replace('-', '').split('');
const lastNum = parseInt(jumin[jumin.length - 1]);
for (let i = 0; i < jumin.length; i++) {
if (0 <= i && i < 8) {
total += parseInt(jumin[i]) * (i+2);
} else if (7 < i && i < 12) {
total += parseInt(jumin[i]) * (i-6);
} else {
continue;
}
}
const checkNum = (11 - (total % 11)) % 10;
return lastNum == checkNum ? '유효한 주민번호 입니다.' : '유효하지 않은 주민번호 입니다.'
}
console.log(jumin(strJumin));
선생님은... 코드가 한참 길어져도 좋으니 알고리즘에 집착하지 말라고 하셨지만! 학창시절 못해본 반항 지금 한번 해볼게요 쌤! 곧 죽어도 함수로 만들고 싶은데 어떡하나요!!!!! ㅠㅠ
과제 조건은 :
해결 과정 :
stiring
이니까, '-'를 날려버린 후 숫자들을 배열로 저장한다.checkNum
에 저장한다.lastNum
과 checkNum
의 값이 동일하면 true
, 아니면false
를 반환.그리고 아래는 내 코드를 보고 풍마가 조금 더 손봐준 코드
// 객체로 만드는 방법
const Jumin = function (strJumin) {
this.strJumin = strJumin;
this.checkJumin = () => {
let jumin = this.strJumin.replace('-', '').split('');
const bits = [2,3,4,5,6,7,8,9,2,3,4,5];
let sum = 0;
for (let i =0; i<bits.length; i++){
sum += Number(jumin[i])*bits[i];
}
let lastNum = Number(jumin[jumin.length-1]);
let resultNum = (11-(sum%11))%10;
return lastNum == resultNum ? '유효한 주민번호' : '유효하지 않은 주민번호';
}
}
for (let i = 0; i < jumin.length; i++) {
if (0 <= i && i < 8) {
total += parseInt(jumin[i] * (i+2));
} else if (7 < i && i < 12) {
total += parseInt(jumin[i]) * (i-6);
} else {
continue;
}
}
👆 이 부분을
👇 이렇게 변경함으로써
const bits = [2,3,4,5,6,7,8,9,2,3,4,5];
let sum = 0;
for (let i =0; i<bits.length; i++){
sum += Number(jumin[i])*bits[i];
}
i
의 범위를 한참 생각해보지 않아도 바로 이해하기 쉬워짐if~else
가 아니라 배열로 중복을 제거하고 sum
의 수식을 빨리 파악하게 함이걸 Clean Code 라고 한다는데~~~ 나름 머리를 굴려서 짠다고 한 코드인데도 고칠점이 수두룩이쥬? ㅎㅎ 아가... 배움엔 끝이 없단다..
일단 오늘 공부 일기는 여기까지!
배웠던 내장 함수 중에 잘 이해가 안가는 부분이랑,
for in
, for each
, for of
의 차이점substring()
, substr()
, slice()
의 차이점을 따로 더 공부해둬야겠어요~~