Post

증가 연산자 a++ 와 ++a 차이

전위 증가 연산자와 후위 증가 연산자 비교

1
2
3
4
5
6
public static void main(String[] args) {
    int a = 1;
    System.out.println(++a); // 1️⃣
    System.out.println(a++); // 2️⃣
    System.out.println(a); // 3️⃣
}

이 코드를 실행하면 2, 2, 3 순으로 출력됩니다. 왜 그럴까요? 🤔 

증가(++) 연산자는 변수값에 1을 더합니다. 그런데 증가 연산자를 변수 앞에 쓰는 거와 뒤에 쓰는 것에는 변수 값이 반환되는 시점에 차이가 있습니다.

전위 증가 연산자

++가 변수 앞에 있으면 전위 증가 연산자라고 합니다. ++a는 이렇게 풀어쓸 수 있습니다.

1
2
3
4
int a = 1;
int temp = a + 1;
a = temp
System.out.println(a); // 2

a에 1을 더한 후 그 값을 a에 대입하는 순이죠.

코드 실행 순서:

  1. a의 값을 1 증가시킵니다 (temp = a + 1).
  2. 증가된 값을 a에 대입합니다 (a = temp).
  3. 증가된 a의 값을 사용합니다.

후위 증가 연산자

반면, 변수 뒤에 ++가 있으면 이를 후위 증가 연산자라고 합니다. 이 경우엔 어떨까요?

1
2
3
4
int a = 1;
System.out.println(a); // 1
int temp = a + 1;
a = temp

a에 값을 더하기 전에 먼저 출력(반환)하고, 그 이후에 a 값을 증가시킵니다.

코드 실행 순서:

  1. 현재 a의 값을 사용합니다 (System.out.println(a)).
  2. a의 값을 1 증가시킵니다 (temp = a + 1, a = temp).

연습

다음과 같은 클래스가 있습니다.

1
2
3
4
5
6
7
8
9
10
11
class Counter {
    private int value = 0;

    public void setValue(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

main을 실행했을 때 1️⃣과 2️⃣에는 어떤 값이 출력될까요?

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {
    Counter counter = new Counter();

    int a = 0;
    counter.setValue(++a);
    System.out.println(counter.getValue()); // 1️⃣

    a = 0;
    counter.setValue(a++);
    System.out.println(counter.getValue()); // 2️⃣
}

결과는 다음과 같습니다.

  • 1️⃣: 1
  • 2️⃣: 0

1️⃣ 실행 순서:

  1. a가 0으로 초기화됩니다.
  2. ++a는 전위 증가 연산자로, a의 값을 1 증가시키고 나서 그 값을 반환합니다.
    • a는 0에서 1로 증가합니다.
  3. counter.setValue(1)이 호출되어, counter 객체의 값이 1로 설정됩니다.
  4. counter.getValue()를 호출하면 1이 반환됩니다.

따라서, 1️⃣에서 출력되는 값은 1입니다.

2️⃣ 실행 순서:

  1. a가 다시 0으로 초기화됩니다.
  2. a++는 후위 증가 연산자로, 현재 a의 값을 먼저 사용하고 나서 a의 값을 1 증가시킵니다.
    • 현재 a는 0입니다. 이 값이 counter.setValue에 전달됩니다.
    • 그런 다음 a는 0에서 1로 증가합니다.
  3. counter.setValue(0)이 호출되어, counter 객체의 값이 0으로 설정됩니다.
  4. counter.getValue()를 호출하면 0이 반환됩니다.

따라서, 2️⃣에서 출력되는 값은 0입니다.

Go 언어에서는 코드의 가독성과 일관성을 위해 후위 연산자만 사용 가능하다고 하네요.😮

This post is licensed under CC BY 4.0 by the author.