2.3 연산자

작성자 : 진은영 ( 2004-07-05)

[메인] [목록]

목차
  • 할당 연산자
  • 산술 연산자
  • 관계 연산자
  • 논리 연산자
  • ? 연산자

2.3.1 할당 연산자

할당 연산자는 = 기호로 나타낸다.
변수명 = 값 ;
여기에서 변수명과 값의 데이터 타입이 같아야 한다. 만약 같지 않을 경우에는 오른쪽의 데이터 타입이 왼쪽보다 작아야 한다. 아래의 예를 살펴보자.
public class ExprTest {
  public static void main( String [] args ){
    byte b1 ; 
    int i1 ; 

    b1 = 128 ; // error
    i1 = 0 ; 
  }
}
컴파일

---------- javac ----------
ExprTest.java:6: possible loss of precision
found : int
required: byte
b1 = 128 ;
^
1 error
출력 완료 (1초 경과) - 정상 종료
오류 메시지를 보면 발견한 것은 int 인데, 필요한 것은 byte 타입이라고 나온것을 알 수 있다. 즉 byte 타입의 범위는 127까지 인데 128을 넣으니 범위에 벗어난다는 것이다. 정수형에서의 기본값은 int라고 얘기했다. 오른쪽의 값의 데이터타입은 int인데, 왼쪽은 byte로 되어 있기 때문에 컴파일 시에 오류가 난 것이다. 값을 byte타입으로 바꾸던가 , 아니면 왼쪽 변수의 타입을 byte보다 큰형으로 바꾸어야 할 것이다.


2.3.2 산술 연산자

① 기본 산술 연산자
연산자 결과
+더하기
-빼기
*곱하기
/나누기
%나머지
++증가연산자
+=덧셈 할당
=뺄셈 할당
*=곱셈 할당
/=나눗셈 할당
%=나머지 할당
--감소

산술 연산자의 피연산자는 수치 타입이어야 한다.

아래의 예를 실행해보자

public class ExprTest1 {
  public static void main( String [] args ){
    System.out.println( "정수형 산술 연산.........." ) ; 
    int a = 1 + 1 ; 
    int b = a * 3 ; 
    int c = b / 4 ; 
    int d = c - a ;
    int e = -d ; 
   
    System.out.println( "a = " + a ) ; 
    System.out.println( "b = " + b ) ; 
    System.out.println( "c = " + c ) ; 
    System.out.println( "d = " + d ) ; 
    System.out.println( "e = " + e ) ; 

    System.out.println( "실수형 산술 연산.........." ) ; 
    double da = 1 + 1 ; 
    double db = da * 3 ; 
    double dc = db / 4 ; 
    double dd = dc - a ;
    double de = -dd ; 

    System.out.println( "da = " + da ) ; 
    System.out.println( "db = " + db ) ; 
    System.out.println( "dc = " + dc ) ; 
    System.out.println( "dd = " + dd ) ; 
    System.out.println( "de = " + de ) ; 

  }
}
결과

---------- java ----------
정수형 산술 연산..........
a = 2
b = 6
c = 1
d = -1
e = 1
실수형 산술 연산..........
da = 2.0
db = 6.0
dc = 1.5
dd = -0.5
de = 0.5
출력 완료 (0초 경과) - 정상 종료

② 증가와 감수
++ 와 -- 는 증가 , 감소 연산자이다. ++는 피연산자를 하나만큼 증가시킨다
x = x + 1 >=> x++
와 같이 수정할 수 있다.
x = x - 1 >=> x--


2.3.3 관계연산자

관계 연산자는 피연산자간의 관계를 결정하는 것이다. 이들 연산의 결과는 블리언값으로 나타난다.
연산자 연산결과결과
>동일하다
!=서로 다르다
>더 크다
<더 작다
>=크거나 같다
<=작거나 같다

자바에서 동일하다는 표현은 = 이 아니라 == 이라는 점을 주의하자. 또한 순위를 결정하는 연산자는 수치 타입에만 적용된다. 예를 들어 아래 코드는 타당한 것이다.
int a = 4 ;
int b = 1;
boolean c = a < b ;


2.3.4 논리연산자

논리 연산자는 블리언 피연산자에 대해서만 적용된다.
연산자 연산결과결과
& 논리곱
|논리합
^배타적 논리합
||Short-curcuit 논리합
&& Short-circuit 논리곱
!논리 단항 부정

여기에서는 short-circuit 과 기본 논리연잔자에 대해 구분해 보자
아래의 예를 살펴보자
public class BoolLogin {
  public static void main( String [] args ){
      int a = 0 ; 
      int b = 0 ;
      int c = 0 ; 
      int d = 0 ; 

      System.out.println( (a > b ) & (a++ > b ) ) ;
      System.out.println( "a = " + a + " , b = " + b ) ; 
      System.out.println( (c > d ) && (c++ > d ) ) ;
      System.out.println( "c = " + c + " , d = " + d ) ; 
  }
}
결과

---------- java ----------
false
a = 1 , b = 0
false
c = 0 , d = 0
출력 완료 (0초 경과) - 정상 종료
위의 예를 보면 & 와 && 의 차이점을 알 수 있다. & 는 왼쪽의 결과가 무엇이든지 상관없이 무조건 오른쪽의 연산도 실행한다. 그러나 short-circuit의 &&는 왼쪽의 false라면 오른쪽을 실행해봐도 false이기 때문에 오른쪽의 연산은 실행하지 않는다. | 와 ||도 마찬가지이다. 나중에 개발을 하다보면 & 와 && 를 구분해서 써야 할때가 오기때문에 꼭 알아둬야 할 것이다.


2.3.4 논리연산자

자바에서는 if - then - else 를 대처하는 삼항 연산자가 있다. 이 연산자는 ?로 표기하며 이해만 잘하면 유용하게 사용할 수 있다.
조건 ? true : false
조건이 맞다면 true를 실행하고 그렇지 않으면 false를 실행하면 된다.
아래의 예를 살펴보다.
public class Ternary {
  public static void main( String [] args ){
      int i , k ; 
      i = 10 ; 
      k = i < 0 ? -i : i ; 
      System.out.println( "k=" + k ) ;
  }
}
결과

---------- java ----------
k=10
출력 완료 (0초 경과) - 정상 종료

참고문헌
  • The Complete Reference Java2 [대광서림]