JAVA/JAVA

Java | Operator 연산자

pathas 2020. 1. 16. 21:34

Operator 연산자

연산을 실행하는 기호

※ 피연산자 : 연산의 대상이 되는 값, 항이라고도 함


산술연산자

피연산자에 대한 산술적 계산을 실행할 때 사용하는 연산자

단항 산술 연산자

단항 산술 연산자 설명
+ 양수임을 표시하는 연산자, 양수 표기시 생략
- 음수임을 표시하는 연산자

이항 산술 연산자

이항 산술 연산자 설명
+ 두 항의 값을 더함
- 앞의 항에서 뒤의 항을 뺌
* 두 항의 값을 곱함
/ 앞의 항을 뒤의 항으로 나눔
% 앞의 항을 뒤의 항으로 나눈 나머지를 구함

 


증감연산자

특정 변수의 값을 1만큼 증가시키거나 감소시키는 역할을 하는 연산자

주로 제어문에 많이 사용됨

단항 산술 연산자 설명
++ 피연산자의 값을 1만큼 증가시킴
-- 피연산자의 값을 1만큼 감소시킴
  • 전위연산자 : ++(--)변수, 변수값을 사용하기 전에 +(-)1 계산이 먼저 이루어짐
  • 후위연산자 : 변수++(--), 변수값을 먼저 사용하고 나서 나중에 +(-)1 계산이 이루어짐

사용례 1

public class Op1 {
    public static void main(String[] args) {        
        int a = 4;
        int b = a++;
        int c = ++a;
        System.out.println("a값: "+a+", b값: "+b+", c값: "+c);
        // a값: 6, b값: 4, c값: 6
        /*
        ① a = 4
        ② b에 a(4)가 대입된 후 a = 4 + 1 계산이 이루어지기
        때문에 b의 값은 4가 출력
        ③ a = 5인 상태에서 a = 5 + 1 계산이 먼저 이루어지기 때문에
        a = 6이 되고, c에 a(6)이 대입돼서 변수 a, c값으로 6이 출력
        */
    }
}

※ 대입연산자 오른쪽의 산술연산자가 먼저 실행되고 그 값이 변수에 저장됨

사용례 2

public class Op2 {
    public static void main(String[] args) {
        int i = 8;

        System.out.println("i: "+i); // i: 8
        System.out.println("++i: "+(++i)); //++i: 9
        System.out.println("i++: "+(i++)); //i++: 9
        System.out.println("i: "+i); // i: 10        

         System.out.println("--i: "+(--i)); // --i: 9
        System.out.println("i--: "+(i--)); //i--: 9
        System.out.println("i: "+i); // i: 8
    }
}

사용례 3 - JavaScript

JavaScript에서 증감연산자를 사용하는 것과 동일함

var i = 8;

console.log("i: "+i); // i: 8
console.log("i++: "+(i++)); // i: 8
console.log("++i: "+(++i)); // i: 10
console.log("i: "+i); // i: 10

※ 웹브라우저에 표현하고 싶으면 console.log()를 document.write()로 바꾸면 됨


관계연산자

관계연산자 설명
> 왼쪽 값이 오른쪽 값보다 크다면 참
>= 왼쪽 값이 오른쪽 값 이상이라면 참
< 왼쪽 값이 오른쪽 값보다 작다면 참
<= 왼쪽 값이 오른쪽 값 이하라면 참
!= 왼쪽과 오른쪽 값이 같지 않다면 참
== 비교연산자
변수에 들어있는 값(내용)이 같은 지 확인할 때 사용
참조형(class형) : 저장 위치 비교시 사용

 


논리연산자

논리연산자 설명
& AND, 연결된 두 항의 논리값이 모두 참이여야 참을 반환
&& AND, 조건평가
| OR, 연결된 두 항의 논리값 중 어느 하나라도 참이면 참을 반환
|| OR, 조건평가
^ XOR, 연결된 두 항의 진리값이 같으면 거짓, 다르면 참 반환
! NOT, 뒤에 오는 항의 진리값을 반대로 바꿔서 반환

모두평가 / 조건평가

모두평가 조건평가
&, | &&, ||
첫 항의 결과와 상관없이
무조건 두 항 모두 계산하는 방식
첫 항의 결과에 따라서
두 번째항의 계산을 생략할 수도 있는 방식

※ 요즘에는 크게 구분하지 않고 사용한다고 함

사용례_조건평가

public class Op3 {
    public static void main(String[] args) {
        boolean b = 2>3 && 5<7;
        /* 첫 항의 값이 F이면 &&연산자에 의해 두 번째 항의 값과 관련없이
        무조건 F를 반환하기 때문에 두 번째 항 계산 생략 */
    }
}

사용례_대입연산자 & 논리연산자

public class Op3 {
    public static void main(String[] args) {
        int t1 = 3, t2 = 5, t3 = 7;
        boolean b1, b2, b3;
        boolean b4 = true;

         // >, < 관계연산자
        System.out.println("(t1>t2)?: " + (t1 > t2)); // false
        System.out.println("(t2<t3)?: " + (t2 < t3)); // true

         // &&, || 조건평가
        b1 = (t1 > t2) && (t2 < t3);
        System.out.println("(t1>t2) && (t2<t3): " + b1);
         // (t1>t2) && (t2<t3): false
        b2 = (t1 > t2) || (t2 < t3);
        System.out.println("(t1>t2) || (t2<t3): " + b2);
         // (t1>t2) || (t2<t3): true

         // !(NOT)
         b3 = !b4;
        System.out.println("!b4: " + b3);
         // !b4: false

        // &, | 모두평가
         b1 = (t1 > t2) & (t2 < t3);
        System.out.println("(t1>t2) & (t2<t3): " + b1);
         // (t1>t2) & (t2<t3): false
        b2 = (t1 > t2) | (t2 < t3);
        System.out.println("(t1>t2) | (t2<t3): " + b2);
         // (t1>t2) | (t2<t3): true

         // ^
         b2 = (t1 > t2) ^ (t2 < t3);
        System.out.println("(t1>t2) ^ (t2<t3): " + b2);
         // (t1>t2) ^ (t2<t3): true, 두 항의 진리값이 다르기 때문에 true
    }
}

대입연산자

= : 왼쪽 변수에 오른쪽 항의 값을 대입하는 연산자

복합대입연산자

연산과 대입을 동시에 실행하는 연산자

연산자 하나로 두 개의 연산을 하기 때문에 실행 속도가 더 빠름

연산자 기능
+= 두 항의 값을 더해서 왼쪽 항에 대입
-= 왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입
*= 두 항의 값을 곱해서 왼쪽 항에 대입
/= 왼쪽 항을 오른쪽 항으로 나눈 뒤 몫을 왼쪽 항에 대입
%= 왼쪽 항을 오른쪽 항으로 나눈 뒤 나머지를 왼쪽 항에 대입

※ +=, -=의 경우 1보다 큰 수일 때 주로 사용
→ 증감연산자 ++, --가 있기 때문에

사용례

public class Op4 {
    public static void main(String[] args) {
        int a = 5, b = 7;

        // +=
        a += b;
        System.out.println("a: " + a); // a: 12

        // -=
        a -= b;
        System.out.println("a: " + a); // a: 5

        // *=
        a *= b;
        System.out.println("a: " + a); // a: 35

        // /=
        a /= b;
        System.out.println("a: " + a); // a: 5

        // %=
        a %= b;
        System.out.println("a: " + a); // a: 5
    }
}

※ /(나누기) 연산의 결과 값에 소수점이 있다면 버려짐
→ 기본연산자가 정수 자료형인 int이기 때문에


삼항연산자_조건연산자

(조건식) ? 결과1 : 결과2;

조건식의 진리값이 참이면 결과1을 선택하고
진리값이 거짓이면 결과2를 선택

사용례

public class Op4 {
    public static void main(String[] args) {
        int x = 10, y = -10;

        int absX = (x >= 0) ? x : -x;
        int absY = (y >= 0) ? y : -y;
        System.out.println("absX: " + absX); // absX : 10
        System.out.println("absY: " + absY); // absY : 10
    }
}

※ 삼항연산자를 활용해서 변수에 값을 저장할 수 있음


Java에서 사용하는 연산자들에 대해 알아보았습니다.

증감연산자와 관계, 논리연산자는 제어문에서도 많이 사용되기 때문에 익혀두면 보다 수월하게

제어문을 작성할 수 있을 것입니다.