본문 바로가기

Java

[JAVA] 증감연산자 의미와 위치에 따른 종류 (ft. i++ 의미)

    public void printData() {
        int idx = 3;
        idx = getNextIdx(idx);
        System.out.println(idx);
    }

    private int getNextIdx(int idx) {
        if(idx < 10) {
            return idx++;
        } else {
            return 0;
        }
    }

 

- 의문점 -

printData()에서 idx를 출력하면 뭐가 나올까?
원래 idx는 3이었고,
getNextIdx()에서 idx++ 를 실행하여 되돌려주므로 4가 된다.
따라서 출력되는 idx 값은 4가 된다.

위처럼 생각한다면 틀렸다.
idx 값은 3이 출력된다.
그 이유를 살펴보자.

- 증감 연산자 -

idx = idx + 1;

 

위 코드는 idx를 1만큼 증가시키는 명령문이다..
그런데 어떤 값을 1씩 증가시키는 명령은 자주 쓰인다.
그래서 아래 코드처럼 줄여서 쓰는 연산문이 생겼다.

idx++;

 

이런 표현법을 '증감 연산자'라고 한다.
단, '++' 연산자를 앞에 붙이느냐 뒤에 붙이느냐에 따라서
선처리 후연산, 선연산 후처리가 바뀐다.

- 후처리 선연산 -

int idx = 3;
return idx++;

 

위 코드를 실행하는 순서는 이렇다.
idx에 3이라는 값을 넣는다.
idx 값을 return 한다.
그 뒤에 idx 값을 1만큼 증가시킨다.

'++' 증감 연산자가 붙었지만,
일단 없는 셈치고 해당 줄을 수행한다.
그리고 다음 줄로 넘어갈 때 idx 값을 1 증가시킨다.
이러한 이유로 앞에서 idx 값이 3으로 출력된 것이다.

- 선처리 후연산 -

그런데 내가 하고 싶은 연산은 그게 아니다.
파라미터로 전달 받은 값에서 1이 증가한 값을 되돌려주고 싶은 것이다.
그러면 '++' 증감 연산자를 변수 앞에 붙이면 된다.

int idx = 3;
return ++idx;

 

위 코드를 실행하는 순서는 이렇다.
idx 라는 변수에 3을 넣는다.
idx의 값을 1만큼 증시키는 연산을 먼저 수행한다.
그러고 나서 return 명령문을 실행한다.


'++' 증감 연산자가 앞에 붙어 있을 경우, 
해당 줄을 들어가기 전에 먼저 변수의 값을 증가시킨 뒤에,
그 다음에 해당 줄의 코드를 수행한다.
따라서 내가 쓰려던 코드는 아래처럼 수정하면 된다.

    public void printData() {
        int idx = 3;
        idx = getNextIdx(idx);
        System.out.println(idx);
    }

    private int getNextIdx(int idx) {
        if(idx < 10) {
            return ++idx;
        } else {
            return 0;
        }
    }

이러면 idx값이 우리가 처음 예상했던 대로 4로 출력된다.

 

- 증감연산자 종류 -

idx--; 또는 --idx; 처럼
'--' 증감 연산자도 사용 가능하고, 똑같이 작동한다.

즉, 증감 연산자는 다음 네 종류를 생각해 볼 수 있다.

a++; //해당 코드 줄 실행한 뒤에 a 1 증가
++a; //해당 코드 줄 실행하기 전에 a 1 증가
a--; //해당 코드 줄 실행하기 전에 a 1 감소
--a; //해당 코드 줄 실행한 뒤에 a 1 감소
반응형