-
JAVA - 증감 연산자를 앞에 붙일 때와 뒤에 붙일 때의 차이! ( 선위 증감연산자 / 후위 증감연산자 )Knowledge/Java 2019. 10. 10. 00:28반응형
++ 은 변수의 값을 1 증가시키는 연산자고 --은 변수의 값을 1 감소 시키는 연산자다.
이는 변수 앞에 붙일 수도 있고 뒤에 붙일 수도 있다.
이를 앞에 붙이면 '선위 증감 연산자'라고 하고
뒤에 붙이면 '후위 증감 연산자'라고 한다
근데 변수에 한번 붙여보면 별 차이가 없어 보인다.
123456789101112131415161718int front = 1;// 증감 연산자를 앞에 붙일 변수 - 1로 초기화int back = 1;// 증감 연산자를 뒤에 붙일 변수 - 1로 초기화++front;// 선위 증감 연산자 사용back++;// 후위 증감 연산자System.out.println(front);// 2출력System.out.println(back);// 2출력보다시피 앞에 붙이나 뒤에 붙이나 2가 나오긴 마찬가지니까.
그러나 분명 차이가 있다. 이는 다른 연산과 함께 사용할 때 확인할 수 있다.
코드 예시를 보자
1234567891011121314151617int x = ++front + 1;// 선위 증감 연산자 사용하고 1과 더함int y = back++ + 1;// 후위 증감 연산자 사용하고 1과 더함System.out.println(front);// 3출력System.out.println(back);// 3출력System.out.println(x);// 4출력System.out.println(y);// 3출력각각 선위 / 후위 증감 연산자를 사용하고 1과 더했을 때
front와 back의 값은 둘 다 3이 나오지만
선위 증감 연산자 사용하고 1과 더한 값을 저장한 x는 4가 출력되지만
후위 증감 연산자 사용하고 1과 더한 값을 저장한 y는 3이 나온다.
무슨 일일까?
이는 선위 증감 연산자와 후위 증감 연산자의 차이 때문에 발생한 일이다.
선위 증감 연산자는 자신의 값을 먼저 올리거나 내린 후 다음 행동을 취한다.
그러니까 위의 코드에서 front는 이미 1과 더하기 전에 자신의 값을 1 올렸고 그 후 덧셈이 이루어 진 것이다.
그러나 후위 증감 연산자는 다르다. 모든 행동을 취한 다음 자신의 값을 올리거나 내린다.
그러니까 위의 코드에서 y에는 back이 2인 상태에서 1과 더한 값이 저장된 것이고
그 모든 과정이 끝난 다음에 마지막으로 back은 자신의 값을 1 올렸기 때문에 위와 같은 상황이 발생한 것이다.
사실 연산에서만 이렇게 작동하는 것은 아니다 예를 들어 보자면
1234567891011System.out.println(++front);// 4출력System.out.println(back++);// 3출력System.out.println(front);// 4출력System.out.println(back);// 4출력위와 같이 print를 할 때도 비슷하게 작동한다.
그래서 이런 저런 설명이 있지만 필자는 그냥 이렇게 외웠다.
변수보다 '먼저' 증감 연산자가 나온 경우엔 값을 '먼저' 올리거나 내린 후 다음 행동이 이뤄지고
변수보다 '나중에' 증감 연산자가 붙은 경우엔 모든 행동이 이뤄지고 난 '나중에' 값이 올라가거나 내려간다고.
자바 처음 배울 즈음에 이게 굉장히 헷갈렸던 기억이 있어서
복습하는 김에 포스팅으로 정리해 남긴다
반응형'Knowledge > Java' 카테고리의 다른 글
Java 상수 ( final은 무엇인가 ) (0) 2019.10.10 Java 변수, 리터럴, 자료형, 형변환 (0) 2019.10.09 더 빠르게 입력받고 출력해보자 BufferedReader/BufferedWriter (0) 2019.09.04 Java에서 날짜를 편하게 쓰자! LocalDate (0) 2019.09.04