ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 표기법' 이 존재한다.

    댓글

Designed by Tistory.