1. 개요
최근 코딩 테스트 준비를 하면서 문제를 푼 다음에는 한번씩 다른 사람들은 어떤 식으로 코드를 작성했는지 확인해 보고 있다. 그런데 나는 for문의 증감 연산자를 사용할 때 후위 연산자를 주로 사용하는 편인데, 코드를 좀 깔끔하게 작성했다 싶은 사람들은 for문 안의 증감 연산자로 전위 연산자를 사용하는 경우가 많아서 이게 특별한 이유가 있는 것인지 의문이 가서 이에 대해 알아 보았다.
2. 차이
결론부터 얘기하자면 전위 연산자가 후위 연산자보다 조금 더 효율적이라고 한다.
이유에 대해 자세히 알아보기 위해 작동 방식을 나타낸 코드와 함께 알아보겠다.
1. 전위 연산자
i=i+1; // i의 값을 1만큼 증가시켜 저장
return i; // 1만큼 증가된 i값을 반환
전위 연산자의 작동 방식은 위의 간단한 코드와 같다. 간단히 말하자면 전위 연산자를 붙여준 변수의 값을 직접 1만큼 증가시켜 그 변수에 저장하고 그 변수를 반환하는 형태라고 보면 되겠다.
2. 후위 연산자
temp=i; // 현재 값 저장
i=i+1; // 후위 연산자의 대상인 변수는 1만큼 증가시켜 값 저장
return temp; // 반환하는 값은 저장해 두었던 1이 증가되기 이전의 i 값
후위 연산자는 코드를 보면 알 수 있듯이 임시 저장 공간에 현재의 값을 저장해두고 후위 연산자의 대상인 값은 1만큼 증가시켜 값을 저장한다. 이후 반환하는 값은 저장해 두었던 1만큼 증가되기 이전의 i 값인 temp를 반환한다. 코드가 이렇게 작성된 이유는 생각해보면 당연하다. 후위 연산자는 애초에 해당 코드가 실행될 때는 현재의 값을 사용하고난 다음에 그 값을 1만큼 증가시켜 주는 연산자이기 때문이다.
전위 연산자가 후위 연산자보다 효율적인 이유는 두 코드를 비교해 보면 알 수 있듯이 temp라는 임시 저장공간을 사용하기 때문으로 보인다.
3. 정리
사실 나는 후위 연산자를 쓰는 것이 습관이 돼서 계속 for문에서 후위 연산자를 사용하고 있었는데, 앞으로는 후위 연산자를 반드시 써야만 하는 경우가 아니라면 전위 연산자를 쓰도록 해야겠다. 특히, for문에서 증감 연산자로 사용할 때처럼 증감 연산자의 대상이 되는 값의 증감되기 이전의 값을 쓸 필요가 없는 경우에는 후위 연산자를 사용할 필요가 없는 것 같다.전위 연산자와 후위 연산자의 효율 차이가 그렇게 크지 않다고 해도 for문의 반복횟수가 늘어나게 된다면 꽤 유의미한 차이가 나게될 테니 어느정도 생각을 해야할 듯 하다.
* 전위 연산자와 후위 연산자의 차이를 알아보면서 굳이 필요한 상황이 아니라면 후위 연산자를 사용하겠다는 마음을 먹었는데 조금 더 알아보니 이제는 컴파일러의 최적화 기술과 PGO(프로파일 기반 최적화)로 인해 후위 연산자로 작성되었더라도 전위 연산자로 바꿔도 문제가 없는 for문과 같은 경우에는 알아서 후위 연산자를 전위 연산자로 바꾸어 실행한다고 한다. 그렇지만 그 차이를 인지하고 있으면서 후위 연산자를 쓰는 것은 조금 찝찝해서 앞으로는 전위 연산자를 애용하려고 한다.
참고자료
'알고리즘(Algorithm)' 카테고리의 다른 글
[Algorithm] DFS(Depth-First Search) (0) | 2025.02.11 |
---|---|
[Algorithm] BFS(Breadth-First Search) (0) | 2025.02.10 |
[알고리즘] 정렬 알고리즘(Sort Algorithm) (0) | 2024.12.23 |