씌우거나, 다른 방법을 사용할때 성능차이 비교해볼것.
함수로 만들때 성능차이도 있음.
먼저 문제들을 풀면서 한 문제에도 여러가지 푸는 방법이 있는걸 알았는데, 어떤 방식으로 푸는것이 더 효율적인것일까를 공부하고 싶었고, 그걸 간단하게 정리해볼거다. js를 더 빠르고, 더 낫게 쓰는 방법에 대한 좋은 글을 하나 찾았다. 그걸 토대로 적어볼 예정이다.
1). '불필요한 단계를 제거'하고 더 나은 방법을 탐구.
=> 예를 들어 1부터 num까지의 수 중 홀수를 구하는 코드를 짜본다고 해보자.
ex) 1차적으로 생각한 코드.
let num=18;
let arr = [];
for(let i=0;i<num;i++){ //0부터 num까지 1씩 모두 돌면서
if(i%2!==0){ //안에 조건을 넣어주고, 해당하는 조건이면
arr.push(i); //arr에 넣어준다.
}
}
console.log(arr); //(9) [1, 3, 5, 7, 9, 11, 13, 15, 17]
ex) 2차적으로 생각한 코드. 어차피 0부터 무조건 돌 필요는 없고, 1부터 증가한다 하면 +2씩 더하면
홀수인것만 걸러지지 않을까?
let num=18;
let arr = [];
for(let i=1;i<num;i+=2){
arr.push(i);
}
console.log(arr); //(9) [1, 3, 5, 7, 9, 11, 13, 15, 17]
↓ ↓
두번째 코드의 실행시간이 더 적게 걸리는 코드인것을 확인했다. 같은 내용일때 두번째코드가 더 효율적이란 거다.
예를 들어 소수를 구하는 식도 마찬가지로 만약에 for문이나 while문을 사용시 모두 돌 필요가 없고, 소수는 어차피 1과 자기자신만을 약수로 지니므로, 반대로 생각하면 그 이외의 숫자인 2~자기자신-1 사이의 수로는 나눠지면 안된단 뜻이니까,
만약 특정 수 사이의 소수를 구한다고 하면, 범위를 줄일 수 있을것이다.
=> 즉 조건을 여러번 시도해보고 노력해보면, 탐색시간이 적어지는 방법을 찾을수있다.
2). '불필요한 단계를 제거'할수도 있다.
'incorrect'.split('').slice(2).join(''); // 문자열을 한글자씩 뗀 후,
//index가 2인 글자부터 slice하여, 다시 join함수로 ''안에 넣어 string화 시켰다.
'incorrect'.slice(2); // slice 함수 하나만 사용해 string을 유지한다.
예제 1 참고) '불필요한 단계 제거'
사용하는 메소드나 함수를 최대한 효율적으로 사용하여 풀 수 있어야한다.
우선 컨디션을 잘 유지하면서도, 자기자신에게 자만하지않고 한 문제를 여러가지 방법으로 다시 푸는 연습을 하고있다. 동료에게 배울점은 항상 있다. 나와 생각이 다르면 대환영이다. 더 효율적인 코드는 어떤걸까-를 동료와 함께 탐구해보고 연구해보는 시간을 가졌었다. 실험정신이 좋은 동료를 만나는건 정말 서로에게 도움이 되는 일이다. 우선 이대로, 운동시간, 식사시간, 공부시간 조절을 유지하자.
인용 출처
- js를 최적화하여 작성하는 법
https://medium.com/@bretcameron/13-tips-to-write-faster-better-optimized-javascript-dc1f9ab063d8
문자->숫자 / 숫자->문자 성능비교