Dev/Java

[Java] 연산자

syuare 2025. 4. 15. 18:08

 

연산자

데이터를 처리하여 결과를 산출하는 것

이러한 연산에 사용되는 표시나 기호 > 연산자


연산은 왜 하는걸까?

더보기

연산은 프로그래밍할 때 매우 중요한 역할을 한다고 하는데, 이유가 무엇인지 갑자기 궁금해졌다.

 

코드를 작성하다 보면 의외로 연산을 굉장히 많이 하는 것을 볼 수 있다.

 

데이터 처리와 계산 작업이 필요할 때

산술 연산을 통해 수학 계산을 수행하거나, 데이터를 조작할 수 있다.

 

조건을 판단하거나 흐름에 대한 제어가 필요할 때

비교 연산자나 논리 연산자를 통해

어떤 데이터 값들의 관계를 판단하고, if문이나 반복문 등을 사용할 때 올바른 조건을 설정할 수 있다.

  • (예시) 입력값이 A보다 큰가? 그렇다면 ~~~~, 아니라면 !!!!! 

값을 저장 혹은 갱신이 필요할 때

대입 연산자나 증감 연산자를 통해

변수의 값을 할당 혹은 갱신함에 따라 프로그램 상태를 변화시킬 수 있다.

  • 반복문 등과 대입/증감 연산자 등 을 잘 활용하면 동적인 프로그램 동작이 가능해질 수 있다.
    • (예시 코드) 수에 저장된 값이 실행 중 변경되므로, 프로그램이 입력이나 실행 상황에 맞춰 다르게 동작하게 된다.
    • 이 때문에 대입 연산자와 증감 연산자는 프로그램을 동적(dynamic)으로 만들어 주는 중요한 도구라 할 수 있다.
// 동적인 프로그램 동작 예시
public class Main {
    public static void main(String[] args) {
        // 변수 선언과 초기화
        int count = 0;  // 초기값 0, 대입 연산자(=)
        
        // 반복문: count를 1씩 증가시키면서 반복
        while(count < 5) {  
            System.out.println("카운트: " + count);
            // 증감 연산자로 count 값을 변경
            count++; // 증감 연산자(++)
                     // 반복할 때마다 count의 값이 1씩 증가
                     // while문 안의 작업이 실행되는 횟수가 결정되고,
                     // 그에 따라 프로그램의 흐름이 변화한다.
        }
        // 반복문이 종료된 후, count의 값은 5가 됩니다.
    }
}

 

코드의 효율성, 가독성을 높이려면

상황에 필요한 적절한 연산자를 사용함으로써 코드를 효율적이고, 간결하게 작성할 수 있다. 


 

산술 연산자 (+, -, *, /, %)

  • 기본적인 수학 연산을 수행하는 연산자
  • +, -, * 연산자는 평소 계산하는 것 처럼 사용할 수 있다.
더보기
int a = 10;
int b = 3;

// 기본적인 사칙연산
int sum = a+b;
System.out.println("sum = " + sum);

int sub = a-b ;
System.out.println("sub = " + sub);

int mul = a*b;
System.out.println("mul = " + mul);

나눗셈

  • 정수끼리 나눗셈을 하면 정수가 되는 경우도 있지만 소수점이 있는 실수가 되기도 한다.
  • 만약 나눗셈 값을 담는 변수의 자료형이 정수형이면 소수점은 버려지고 정수만 출력한다.
  • 소수점을 같이 담고 싶다면 실수형(double)을 자료형으로 사용해야 한다.
더보기
// 나눗셈
// 자료형 정수형
int div = a / b; 
System.out.println("div = " + div);

// 자료형 실수형
double div2 = a / 3.0;
System.out.println("div2 = " + div2);

모듈러 연산자(나머지 연산) - %

 

말 그대로 두 숫자를 나눈 값의 나머지의 값을 계산하는 연산자

  • 시간 계산이나 홀수/짝수 연산이 필요할 때 자주 사용하는 연산자이다.
더보기
int mod = 10%3;
System.out.println("mod = " + mod);
        
int mod2 = 15%4;
System.out.println("mod2 = " + mod2);
        
int mod3 = 20%7;
System.out.println("mod3 = " + mod3);
        
// 모듈러 연산자 활용 > 시간 연산
int mod4 = (10+5)%12;
System.out.println("mod4 = " + mod4);
        
// 모듈러 연산자 활용 > 짝수 홀수 연산
int mod5 = 6%2; // 0이 나오면 짝수
System.out.println("mod5 = " + mod5);
        
int mod6 = 7%2; // 1이 나오면 홀수
System.out.println("mod6 = " + mod6);

대입 연산자 (=)

값을 대입하는 연산자

보통 변수에 값을 할당하는데 사용된다.

 

복합 대입 연산자 (+=. -=, *=, /=, %=)

  • 산술 연산자와 대입 연산자가 합쳐진 연산자
    • 누적 값을 구할 때 자주 사용한다.
  • 대입연산자(=) 중 제일 마지막에 수행된다
더보기
// 대입 연산자
int num = 5;
// 복합 대입 연산자
num += 3; // num = num+3;
          // 오른쪽 부분(num + 3) 이 먼저 연산되고 대입된다.
          // 대입 연산자는 제일 마지막에 수행된다.
System.out.println("num = " + num);
        
num -= 2; // num = num-2;
System.out.println("num = " + num);

num *= 2; // num = num*2;
System.out.println("num = " + num);

num /= 3; // num = num/3;
System.out.println("num = " + num);

num %= 3; // num = num%3;
System.out.println("num = " + num);

증감연산자 (++, --)

변수를 1씩 증가(++)시키거나 1씩 감소(--) 시킬 때 사용되는 연산자

 

증감연산자 사용 시 위치에 따라 결과 차이가 발생하기 때문에 정확히 사용해야 한다.

  • 전위 연산(++i): 연산 후 값을 사용
  • 후위 연산(i++): 값을 먼저 사용 후 연산
더보기
// 증감 연산자
num = 1;
num++; // + 1
num++; // + 1
num--; // - 1
num--; // - 1
System.out.println("num = " + num);
        

// 전위 연산(++i) - 연산 후 값이 활용된다.
int intBox = 5;
System.out.println("(++intBox) = " + (++intBox)); 
// intBox 값이 5였는데, 전위 연산이기 때문에                                                
// 연산을 먼저 하고(6이 됨) 값이 출력된다.


// 후위 연산(i++) - 값을 활용 후 연산을 한다
int intBox2 = 5;
System.out.println("(intBox2++) = " + (intBox2++));
System.out.println("intBox2 = " + intBox2);        

// intBox2 값이 5였고, 후위 연산이기 때문에
// intBox2 값을 먼저 출력 하고 연산을 한다.

비교연산자 (==, !=, >, <, <=, >=)

두 값을 비교하는 연산자

  • 크기 혹은 같음 여부를 비교해서 결과가 boolean 값(true or false)를 반환한다.
  • == : 동일한가?
  • != : 동일하지 않는가?
  • >, <, <=, >= : 크기 비교
더보기
// 비교연산자
// 같음연산자 (==) > 같으면 true, 다르면 false
System.out.println("10 == 10: " + (10 == 10));

// 다름 연산자 (!=) > 다르면 true, 같으면 false
System.out.println("10 != 5: " + (10 != 5));

// 크기 비교 연산자
System.out.println("10 < 5: " + (10 < 5)); // false
System.out.println("10 >= 10: " + (10 >= 10)); // true
System.out.println("10 <= 5: " + (10 <= 5)); // false

논리 연산자 (&&, ||, !)

  • AND 연산자 ( && ) : 두 조건이 모두 참이면 > true 반환
  • OR 연산자 ( || ) : 두 조건 중 하나라도 참이면 > true 반환
  • NOT 연산자( ! ) : 조건이 참일 때 > false 반환 / 조건이 거짓일 때 > true 반환
더보기
// 논리 연산자
// AND 연산자(&&) - 두 조건이 모두 참일 경우 > true 반환
System.out.println("true && true: " + (true && true)); // true
System.out.println("true && false: " + (true && false)); // false

int age = 20;
boolean isStudent = true;
System.out.println(":::" + ((age>30) && isStudent));
// age는 30보다 작기 때문에 false

// OR 연산자(||) - 두 조건 중 하나라도 참일 경우 > true 반환
System.out.println("false || true: " + (false || true)); // true

// NOT 연산자 (!) - true > false, false > true 로 만들어주는 연산자
System.out.println("!true: " + (!true));
System.out.println("!10>5: " + !(10>5)); 
// 10>5 는 참이지만
// NOT 연산자를 사용했기 때문에 false 값을 반환

 


연산자 우선순위

연산자 마다 우선순위를 가지고 있다.

연산자의 우선순위를 알고 있다면 복잡한 표현식에 괄호 등의 추가적인 처리가 없어도 원하는 계산을 올바르게 수행한다.

  • 물론, 괄호 등 그룹화를 하는 것이 이해하기에는 수월하고, 우선순위를 명확하게 할 수 있기 때문에
  • 헷갈리는 것보다는 괄호()를 적극적으로 사용하는 것이 좋다!

산술 연산자 우선순위: 기본적인 수학 사칙연산 우선순위가 그대로 적용된다.

int result = 2 + 3 * 4;

// *이 +보다 우선순위가 높기 때문에
// 3*4를 먼저 계산 (12)
// 이후 +2 를 계산 (14)
// 결과값은 14를 출력한다.

 

기본 연산자 우선순위: 산술 > 비교 > 논리 > 대입 순으로 우선순위가 적용된다.

논리 연산자 우선순위: NOT(!) > AND(&&) > OR(||) 순으로 우선순위가 적용된다.

더보기
//예시1
boolean flag = 10 + 5 > 12 && true;
System.out.println(flag);
// 실행 순서: (10 + 5) > 12 && true : 산술
// → 15 > 12 && true : 비교
// → true && true : 논리
// → flag = true 대입

//예시2
boolean flag2 = 1989 - 5 > 1985 && !true;
System.out.println("flag2 = " + flag2);
// 1989 - 5 = 1984 / 산술
// → 1984 > 1985 = false / 비교
// → false && true = false / 논리
// → flag2 = false 대입
        
//예시3
boolean flag3 = 5+3 > 5 && !(20<10);
System.out.println("flag3 = " + flag3);
// 5+3 = 8 산술
// → 8 > 5 = true
// !(20<10) = false 이지만 NOT 연산자로 인해 true
// true && true = true
// flag3 = true​

 // 논리 연산자 우선순위 (! > && > ||)
boolean result = true || (false && false);
System.out.println("result = " + result);

boolean result2 = true || false && !false;
System.out.println("result2 = " + result2);
// !false = true
// → false && true = false
// → true || false 
// → result2 = true

문자열 비교

문자열 비교할 때는 비교연산자 (==) 를 사용하지 않고, .equals()를 사용한다.

 

간략히 말하면 아래의 차이가 있기 때문이다.

  • 비교연산자 (==): 객체의 참조(메모리 주소)를 비교하는 방식
  • .equal() 메서드: 값(문자열 내용)을 비교하는 방식
더보기
//문자열 비교
String t1 = "Hello";
String t2 = "Hello";

boolean isEqual = t1.equals(t2);
System.out.println("isEqual = " + isEqual);

 

Appendix. 왜 비교연산자(==)를 사용하지 않고 .equals()를 사용하는 걸까?

Appendix. 실습

더보기

산술 연산자

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

        int a = 36;
        int b = 24;

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

        int sub = a-b;
        System.out.println("a-b = " + sub);

        int mul = a*b;
        System.out.println("a*b = " + mul);

        int div = a/b;
        double div2 = a/b;
        System.out.println("(int)a/b = " + div);
        System.out.println("(double)a/b = " + div2);

        double c = 36.0;
        double d = 24.0;
        double div3 = c/d;
        System.out.println("c= double 형 a값 (36.0)");
        System.out.println("d= double 형 b값 (24.0)");
        System.out.println("c/d = " + div3);

        int mod = a%b;
        System.out.println("a%b = " + mod);

    }
}

 


비교 연산자

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

        int x = 5;
        int y = 10;

        boolean t1 = x>y;
        boolean t2 = x<y;
        boolean t3 = x==y;
        boolean t4 = x!=y;

        System.out.println("t1 = " + t1);
        System.out.println("t2 = " + t2);
        System.out.println("t3 = " + t3);
        System.out.println("t4 = " + t4);
        
    }
}

 

입력받은 문자열 비교

import java.util.Scanner;

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

        // 스캐너
        Scanner scanner = new Scanner(System.in);

        System.out.print("첫 번째 문자열을 입력하세요: ");
        String str1 = scanner.nextLine();

        System.out.print("두 번째 문자열을 입력하세요: ");
        String str2 = scanner.nextLine();

        boolean isEquals = str1.equals(str2);
        System.out.print("두 문자열은 같은가요?: " + isEquals);

    }
}

 

 

'Dev > Java' 카테고리의 다른 글

[Java] next() vs nextLine()  (0) 2025.04.17
[Java] 제어문(조건문)  (0) 2025.04.16
[Java] 문자열 데이터 비교 / 비교연산자(==) vs .equals()  (0) 2025.04.15
[Java] 입출력(Input, OutPut)  (0) 2025.04.15
[Java] 변수, 자료형  (0) 2025.04.14