본문 바로가기

JAVA의 정석

전위증감연산자와 후위증감연산자

 

증감 연산자에는 전위 증감연산자와 후위 증감연산자가 있다.

 

for문이나, 메소드에서 리턴 값을 줄 때 특히나 많이 사용하게 되는 증감 연산자는 어떤 변수에 앞이나 뒤에  ++ , -- 를 붙이는 것을 말한다.

 

처음 코딩을 접했을 때 증감 연산자의 개념에 혼란을 겪었을 때가 있었는데, 오늘 일기를 통해서 더 이상 헷갈리지 않았으면 한다.

 

우선, 제일 쉬운 변수 x에 5라는 값을 대입하고 전위증감 연산자를 출력값에 주도록 해보자 .

 

 

당연히도 전위 증감연산자 이기 때문에 프로그램에 6으로 출력되었다.  그렇다면 후위 증감연산자는 어떨까 ? 

 

 

이번 프로그램에선 5의 값이 출력되었다. ++의 위치만 바꿔주었을 뿐인데 둘의 결과는 차이를 보이고 있다.

 

증감연산자의 위치가 어디냐에 따라 변수의 값이 달라졌다.  그렇다면 후위 증감연산자는 언제 값을 더해줄까 ?

 

처음 x++의 값을 출력하였을 때는 5를 출력하였지만 다음 x의 출력 값은 6을 출력하였다. 

 

후위증감연산자는 전위증감연산자와 다르게 변수의 값을 먼저 사용하고 변수를 1 증가 시킨다. 

 

간단한 곱셈 문제를 하나 예로 들어보자 .

 

 

 

 

첫 줄에서 x의 값은 5이고, y의 값은 x의 후위증감연산자를 주었다. 

 

result는 두 변수의 곱일 때, x와 y, result의 값은 어떻게 될까?

 

필자를 포함한 대부분의 코딩 초보들은 당연히 y라는 변수는 5의 값을 담고 있지만 result의 값에서 1이 더해진 6이 될테니 

 

x = 5 , y = 6,  result = 30 이라고 생각할 것이다. 하지만 결과를 보자. 

 

 

 

 

y의 값이 6이 되어 5 * 6 = 30 이 된 것이 아닌, x의 값이 하나 더해져,  6 * 5 가 되어 30 이 된 모습을 볼 수 있다. 

 

우선 x의 값은 y의 증감연산자에 의해서 1이 더해졌고, y는 후위증감연산자로 인해 더해지기 전의 x값인 5가 대입되어 30이라는 값을 출력

 

한 것이다. 즉 y = x + 1, 이 아니라 y = x++ 이기 때문에 x 라는 변수의 값이 1 더해졌고 y는 x라는 변수에 들어있는 값에 증가되기 전 변수

 

를 담은 셈이다. 

 

그렇다면 전위 증감연산자로 계산하면 어떻게 될까 ?

 

 

y는 5의 전위증감연산자이니 6이라는 값이 담길 것이고, 

 

그렇다면 x 변수의 값은 무엇이 담길까 ? 5  or  6? 

 

무언가 y에서 증감연산자 값이 한 번 처리되어 6이 될테니 x 변수에는 5가 담길 것만 같다.

 

지금이야 말로 5 * 6 = 30 의 식이 성립되는 것일까 ? 

 

 

 

예측과는 달리 y의 값은 6이 , x의 값에도 6이 담겨 36이라는 결과가 출력되었다. 

 

위에서 언급했듯, y에서 x의 전위 증감연산자가 한 번 처리 되었으니 x의 값은 변함이 없을 것이라는 예측은 보기좋게 틀렸다.

 

y에도 x의 전위증감연산자가 처리된 값 6과, x의 값인 5에도 증감연산자처리가 되어 6이 담긴 것이다.

 

증감연산자는 반복문 뿐 아니라 메소드 등 코드에서 다양하게 쓰이는 Operator (연산자) 반댓말로는 Operland(피연산자)가 있음..  

 

이니 헷갈리지 말자 !