[Java] 5.연산자(Operator)


자바의 연산자


자바의 연산자(Operator)

자바에는 다양한 연산자가 있다. 아래의 표를 참조하자


연산자 종류포함되는 연산자들
단항연산자++ , – , + , - , ~ , ! ,(cast)
산술연산자/ , * , % , + , -
시프트연산자 > > , > > > , < < 
비교연산자< , > , <= , >= , == , != , instance of
논리연산자& , | , && , || , ^
삼항연산자?:
대입연산자= , *= , /= , %= , += , -= , «= ,  »= ,  »>= , &= , ^= , |=
  • 단항연산자가 제일 우선순위가 높고 대입연산자가 우선순위가 가장낮다.
  • 우선순위가 낮다는것은 가장 뒤에 실행 된다는 뜻이다.
  • 단항연산자의 +,- 와 산술연산자의 +,- 는 다르다. (단항은 부호를 나타내고, 산술은 더하기빼기이다.)

아래에는 각 연산자중에 자주 쓰인다고 생각하는것들에 대한 간단한 설명을 써 보도록 하겠다.

1. 단항연산자

한개의 변수에 대해 적용되는 연산자이다.

  • ++, –

증가 감소 연산자로, 하나의 값을 1만큼 내리거나 올릴 때 사용한다.

이 연산자를 사용할 때 주의할 점이 있는데 바로 이 연산자의 위치이다.

int a=1 라는 변수가 있을 때 , ++a 를 한다면, a 값에 먼저 1을 더하고 a에 대입하고 a++을 하면 a값은 그대로 있고 , 해당 행이 끝날 때 a에 1을 더한다.

쉽게 말하자면,

system.out.print(++a); = > 2
system.out.print(a++); => 1  되는것이다 . (더해지지 않은것이아니다 print 되고나서 더해진다.)


  • !

논리 부정 연산자로 boolean형에만 사용할 수 있다. 해당 boolean값을 반전시킨다.

boolean a=true;
system.out.println(!a);
// 결과 false



2. 산술연산자

기본적으로 계산에 관련된 연산자이다.

  • %,/

둘다 나눗셈에 관련된 연산자이다. %는 나누고 남은 나머지를 , / 는 몫을 결과값으로 돌려준다.

예를들면,

int a=5;
int b=3;
system.out.println(a/b); => 1
system.out.println(a%b); => 2 



3. 비교연산자

앞과 뒤의 변수가 같은지 큰지 ,작은지를 비교 하는 연산자이다.

  • !=

뒤의 변수가 앞의 변수와 같은지를 판별하는 연산자이다.

예를들면,

int a=5;
int b=3;
system.out.println(a!=b); // => false



4. 논리연산자

앞 항과 뒷 항의 논리적인 연산이 필요할 때 사용한다.

  • & , | , ^ , && , ||

    비슷해 보이지만 다르다

    • 앞의 & ,, ^ 이 세가지는 이진논리 연산자로, float과 double을 제외한 모든 기본형에 사용가능하다.
    • && 는 전항과 후항이 모두 참이될 때 참이 되는 논리곱이라고한다.
    •  는 전항과 후항중 하나만 참이라도 참이되는 논리합 이라고 한다.

int a=1;
int b=2;
//논리곱 
if(a==1 && b==2){
    system.out.println("둘다 맞아요"); // 둘다 맞으니까 출력된다.
}
//논리합 
if(a==1 || b==3){
    system.out.println("둘중에 하나는 맞아요"); //둘중에 하나라도 맞으면 출력된다.
}


논리 연산자에서 모든 항이 실행되지 않는경우


int a=1;
int b=2;
// 
if((a=a+1)<0 && (b=b+1)>0){ // 논리곱 연산 결과 거짓
    
    system.out.println("이 문장은 실행되지 않아요");
}
system.out.println("a="+a); 
system.out.println("b="+b);

/*
결과
a=2
b=2
*/
  • 왜 이런결과가 나오는걸까?

java 가 이 조건문을 실행할 때 a=a+1 을 실행해서 결과가 0보다 작은지 비교하고 , 논리연산자를 기준으로 앞의 항이 0보다 크기때문에 논리곱은 false가 나오게 된다 . false가 나오는 순간에, 이 조건문 실행을 건너 뛰고 다음으로 넘어가기 때문에 , a의 값은 논리연산자의 비교를 위해 더해진채로 남게 되는것이고, 조건문안의 b에대한 연산은 이루어지지 않았기 때문에, 값이 그대로 남아있게 된다. 이를 Short-Circuit Logic 단락회로 평가 라고한다.

따라서 논리연산자를 사용하여 비교하는 구문에 수식을 사용해서 변수값을 바꿀경우에 주의가 필요하다.



5. 삼항연산자

말그대로 연산을 하기위해서 3개의 항이 필요한 연산자이다.

  • ? :

    조건식 ? 참일때의 결과 : 거짓일 때의 결과; 의 방식으로 사용한다.

    //삼항 연산자의 사용
    int num=(5>3)?10:20;
    System.out.println(num);
    //결과 10
    



6. 대입연산자

모든 연산자중에서 가장 우선순위가 낮다. 생각해 보면 당연한것이, 다른 연산이 다 되고나서 대입이 되어야 연산을 하는 의미가 있을텐데 그 전에 대입되면 무슨 소용이 있겠는가..

  • *= , /= , %= , += …….

    프로그래밍에서 대입이란, 우측의 항을 좌측에 넣는것을 말한다. 가령 a=b 라고 한다면 , b 를 a 에 대입하는것이 되는것이다. 우리가 익히 알고있던 = 의 “같다” 라는 의미와는 다르다는것을 꼭 인지해야한다.

    위의 연산자들은 대입한다는 의미에 더해서 간단한 연산을 하고 대입할 수 있는것들인데 몇 개 살펴보자.

int a = 1;
int b = 2;
a*=b // a와 b를 곱해서 그것을 다시 a에 대입하겠다.
a/=b // a와 b를 나눈 몫을 a에 저장하겠다.
a%=b // a와 b를 나눈 나머지를 a에 저장하겠다.

연사자는 여기까지 하고 다음 포스팅에서는 , String 이라는 자료형에 대해서 조금 자세하게 알아보자.