-
[JS 알고리즘&자료구조] 코드 시간 재기JavaScript/Basic 2023. 10. 24. 00:18
N이라는 숫자가 주어지면 1부터 N까지의 합을 구해주는 함수를 짠다고 해보자. 일반적으로는 아래와 같이 짤 수 있다.
const addUpTo = (n) => { let total = 0; for (let i = 1; i <= n; i++) { total += i; } return total; } console.log(addUpTo(100));
해당 함수 외에 다른 방법이 또 있다. 아래를 보자.
const addUpTo = (n) => { return n * (n+1) / 2; } console.log(addUpTo(6));
둘 중 어떤 것이 더 나은 코드라고 할 수 있을까? (아무것도 모르는 상태에서는 난 2번을 고르겠다 🙄) 애초에 '더 좋은' 코드라는 건 어떤 걸 뜻하는 걸까? 결과 값이 더 빨리 나오는 코드? 아니면 메모리를 더 적게 사용하는 코드? 가독성이 더 높은 코드?
상황에 따라 다르지만 대개 사람들은 결과 값이 더 빨리 나오거나 메모리를 더 적게 사용하는 코드를 '더 좋은' 코드라고 정의힌다. 당연히 좋은 코드는 3가지를 적절히 조율하여 나오게 된다.우선 결과가 나오는 속도를 두고서만 생각해보자. 위의 두가지 해결 방법 중 첫번째 것은 1.2초가 소요되고 두번째 방법은 거의 시간 소요가 없다. (0초에 수렴) 그렇다면 두 번째 방법이 더 좋은 방법이라고 할 수 있을까? 매번 수동으로 결과값이 나오는 시간을 측정해서 비교하는 게 맞는걸까?
시간이 문제일까?
결과가 나오는 시간이 답이 아닌 이유들을 살펴보자.
1. 각기 다른 사양을 가진 기기 별로 결과가 나오는 데 걸리는 시간이 달라진다.
2. 동일한 기기에서도 결과가 나오는 데 걸리는 시간이 매 실행마다 달라진다.
3. 어떤 알고리즘들은 결과가 나오는 시간이 측정이 불가능할 정도로 빠르기 때문에 서로 비교가 불가하다.코드가 실행 되는 시간을 측정하는 게 나쁜 방법은 아니지만 시간을 측정하는 방법 외에 더 좋은 방법 있으면 좋을 것 같다. 수동으로 코드가 실행되는 시간을 매번 측정하지 않아도 더 쉽게 효율성을 비교할 수 있는 방법이 있으면 좋을 것 같다.
그걸 위해 'Big O 표기법' 이 존재한다.
'JavaScript > Basic' 카테고리의 다른 글
[JS 알고리즘&자료구조] Big O 표현식의 단순화 (2) 2023.10.26 [JS 알고리즘&자료구조] Big O에 대한 공식 소개 (1) 2023.10.26 [JS 알고리즘&자료구조] 시간 복잡도 시각화하기 (0) 2023.10.25 [JS 알고리즘&자료구조] 연산 갯수 새기 (0) 2023.10.25 [JS 알고리즘&자료구조] Big O 표기법 소개 (1) 2023.10.23