ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 이항연산자, SCE
    Language 2022. 3. 7. 23:05

    연산자 중 아는 부분은 건너뛰고 복합대입연산자부터 봤다.

     

    결과

    복합대입연산자 사용시 컴파일러가 자동으로 형 변환을 알아서 해준다. 따라서 서로 다른 자료형 간 연산이 간단해졌다.

     

    관계연산자의 경우, 예를 들어 다음과 같이 비교할 경우

    ex) 1.0 == 1

    == 연산을 위해 자동 형 변환이 일어나 true를 반환한다.

     

    이후 논리연산자에 관한 내용도 대강 훑어보았다.

    다만 SCE(Short-Circuit Evalutation)에 대한 내용은 처음 보았다.

    SCE란,

    '연산의 효율 및 속도를 높이기 위해 불필요한 연산을 생략하는 행위'

    를 말한다.

     

    예시)

    result는 예상한 대로 나왔지만, num1 그리고 num2에 대한 예측은 실패했다.

    num1과 num2에는 10씩 두 번 더해주는 연산을 하는데, 왜 결과가 저렇게 나올까?

     

    다음과 같은 규칙 때문이다.

    1) &&의 왼쪽 피연산자가 false -> 오른쪽 피연산자 확인 x

    2) ||의 왼쪽 피연산자가 true -> 오른쪽 피연산자 확인 x

     

    &&(and) 연산 시 왼편이 false일 경우, 오른편은 생략되어 연산되지 않고 false를 반환한다.

    ||(or) 연산 시에도 마찬가지이다. 왼편이 true이면 역시 오른편이 생략되고 true를 반환한다.

    따라서 각각 num1만 10씩 증가되고 num2는 연산이 이루어지지 않았기 때문에 초기값을 그대로 지닌다.

     

    SCE는 불필요한 연산을 줄여 메모리의 효율적 사용을 기하기 위함 이지만 이렇게 의도치 않은 결과를 나타낼 수도 있다.

    그러므로 하나의 문장에 너무 많은 연산을 포함하지 않는 것이 좋다.

    다음과 같이 코드를 나누어 작성하는 편이 안전하다.

     

    num2에도 정상적으로 연산이 진행되었다

     

    'Language' 카테고리의 다른 글

    [Java] EOF(End of File)란?  (0) 2022.03.26
    [Java] 단항연산자  (0) 2022.03.07
    [Java] 형 변환  (0) 2022.03.07
    [Java] 상수(Constants)  (0) 2022.03.07
    [Java] 기본 자료형  (0) 2022.03.07
Designed by Tistory.