티스토리 뷰

i++와 ++i. 다시 말해 후위증감연산자와 전위증감연산자의 차이.

이 두 가지의 차이는 Java 뿐만 아니라 C, C++ 등 다른 언어에서도 중요하다.


다시 Java를 공부하면서 이 부분에서 한 번 멈칫했고 헷갈려했다.

이 부분을 머릿속에서 정리하면서 다른 분께도 내 정리 방식이 도움이 되면 좋겠다라는 생각에 작성한다.


일단 i++는 후위 증감 연산자로 말그대로 i를 나중에 증가시킨다.

1
2
int i = 5;
= i++;
cs

위 코드를 실행 시키면 j는 5, i는 6이 된다.

왜냐하면 i++는 i를 나중에 증가시키기 때문이다. 다시 말해, j=i++에서 j에 i를 먼저 대입 해준 뒤 i의 값을 증가시킨다. 그래서 j에 i의 값인 5를 대입 해준 후 i가 증가하여 j는 5, i는 6이 된다.


반면, ++i는 전위 증감 연산자로 말그대로 i를 먼저 증가시킨다.

1
2
int i = 5;
= ++i;
cs

똑같은 코드에서 i++만 ++i로 바꾼 후 실행시키면 i와 j모두 6이 된다.

왜냐하면 ++i는 i를 먼저 증가시키기 때문이다. 다시 말해, j=++i에서 i의 값을 먼저 증가시킨 후 i의 값을 j에 대입한다. 그래서 i의 값이 5에서 6으로 증가된 후 i의 값을 j에 대입하여, i와 j모두 6이 된다.


다시 한번 다른 예제로 살펴보면

1
2
3
int i = 10;
System.out.println(i++);
System.out.println(i);
cs

이 코드를 실행시키면

1
2
10
11
cs

과 같이 출력된다.

1
2
3
int i = 10;
System.out.println(++i);
System.out.println(i);
cs

하지만, 이 코드를 실행시키면

1
2
11
11
cs

과 같이 출력된다.

첫 번째 코드에서는 i++를 출력할 때 i를 먼저 출력하라고 전달해준 후 i가 증가하기 때문에 10, 11이 출력되는 것이고, 두번째 코드에서는 ++i를 출력할 때 i를 증가시킨 후 i의 값을 출력하라고 전달해주기 때문에 11,11이 출력된다.


이정도면 둘의 차이는 확실히 기억될 것이지만, 한 번 두 연산의 차이를 내부적 코드로 살펴보자.

i++의 경우에는 아래와 같은 절차로 연산된다.

1
2
3
final int t = i;
= i+1;
return t;
cs

이미 리턴해줄 값을 먼저 정하고 더한다.

반면 ++i의 경우에는 아래와 같은 절차로 연산된다.

1
2
= i+1;
return i;
cs

먼저 더한 후 그 값을 리턴한다.

이런 내부적 절차의 차이를 정리하면 결국 앞에서 정리한 내용이 되며, 또한 이 내부적 절차가 완벽히 정확한 것은 아니지만 위 코드에서 보이다 싶이 전위 연산자의 경우가 조금이라도 성능상으로 이득이 크다.

따라서, i++와 ++i 모두 사용가능할 때에는 ++i를 사용해주는 것이 좋다.


나는 일단 이런식으로 이해를 했다. 다른 분들께도 이런 정리가 도움이 되길 빈다.

공지사항