ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    댓글

Designed by Tistory.