[Java] 연산자

AReum·2023년 12월 20일

Java-Start

목록 보기
3/8

1. 연산자(Operator)

1-1. 연산자(Operator)란?

  • +, -, *, / 와 같이 계산을 수행하는 기호를 의미한다.

1-2. 연산자의 종류

  • 산술 연산자 : +, -, *, /, %(나머지 연산자)
  • 증감 연산자 : ++, --
  • 비교 연산자 : ==, !=, >, <, >=, <=
  • 논리 연산자 : &&(AND), ||(OR), !(NOT)
  • 대입 연산자 : =, +=, -=, *=, /=, %=
  • 삼항 연산자 : ? :

1-3. 연산자와 피연산자

1 + 2
a + b
  • 연산자(Operator) : 연산 기호 (예. +, -)
  • 피연산자(Operaend) : 연산 대상 (예. 1, 2, a, b)

2. 산술 연산자

2-1. 산술 연산자란?

  • 주로 숫자를 계산하는 데 사용하는 연산자이다. 우리가 알고 있는 수학 연산을 수행한다.

2-2. 산술 연산자 코드 예시

package operator;

public class Operator1 {
    public static void main(String[] args) {
        //변수 초기화
        int a = 5;
        int b = 2;

        //덧셈
        int sum = a + b;
        System.out.println("a + b = " + sum); //출력 a + b = 7

        //뺄셈
        int diff = a - b;
        System.out.println("a - b = " + diff);

        //곱셈
        int multi = a * b;
        System.out.println("a * b = " + multi);

        //나눗셈
        int div = a / b;
        System.out.println("a / b = " + div);

        //나머지
        int mod = a % b;
        System.out.println("a % b = " + mod);
    }
}

📍실행 결과

a + b = 7
a - b = 3
a * b = 10
a / b = 2
a % b = 1

2-3. 참고. 0으로 나누기

  • 5 / 0과 같이 숫자는 0으로 나눌 수가 없다.
  • 위에 코드 변수 b = 0을 대입해서 재실행을 하면 아래와 같은 오류가 발생한다.
Exception in thread "main" java.lang.ArithmeticException: / by zero
  • 예외가 발생하면 해당 시점 이후의 결과가 출력되지 않고 프로그램이 종료된다.

3. 문자열 더하기

3-1. 문자열 + 연산자 코드 예시

package operator;

public class Operator2 {
    public static void main(String[] args) {

        //문자열과 문자열 더하기1
        String result1 = "hello " + "world";
        System.out.println(result1);

        //문자열과 문자열 더하기2
        String s1 = "string1";
        String s2 = "string2";
        String result2 = s1 + s2;
        System.out.println(result2);

        //문자열과 숫자 더하기1
        String result3 = "a + b = " + 10;
        System.out.println(result3);

        //문자열과 숫자 더하기2
        int num = 20;
        String str = "a + b + ";
        String result4 = "a + b = " + 20;
        System.out.println(result4);
    }
}

📍실행 결과

hello world
string1string2
a + b = 10
a + b = 20

3-2. 코드 분석

String result1 = "hello " + "world"

  • "hello " 문자열과 "world" 문자열을 더해서 "hello world" 문자열을 만든다.
  • 결과를 result1에 저장한다.

String result2 = s1 + s2

  • s1s2변수에 있는 문자열을 읽는다.
  • "string1" + "string2"연산을 수행해서 string1string2 문자열을 만든다.
  • 결과를 result2에 저장한다.

String result3 = "a + b = " + 10

  • 문자와 숫자를 더하면 숫자를 문자열로 변경한 후(int -> String) 서로 더한다.
  • 결과를 result3에 저장한다.

String result4 = "a + b = " + 20

  • 변수에 저장되어 있어도 문자와 숫자를 더하면 숫자를 문자열로 변경한 후(int -> String) 서로 더한다.
  • 결과를 result4에 저장한다.

4. 연산자 우선순위

4-1. 연산자 우선순위 코드 예시

package operator;

public class Operator4 {

    public static void main(String[] args) {
        int sum3 = 2 * 2 + 3 * 3; //(2 * 2) * (3 * 3)
        int sum4 = (2 * 2) + (3 * 3);
        System.out.println("sum3 = " + sum3);
        System.out.println("sum4 = " + sum4);
    }
}

📍실행 결과

sum3 = 13
sum4 = 13
  • 연산자 우선순위에 의해 곱셈이 먼저 계산된다.
  • 연산자 우선순위를 변경하려면 수학과 동일하게 괄호()를 사용하면 된다.

4-2. 연산자 우선순위(높은 순 -> 낮은 순)

  1. 괄호 ()
  2. 단항 연산자 : ++ , -- , ! , ~ , new , (type)
  3. 산술 연산자 : * , / , % 우선, 그 다음에 + , -
  4. Shift 연산자 : << , >> , >>>
  5. 비교 연산자 : < , <= , > , >= , instanceof(객체 타입 확인)
  6. 등식 연산자 : == , !=
  7. 비트 연산자 : & , ^ , |
  8. 논리 연산자 : && , ||
  9. 삼항 연산자 : ? :
  10. 대입 연산자 : = , += , -= , *= , /= , %= 등등

5. 증감 연산자

5-1. 증감 연산자란?

  • 증가 및 감소 연산자를 줄여서 증감 연산자라고 한다.
  • ++--로 표현한다.
  • 변수의 값을 1만큼 증가시키거나 감소시킨다.
  • 연산자의 위치에 따라 연산이 수행되는 시점이 달라진다.

5-2. 증감 연산자 코드 예시

package operator;

public class OperatorAdd1 {
    public static void main(String[] args) {
        int a = 0;

        a = a + 1;
        System.out.println("a = " + a); //1

        a = a + 1;
        System.out.println("a = " + a); //2

        //증감 연산자
        ++a;
        System.out.println("a = " + a); //3
        ++a;
        System.out.println("a = " + a); //4
    }
}

📍실행 결과

a = 1
a = 2
a = 3
a = 4
  • a = a + 1을 증감 연산자를 사용해 숫자 값을 하나 증가한다.
  • 값을 하나 감소 할 때는 --a와 같이 표현하면 된다. (=>a = a - 1)

5-3. 전위, 후위 연산자

  • 전위(Prefix) 증감 연산자 : 증감 연산자가 변수 앞에 오는 경우를 의미한다.(예 : ++a)
  • 후위(Postfix) 증감 연산자 : 증감 연산자가 변수 뒤에 오는 경우를 의미한다.(예 : a++)

5-4. 전위, 후위 연산자 코드 예시

package operator;

public class OperatorAdd2 {

    public static void main(String[] args) {
        //전위 증감 연산자 사용 예
        int a = 1;
        int b = 0;

        b = ++a;
        System.out.println("a = " + a + ", b = " + b);

        //후위 증감 연산자 사용 예
        a = 1; //a 값을 다시 1로 지정
        b = 0; //b 값을 다시 0으로 지정

        b = a++;
        System.out.println("a = " + a + ", b = " + b);
    }
}

📍실행 결과

a = 2, b = 2
a = 2, b = 1

5-5. 코드 분석

b = ++a

  • 전위 증감 연산자는 증감 연산이 먼저 수행된 후 나머지 연산이 수행되기 때문에 a의 값을 먼저 증가 시키고, 그 결과를 b에 대입한다.

b = a++

  • 후위 증감 연산자는 다른 연산이 먼저 수행된 후 증감 연산이 수행되기 때문에 a의 현재 값을 b에 먼저 대입하고, 그 후 a값을 증가 시킨다.

6. 비교 연산자

6-1. 비교 연산자란?

  • 두 값을 비교할 때 사용한다. 주로 조건문과 함께 사용한다.
  • (true) 또는 거짓(false)이라는 결과가 출력된다.

6-2. 비교 연산자 코드 예시

package operator;

public class Comp1 {
    public static void main(String[] args) {
        int a = 2;
        int b = 3;

        System.out.println(a == b); // a와 b는 같지 않다
        System.out.println(a != b); // a와 b는 다르다
        System.out.println(a > b); // a는 b보다 크지 않다
        System.out.println(a < b); // a는 b보다 작다
        System.out.println(a >= b); // a는 b보다 크거나 같지 않다
        System.out.println(a <= b); // a는 b보다 작거나 같다

        //결과를 boolean 변수에 담기
        boolean result = a == b;
        System.out.println(result);
    }
}

📍 실행 결과

false
true
false
true
false
true
false

6-3. 문자열 비교

  • 문자열이 같은지 비교할 때는 ==이 아니고, .equals()메소드를 사용해야 한다.

6-4. 문자열 비교 코드 예시

package operator;

public class Comp2 {
    public static void main(String[] args) {
        String str1 = "문자열1";
        String str2 = "문자열2";

        boolean result1 = "hello".equals("hello"); // 리터럴 비교
        boolean result2 = str1.equals("문자열1"); //문자열 변수, 리터럴 비교
        boolean result3 = str1.equals(str2); //문자열 변수 비교

        System.out.println(result1);
        System.out.println(result2);
        System.out.println(result3);
    }
}

📍실행 결과

true
true
false

7. 논리 연산자

7-1. 논리 연산자란?

  • boolean형인 true, false를 비교할 때 사용한다.
  • &&(AND): 두 피연산자가 모두 참이면 참을 반환하고, 둘 중 하나라도 거짓이면 거짓을 반환한다.
  • ||(OR) : 두 피연산자가 중 하나라도 참이면 참을 반환하고, 둘다 거짓이면 거짓을 반환한다.
  • !(NOT) : 피연산자의 논리적 부전증 반환한다. 즉 참이면 거짓을 반환하고, 거짓이면 참을 반환한다.

7-2. 논리 연산자 활용 코드 예시

package operator;

public class Logical2 {
    public static void main(String[] args) {
        int a = 15;
        //a는 10보다 크고 20보다 작다.
        boolean result = a > 10 && a < 20; //(a > 10) && (a < 20)
        System.out.println("result = " + result);
    }
}

📍실행 결과

result = true
  • 변수의 위치를 변경해도 결과는 같다.
  • 범위를 나타내는 경우 아래와 같이 작성하면 코드를 좀 더 읽기 좋다.
boolean result = 10 < a && a < 20;

8. 대입 연산자

8-1. 대입 연산자란?

  • 값을 변수에 할당하는 연산자이다.
  • int a = 1a라는 변수에 1이라는 값을 할당한다.

8-2. 축약(복합) 대입 연산자

  • 산술 연산자와 대입 연산자를 한번에 축약해서 사용한다.
  • +=, -=, *=, /+, %=로 표현한다.

8-3. 축약(복합) 대입 연산자 코드 예시

package operator;

public class Assign1 {
    public static void main(String[] args) {
        int a = 5;
        a += 3; // 8 (5 + 3): a = a + 3
        a -= 2; // 6 (8 - 2): a = a - 2
        a *= 4; // 24 (6 * 4): a = a * 4
        a /= 3; // 8 (24 / 3): a = a / 3
        a %= 5; // 3 (8 % 5): a = a % 5
        System.out.println(a);
    }
}

📍실행 결과

3
  • int a라는 변수에 5를 대입하고, 나머지를 구하는 대입 연산자를 통해((8 % 5): a = a % 5) 결과가 3이 나오는 걸 알 수 있다.
profile
개발 관련 공부한 것을 기록합니다.🎈

0개의 댓글