[김영한의 자바] 자바 기본편 (3)

송범·2025년 3월 19일

연산자

+,-,*,/와 같이 계산을 수행하는 기호를 연산자라 한다. 자바에는 다음과 같은 다양한 연산자가 있다.

연산자 종류

  • 산술 연산자 +,-,*,/,%(나머지 연산자)

  • 증감(증가 및 감소 연산자) : ++, --

  • 비교 연산자 : ==, !=, >, <, >=, <=

  • 논리 연산자 : && (AND), ||(OR), !(NOT)

  • 대입 연산자 : =, +=, -=, *=, /=, %=

  • 삼항 연산자 : ? :

package operator;

public class Operator1 {


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

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

        // 뺄셈
        int sub = a - b;
        System.out.println("sub = " + sub); // 출력 : a - b = 3

        // 곱셈
        int mul = a * b;
        System.out.println("mul = " + mul); // 출력 : a * b = 10

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

        // 나머지
        int mod = a % b;
        System.out.println("mod = " + mod); // 출력 : a % b = 1

    }


}

실행 결과

sum = 7
sub = 3
mul = 10
div = 2
mod = 1
  • 5/2의 결과는 2.5가 되어야 하지만 결과는 소수점이 제거된 2 가 나왔다.
    - 자바에서 같은 int형끼리 계산하면 계산 결과도 같은 int형을 사용한다. int형은 정수이기 때문에 소수점 이하를 포함할 수 없다.
  • 나머지 연산자(%) : 이름 그대로 나머지를 구하는 연산자이다. 5 / 2는 몫이 2 나머지가 1이다. 따라서 나머지 연산자 5 % 2의 결과는 1이 된다.

주의!! 0으로 나누기

10 / 0 과 같인 숫자는 0으로 나눌 수 없다. (수학에서 허용하지 않는다.)
방금 예제에서 변수 b = 0을 대입하면 5 / 0이 된다. 이 경우 프로그램에 오류가 발생한다.

Exception in thread "main" java.lang.ArithmeticException: / by zero at operator.Operator1.main(Operator1.java:24)

문자열 더하기

  • 자바는 특별하게도 문자열에도 +연산자를 사용할 수 있다. 문자열에 +연산자를 사용하면 두 문자를 연결할 수 있다.
package operator;

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

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

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

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

    }
}

실행 결과

result1 = hello world
result2 = string1string2
result3 = a + b = 10
result4 = a + b  = 20

문자열과 숫자 더하기1

다음 식은 문자열과 숫자를 더한다. 자바에서 문자와 숫자를 더하면 숫자를 문자열로 변경한 다음에 서로 더한다.
"a + b = " + 10

  • 문자 "a + b = "

  • 숫자 : 10

계산 과정

"a + b = "(String) + 10(int) //문자열과 숫자 더하기
"a + b = "(String) + "10"(int -> String) //숫자를 문자열로 변경
"a + b = " + "10" //문자열과 문자열 더하기
"a + b = 10" //결과

문자열과 숫자 더하기2

int num  = 20;
String str = "a + b  = " ;
String result4 = str + num;
System.out.println(result4);
"a + b  = 20" //결과

마찬가지로 변수에 담겨 있어도 문자와 숫자를 더하면 문자가 된다.

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

연산자 우선순위 (높음 -> 낮음)

우선순위연산자설명결합 방향
1(), [], .괄호, 배열 접근, 멤버 접근왼→오
2++, --단항 증가/감소 (후위)왼→오
3++, --, +, -, ~, !단항 연산자 (전위), 부호 연산, 비트 NOT, 논리 NOT오→왼
4new, (타입)객체 생성, 형변환오→왼
5*, /, %곱셈, 나눗셈, 나머지왼→오
6+, -덧셈, 뺄셈왼→오
7<<, >>, >>>비트 이동왼→오
8<, <=, >, >=, instanceof비교, instanceof 연산자왼→오
9==, !=동등 비교왼→오
10&비트 AND왼→오
11^비트 XOR왼→오
12``비트 OR
13&&논리 AND왼→오
14``
15? :삼항 연산자오→왼
16=, +=, -=, *=, /=, %=, &=, ^=, `=, <<=, >>=, >>>=`대입 연산자
  • 연산자 우선순위는 상식선에서 생각하고, 애매하면 괄호를 사용하자!

증감 연산자

  • 증가 및 감소 연산자를 줄여서 증감 연산자라 한다.

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

전위, 후의 증감 연산자

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

  • ++a: 증감 연산자를 피연산자 앞에 둘 수 있다. 이것을 앞에 있다고 해서 전위(Prefix) 증감 연산자라 한다.

  • a++: 증감 연산자를 피연산자 뒤에 둘 수 있다. 이것을 앞에 있다고 해서 후위(Postfix) 증감 연산자라 한다.

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 = 2, b = 2


        //후위 증감 연산자 사용 예
        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

비교 연산자

  • 비교 연산자는 두 값을 비교하는데 사용한다. 비교 연산자는 주로 조건문과 함께 사용한다.
  • ==: 동등성(equal to)

  • !=: 불일치(not equal to)

  • >: 크다(greater than)

  • <: 작다(less than)

  • >=: 크거나 같다(greater than or equal to)

  • <=: 작거나 같다(less than or equal to)

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

여기서 주의할 점은 ===(=x2)이 다르다는 점이다.

  • =:대입 연산자, 변수에 값을 대입한다.

  • ==:동등한지 확인하는 비교 연산자

문자열 비교

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

  • ==를 사용하면 성공할 때도 있지만 실패할 때도 있다.

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 = " + result1);
        System.out.println("result2 = " + result2);
        System.out.println("result3 = " + result3);
    }
}

실행 결과

result1 = true
result2 = true
result3 = false

논리 연산자

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

&&(그리고) : 두 피연산자가 모두 참이면 참을 반환, 둘중 하나라도 거짓이면 거짓을 반환

||(또는) : 두 피연산자가 중 하나라도 참이면 참을 반환, 둘다 거짓이면 거짓을 반환

!(부정) : 피연산자의 논리적 부정을 반환. 즉, 참이면 거짓을, 거짓이면 참을 반환

package operator;

public class Logical1 {

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

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

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

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

    }

}

실행 결과

&&: AND 연산
true && true : true
true && false : false
false && false : false
||: OR 연산
true || true : true
true || false : true
false || false : false
!: NOT 연산
!true : false
!false : true
변수 활용
a && b : false
a || b : true
!a : false
!b = true

대입 연산자

  • 대입 연산자(=)는 값을 변수에 할당하는 연산자다. 이 연산자를 사용하면 변수에 값을 할당할 수 있다.
    예를 들어, int a = 1a라는 변수에 1이라는 값을 할당한다.

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

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

package operator;

public class Assign1 {

    public static void main(String[] args) {
        int a = 5; // 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 = " + a);
    }
}

실행 결과

a = 3

✅ 정리

자주 사용하는 연산자

종류연산자설명
산술 연산자+, -, *, /, %덧셈, 뺄셈, 곱셈, 나눗셈, 나머지
증가 및 감소 연산자++, --값 1 증가/감소
비교 연산자==, !=, >, <, >=, <=값 비교
논리 연산자&&, `
대입 연산자=, +=, -=, *=, /=, %=변수에 값 할당 및 연산

추가적으로 자주 사용하는 연산자

종류연산자설명
삼항 연산자? :조건에 따라 값 선택
instanceof 연산자instanceof객체 타입 확인
기타new, [], ., ()객체 생성, 배열 인덱스, 객체 멤버 접근, 메서드 호출

비트 연산자 (실무에서 거의 사용되지 않음)

종류연산자설명
비트 연산자&, `, ^, ~, <<, >>, >>>`
profile
BackEnd&Data Scientist가 되고 싶은 개발 기록 노트

0개의 댓글