증가 연산자 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
에 대입하는 순이죠.
코드 실행 순서:
a
의 값을 1 증가시킵니다 (temp = a + 1
).- 증가된 값을
a
에 대입합니다 (a = temp
). - 증가된
a
의 값을 사용합니다.
후위 증가 연산자
반면, 변수 뒤에 ++
가 있으면 이를 후위 증가 연산자라고 합니다. 이 경우엔 어떨까요?
1
2
3
4
int a = 1;
System.out.println(a); // 1
int temp = a + 1;
a = temp
a
에 값을 더하기 전에 먼저 출력(반환)하고, 그 이후에 a
값을 증가시킵니다.
코드 실행 순서:
- 현재
a
의 값을 사용합니다 (System.out.println(a)
). 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️⃣ 실행 순서:
a
가 0으로 초기화됩니다.++a
는 전위 증가 연산자로,a
의 값을 1 증가시키고 나서 그 값을 반환합니다.a
는 0에서 1로 증가합니다.
counter.setValue(1)
이 호출되어,counter
객체의 값이 1로 설정됩니다.counter.getValue()
를 호출하면 1이 반환됩니다.
따라서, 1️⃣에서 출력되는 값은 1입니다.
2️⃣ 실행 순서:
a
가 다시 0으로 초기화됩니다.a++
는 후위 증가 연산자로, 현재a
의 값을 먼저 사용하고 나서a
의 값을 1 증가시킵니다.- 현재
a
는 0입니다. 이 값이counter.setValue
에 전달됩니다. - 그런 다음
a
는 0에서 1로 증가합니다.
- 현재
counter.setValue(0)
이 호출되어,counter
객체의 값이 0으로 설정됩니다.counter.getValue()
를 호출하면 0이 반환됩니다.
따라서, 2️⃣에서 출력되는 값은 0입니다.
Go 언어에서는 코드의 가독성과 일관성을 위해 후위 연산자만 사용 가능하다고 하네요.😮
This post is licensed under CC BY 4.0 by the author.