-
[Java-18] 자바 대입 연산자 & 증감 연산자Java 2020. 11. 27. 14:29
Java Assignment Operators
대입 연산자(Assignment Operators)
대입 연산자는 값을 컴퓨터 메모리의 일부에 대입하거나, 저장하기 위해 사용된다. 이게 무슨 뜻인지 잘 모를 수도 있으니, 예제를 보면서 확인해보자 *혹시 만약에 JVM에서 메모리 관리를 어떻게 하고있는지 모른다면 JVM글을 정리한 블로그를 한번 보고오도록 하자
대입연산자에도 왼쪽과 오른쪽 연산이 있다. 예를들어 A = B 다음과 같이 말이다.
-
왼쪽 연산자 A는 오로지 지역변수, 배열 원소, 객체의 필드(변수) 가 오는게 적절하다.
-
Lefthand side (왼쪽 피연산자) 는 대입식에서 가끔 lvalue 라고 부르기도 한다. left value의 뜻이다.
-
Righthand side(오른쪽 피연산자, rvalue)는 lvalue의 변수 타입과 호환되는 어떠한 벨류값이 올 수 있다. 또한 rvalue 에는 변수가 올 수 있는데, 이럴 때는 변수에 들어간 값을 들어가도록 한다.
-
이항연산자와 다르게 모든 대입연산자는 왼쪽부터 처리되는게 아니라 오른쪽부터 처리되는 우선순위를 가지고 있다 예를들어보자
이런식의 연산이 있다고 가정하면 제일먼저 j=x 그리고 i= 그리고 z= 을 연산하여 반환한다.
실제로 동작하는 모습은 다음과 같다는 것이다.
-
기본적인 대입연산자는 ‘=’ 이다. 절대 == 과 헷갈리지 않도록 하자.
이런건 가능하긴 하지만 가독성이 너무 떨어져 보인다.
-
추가적으로 대입 연산자 라고 하면 ‘ = ‘ 이꼬르 하나만 존재하는건 아니고, 산술연산자 5개와 비트 & 쉬프트 연산자 6개가 합쳐진 총 11개의 연산자가 더 존재한다.
+-
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
>>>=
다음과 같은 연산자가 있는데 헷갈릴 수도 있다. 이 부분을 간단한 방법으로 설명을 해보겠다.
+= 연산자
먼저 += 부터 보도록하자. 만약
다음과 같은 연산자가 있다고 가정해보자 이는 i = i + 2 라는 뜻으로 해석될 수 있는데, 간단하게 번역을 하자면 ***Op 은 Operation 즉 연산식을 얘기합니다 , lvalue 는 왼쪽 피연산자(변수)를 의미 , rvalue는 오른쪽이라는 뜻으로 대입하려는 값(또는 변수)
lvalue op = rvalue;
lvalue = lvalue op rvalue; 와 같은 뜻으로 해석할 수 있다.
Increment/Decrement Operators
증감 연산자
우리가 코드를 작성하다보면 종종 ++ 와 -- 를 붙히는걸 볼 수 있었을 것이다. 이 증감 연산자에 대해서 알아보보도록 하자
+ + , - - 연산자
먼저 설명하기에 앞서 절대로 ++ 는 숫자 에 붙일수 없다. 즉, 변수에만 가능하다는 얘기인데,
이런게 불가능 하다는 것이다. 그럼 변수에 증가 연산이 동작하는지 확인해보자
문제가 없다. 그럼 이 plus++ 가 들어갔으니 i의 값은 2가되겠지 ? 아니다.
안타깝게도 우리가 생각하는 2가 나오지 않고 1이 나오게 된다. 그럼 2가 출력시키기 위해서는 어떻게 해야할까? 원리를 생각하기전에 예스를 들어보자
다음과 같이 변수 뒤에가 아닌 앞에다가 ++ 를 붙여야 증가가 된다. 무슨 원리일까?
이는 증감 연산자 모두에게 해당이 되는데, 대입을 한다고 가정했을 때, 변수의 후위에다가 ++ 를 붙이면 변수를 대입하고 붙이게 된다. 무슨말이냐면
다음과 같이 동작한다고 보면 된다. 이는 -- 감소 연산자에서도 동일하게 작동한다 : ) 즉, 이말이 뭐냐면
‘++ 변수’ 는 값이 참조되기 전에 증가하고, ‘변수 ++’ 는 값이 참조 된 후에 증가하게 된다.
'Java' 카테고리의 다른 글
[Java-20] 자바 연산자 우선순위 (0) 2020.11.27 [Java-19] 삼항 연산자 기본 (원리) ?: (0) 2020.11.27 [Java-17] 자바 Instanceof (0) 2020.11.27 [Java-16] 논리 연산자 (0) 2020.11.27 [Java-15] 관계 연산자 (0) 2020.11.27 -