연산자

이상민·2024년 7월 10일

산술 연산자

연산자 시작
+,-,*,/와 같이 계산을 수행하는 기호를 연산자라 한다.

연산자 종류

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

연산자와 피연산자

  • 연산자(opaerator): 연산 기호 - 예)+,-
  • 피연산자(operand): 연산 대상 - 예)3,4,a,b

Operator1

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);

        //int z = 10 / 0;

    }
}

int sum = a + b 계산 과정


int sum = a + b //1. 변수 값 읽기
int sum = 5 + 2 //2. 변수 값 계산
int sum = 7 //3. 계산 결과를 sum에 대입
sum = 7 //최종 결과

실행 결과

a + b = 7
a - b = 3
a * b = 10
a / b = 2
a % b = 1
  • 자바에서 int형은 정수이기 때문에 소수점 이하를 포함할 수 없다.

  • 나머지 연산자(%)

    • 이름 그대로 나머지를 구하는 연산자이다.

    주의! 0으로 나누기
    숫자는 0으로 나눌 수 없다. 이 경우 프로그램에 오류가 발생한다.

    문자열 더하기

    자바는 특별하게 문자열에도 + 연산자를 사용할 수 있다.

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 = str + num;
       System.out.println(result4);
   }
}

실행 결과

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

문자와 숫자를 더하면 숫자를 문자열로 변경한 다음에 서로 더한다.

  • 자바는 문자열인 String타입에 다른 타입을 더하는 경우 대상 타입을 문자열로 변경한다.
  • 쉽게 이야기해서 문자열에 더하는 것은 다 문자열이 된다.

연산자 우선순위

수학에서 덧셈보다 곱셈이 우선순위가 더 높다. 자바도 마찬가지이다.

package operator;

public class Operator3 {

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

실행 결과

sum1 = 7
sum2 = 9

연산자 우선순위를 변경하려면 수학과 마찬가지로 괄호()를 사용한다. ()를 사용한 곳이 먼저 계산된다.

조금 더 복잡한 예제

package operator;

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

실행 결과

sum3 = 13
sum4 = 13

이렇게 복잡한 경우 괄호를 명시적으로 사용하는 것이 더 명확하고 이해하기 쉽다.
연산자 우선순위가 애매하거나 조금이라도 복잡하다면 언제나 괄호를 고려하자.

연산자 우선순위 암기법

  1. 상식선에서 우선순위를 사용하자
    우선순위는 상식선에서 생각하면 대부분 문제가 없다.

2.애매하면 괄호를 사용하자
복잡해보이면 괄호를 사용해서 우선순위를 명시적으로 지정하자.

정리

  • 연산자 우선순위는 상식선에서 생각하고, 애매하면 괄호를 사용하자.
  • 누구나 코드를 보고 쉽고 명확하게 이해할 수 있어야 한다.
    복잡하면 명확하게 괄호를 넣어라!
  • 개발에서 가장 중요한 것은 단순함과 명확함이다. 애매하거나 복잡하면 안된다

증감 연산자

증감 연산자는 ++--로 표현되며, 이들은 변수의 값을 1만큼 증가시키거나 감소시킨다.

OperatorAdd1

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; //a = a + 1
        System.out.println("a = " + a);
        ++a; //a = a + 1
        System.out.println("a = " + a);


    }
}

실행 결과

a = 1
a = 2
a = 3
a = 4

변수 a의 값을 하나 증가하려면 a = a + 1 연산을 수행해야 한다.
자기 자신에 1을 더하고 그 결과를 자신에게 다시 저장해야 한다.

**전위,후위 증감연산자

증감 연산자는 피연산자 앞에 두거나 뒤에 둘 수 있으며, 연산자의 위치에 따라 연산이 수행되는 시점이 달라진다.

OperatorAdd2

package operator;

public class OperatorAdd2 {

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

        b = ++a; //a의 값을 먼저 증가시키고, 그 결과를 b에 대입
        System.out.println("a = " + a + " , b = " + b);

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

        b = a++; //a의 현재 값을 b에 먼저 대입하고, 그 후 a 값을 증가시킴
        System.out.println("a = " + a + ", b = " + b); //결과: a = 2, b = 1


    }

}

실행 결과

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

비교 연산자

비교 연산자는 두 값을 비교하는데 사용한다.

  • ==: 동등성
  • !=: 불일치

비교 연산자를 사용하면 참(true) 또는 거짓(false)이라는 결과가 나온다. 참 거짓은 boolean형을 사용한다.

주의할 점은 ===는 다르다는 점이다.

  • =: 대입 연산자, 변수에 값을 대입한다.
  • ==: 동등한지 확인하는 비교 연산자

불일치 연산자는 !=를 사용한다.!는 반대라는 뜻이다.

Comp1

package operator;

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

        System.out.println(a == b);
        System.out.println(a != b);
        System.out.println(a > b);
        System.out.println(a < b);
        System.out.println(a >= b);
        System.out.println(a <= b);

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


    }
}

실행 결과

false
true
false
true
false
true
false

문자열 비교

문자열이 같은지 비교할 때는==이 아니라.eqquals()메서드를 사용해야 한다.
==를 사용하면 성공할 때도 있지만 실패할 때도 있다.

Comp2 - 문자열 비교 예시

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

논리 연산자

논리 연산자는 boolean형인 true,false를 비교하는데 사용한다.

논리 연산자

  • &&(그리고): 두 연산자가 모두 참이면 참을 반환, 둘중 하나라도 거짓이면 거짓을 반환
  • ||(또는): 두 피연산자 중 하나라도 참이면 참을 반환, 둘다 거짓이면 거짓을 반환
  • !(부정): 피연산자의 논리적 부정을 반환. 즉, 참이면 거짓을, 거짓이면 참을 반환

Logical1

package operator;

public class Logical1 {

    public static void main(String[] args) {
        System.out.println("&&: AND 연산");
        System.out.println(true && true);
        System.out.println(true && false);
        System.out.println(false && false);

        System.out.println("||: OR 연산");
        System.out.println(true || true);
        System.out.println(true || false);
        System.out.println(false || false);

        System.out.println("! 연산");
        System.out.println(!true);
        System.out.println(!false);

        System.out.println("변수 활용");
        boolean a = true;
        boolean b = false;
        System.out.println(a && b);
        System.out.println(a || b);
        System.out.println(!a);
        System.out.println(!b);
    }
}

실행 결과

&&: AND 연산
true
false
false
||: OR 연산
true
true
false
! 연산
false
true
변수 활용
false
true
false
true

논리 연산자 활용

논리 연산자를 활용하는 다음 코드를 만들어보자.
변수a10보다 크고 20보다 작은지 논리 연산자를 사용해서 확인해보자.

Logical2

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

대입 연산자

축약(복합)대입 연산자

산술 연산자와 대입 연산자를 한번에 축약해서 사용할 수 있는데, 이것을 축약(복합)대입 연산자라 한다.

연산자 종류 : +=,-=,*=,/=,%=

이 연산자는 연산과 대입을 한번에 축약해서 처리한다.
i = i + 3 ->i += 3
i = i * 4 ->i *= 4

Assign1

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

문제와 풀이

문제1 - int와 평균

  1. num1,num2,num3 라는 이름의 세 개의 int변수를 선언하고, 각각 10,20,30으로 초기화하세요.
  2. 세 변수의 합을 계산하고, 그 결과를 sum이라는 이름의 int변수에 저장하세요.
  3. 세 변수의 평균을 계산하고, 그 결과를 average라는 이름의 int변수에 저장하세요. 평균 계산 시 소수점 이하의 결과는 버림하세요.
  4. sum과 average변수의 값을 출력하세요.

문제1-풀이
OperationEx1

package operator.ex;

public class OperationEx1 {

    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 20;
        int num3 = 30;

        int sum = num1 + num2 + num3;
        int average = sum / 3;

        System.out.println(sum);
        System.out.println(average);
    }
}

실행 결과

60
20

문제2 - double과 평균
다음 double 변수들을 선언하고 그 합과 평균을 출력하는 프로그램을 작성하세요.

double val1 = 1.5;
double val2 = 2.5;
double val3 = 3.5;

문제 풀이

package operator.ex;

public class OperationEx2 {

    public static void main(String[] args) {
        double val1 = 1.5;
        double val2 = 2.5;
        double val3 = 3.5;

        double sum = val1 + val2 + val3;
        double avg = sum / 3;

        System.out.println(sum);
        System.out.println(avg);
    }
}

실행 결과

7.5
2.5

문제3 - 합격 범위

  • int형 변수 score를 선언하세요
  • score가 80점 이상이고, 100점 이하이면 true를 출력하고, 아니면 false를 출력하세요.

문제 풀이

package operator.ex;

public class OperationEx3 {

    public static void main(String[] args) {
        int score = 80;
        boolean result = score >= 80 && score <= 100;

        System.out.println(result);

    }
}

실행 결과

true

마무리

오늘은 계산을 할때 이용되는 다양한 연산자 종류와 어떻게 활용되는지 공부해보았는데, 공부하면서 느낀점은 연산자를 사용해서 코딩을 할때 최대한 축약해서 보기에 명확하고 단순하게 만들어야 한다는 점을 많이 느낀 것 같다. 이 부분이 가장 중요한 부분이라고 생각한다. 그리고 많은 연산자 부분 중에 내가 중요하게 이해한 부분은 먼저 왼쪽에 있는 것 부터 순서로 실행시킨다고 머리로 정리했다.
예로 ++a를 보면 왼쪽에 있는 ++를 먼저 실행시키고 대입시키는 순서가 중요하다 는 것을 이해했다.


출처

https://www.youtube.com/watch?v=JEzBDk0E9Rw

profile
안녕하세요

0개의 댓글