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 감소'Java' 카테고리의 다른 글
| AOP 란? 스프링 xml에서 <aop:config> 태그 용도 (0) | 2022.04.02 |
|---|---|
| web modules 기능과 path 설정 (0) | 2022.03.27 |
| [JAVA] while 문에서 애초에 조건을 만족하지 않는다면? (ft. while문 do while문 차이) (0) | 2022.03.19 |
| [JAVA] switch 문을 반복문으로 바꾸기 (0) | 2022.03.19 |
| [JAVA] isNumber / isNumeric 문자열(String)이 숫자인지 확인하는 함수 (0) | 2022.03.19 |