본문 바로가기

Java/Chapter 04. 연산자(Operator)

[Java] 04.02 - 자바에서 제공하는 단항 연산자들

들어가며

 단항 연산자는 피연산자가
하나인 연산자로,

 이항 연산자에 비해
그 수가 적다.

 그러나 이항 연산자와
마찬가지로

 유용하게 사용되는
연산자들이다.

 

부호 연산자

 '+'와 '-'는 이항 연산자로
덧셈과 뺄셈에 사용된다.

 그런데 이 둘은 단항 연산자로도
의미를 갖는다.

 물론 그 의미는 수학적
의미와 동일하며,

 연산자의 경우 다음과 같이
사용할 수 있다.

double e1 = 3.5;
double e2 = -e1;    // e2에 저장되는 값은 -3.5

 이와 유사한 방법으로 '+'
연산자도 사용할 수 있다.

 그러나 이는 큰 의미를
두지 않는 연산자이다.

 그럼 두 연산자와 관련하여
다음 예제를 보자.

public class temp {
    public static void main(String[] args){
      short num1 = 1;
      System.out.println(+num1);
      System.out.println(-num1);

      short num2 = 7;
      short num3 = (short)(+num2);
      short num4 = (short)(-num2);
      System.out.println(num3);
      System.out.println(num4);
    }
}
/*
출력 결과
1
-1
7
-7
*/

 자바는 기본적으로 정수형
연산을 int형으로 진행하고

 이는 지금 설명하고 있는
+ 연산자와 - 연산자도
마찬가지다.

short num4 = (short)(-num2);

 때문에 위 문장에서 - 연산의
결과로 int형 정수가 반환된다.

 따라서 위와 같이 short형으로의
형 변환을 진행하지 않으면

 int형 값을 short형 변수에
저장하는 결과로 이어져
컴파일 오류가 발생한다.

 그리고 이는 다음 문장의
+ 연산도 마찬가지다.

short num4 = (short)(+num2);

 위의 + 연산도 결과만 보았을
때는 의미가 없는 연산이지만

 컴파일러에 의해 무시되는
것이 아니라

 실제 연산의 과정을 거쳐
int형 값이 반환된다.

 따라서 형 변환을 하지
않으면

 이 문장에서도 컴파일 오류가
발생한다.

 

전치 증감 연산자

 변수에 저장된 값을 하나
증감시키는 기능의 연산자를
소개하고자 한다.

 이들은 증가 및 감소된
값을 단순히 반환하는
것이 아니라

 실제 변수에 저장된 값을
변화시키는 연산자들이다.

그림 24 - Prefix 증감 연산자 (전치 증감 연산자)

 이 두 연산자는 Prefix 연산자이다.

 이는 피연산자의 앞부분에
(왼편에) 붙는 연산자라는 뜻이다.

 그럼 다음 예제를 통해서
두 연산자의 기능을 확인해보자.

public class temp {
    public static void main(String[] args){
      int num = 7;
      System.out.println(++num);    // 값 1 증가
      System.out.println(++num);    // 값 1 증가
      System.out.println(num);
    }
}
/*
출력 결과
8
9
9
*/

 

후치 증감 연산자

 ++ 연산자와 -- 연산자는
Postfix 연산자로도 사용된다.

 즉 피연산자의 뒷부분에도
(오른편에도) 붙일 수 있다.

 물론 앞서 설명한 Prefix
연산자의 형태로

 사용될 때와는 의미가 조금
다르다.

그림 25 - Postfix 증감 연산자 (후치 증감 연산자)

 기본적으로 값이 하나
증감하는 것은 동일하다.

 그러나 반영되는 시점에
차이가 있으니,

 다음 예제를 통해서 이를
확인해보자.

 참고로 다음 예제에서는

 지금까지 문장 출력에
사용해본

 다음 방식을 대신하여,

System.out.println(...);    // 개행 한다.

 다음 방식을 사용한다.

System.out.print(...);      // 개행 하지 않는다.

 그리고 이 둘의 차이점은
개행의 여부에 있다.

public class temp {
    public static void main(String[] args){
      int num= 5;
      System.out.print((num++) + " ");    // 출력 후에 값이 증가
      System.out.print((num++) + " ");    // 출력 후에 값이 증가
      System.out.print(num + "\n");

      System.out.print((num--) + " ");    // 출력 후에 값이 감소
      System.out.print((num--) + " ");    // 출력 후에 값이 감소
      System.out.print(num);
    }
}
/*
출력 결과
5 6 7
7 6 5
*/

 위의 실행 결과에서
보이듯이,

 Postfix ++ 연산과 Postfix
-- 연산으로 인한

 값의 증가 및 감소는 연산이
진행된 문장이 아닌,

 그 다음 문장으로 넘어가야
반영이 된다.


참고 및 출처

윤성우의 열혈 Java 프로그래밍
국내도서
저자 : 윤성우
출판 : 오렌지미디어 2017.07.05
상세보기