1. 산술 연산자

1) 연산자 시작

연산자(Operator): 계산을 수행하는 기호

 

  연산자의 종류

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

연산자와 피연산자

3 + 4
a + b

연산자(operator): 연산 기호 ex) +, -

피연산자(operand): 연산 대상 ex) 3, 4, a, b

 

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); //출력 a - b = 3

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

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

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

실행 결과

* 5 / 2의 결과는 2.5가 되어야 하지만 결과는 소수점이 제거된 2가 나왔다.

--> 자바에서 같은 int형끼리 계산하면 계산 결과도 같은 int형을 사용한다.  int형은 정수이기 때문에 소수점 이하를 포함할 수 없다.

* 나머지 연산자(%)

--> 5 / 2는 몫이 2 나머지가 1이다. 따라서 나머지 연산자 5 % 2의 결과는 1이 된다.

 

 

2. 문자열 더하기

문자열에 + 연산자를 사용하면 두 문자를 연결할 수 있다.

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

실행 결과

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

"a + b = " + 10

문자: "a + b = "

숫자: 10

 

계산 과정

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

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

 

 

3. 연산자 우선순위

덧셈보다 곱셈이 우선순위가 더 높다.

package operator;

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

실행 결과

sum1에서 곱셈(*)이 연산자 우선순위가 높기 때문에 2 * 3이 먼저 계산되었다.

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

-----------------------------------------------------------------------------------------

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); //sum3과 같다.
        System.out.println("sum3 = " + sum3);
        System.out.println("sum4 = " + sum4);
    }
}

실행 결과

 

이렇게 복잡한 경우 sum4처럼 괄호를 명시적으로 사용하는 것이 더 명확하고 이해하기 쉽다.

연산자 우선순위가 애매하거나 조금이라도 복잡하다면 언제나 괄호를 고려하자!

 

* 연산자 우선순위 tip

① 상식선에서 우선순위를 사용하자

② 애매하면 괄호 ()를 사용하자

 

 

4. 증감 연산자

증가 및 감소 연산자

++--

변수의 값을 1만큼 증가시키거나 감소시키는 편의 기능

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

        --a;
        System.out.println("a = " + a); //3
    }
}

실행 결과

a = a + 1++a로 간단히 표현할 수 있는 것이 증감 연산자이다.

즉, 해당 변수에 들어 있는 숫자 값을 하나 증가시키는 것이다.

 

++a : a = a + 1
--a : a = a - 1

 

cf) 2씩 증가시키는 증감연산자

+= 2

package loop.ex;

public class Num {
    public static void main(String[] args) {
        int a = 1;
        ++a;
        System.out.println("a = " + a); //a = 2

        int b = 1;
        b += 2;
        System.out.println("b = " + b); //b = 3
    }
}

 

※ 전위, 후위 증감연산자

 

1) 전위(Prefix) 증감 연산자

증감연산자를 피연산자 에 두는 경우

++a

증감 연산이 먼저 수행된 후 나머지 연산이 수행된다.

 

2) 후위(Postfix) 증감 연산자

증감연산자를 피연산자 에 두는 경우

a++

다른 연산이 먼저 수행된 후 증감 연산이 수행된다.

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;
a++;

 

 

5. 비교 연산자

1) 비교 연산자

비교 연산자는 두 값을 비교하는 데 사용한다. 비교 연산자는 주로 조건문과 함께 사용한다.

 

비교 연산자

  • == : 동등성 (equal to)
  • != : 불일치 (not equal to)
  • > : 크다 (greater than)
  • < : 작다 (less than)
  • >= : 크거나 같다 (greater than or equal to)
  • <= : 작거나 같다 (less than or equal to)

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

 

※ =와 ==은 다르다.

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

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

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

실행 결과

 

2) 문자열 비교

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

package operator;

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

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

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

 

실행 결과

 

 

6. 논리 연산자

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

 

논리 연산자

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

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

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

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

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

 

논리 연산자 활용

package operator;

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

 

 

7. 대입 연산자

대입 연산자

대입 연산자( = )는 값을 변수에 할당하는 연산자다.

int a = 1

a라는 변수에 1이라는 값을 할당한다.

 

축약(복합) 대입 연산자

산술 연산자와 대입 연산자를 한번에 축약하여 사용하는 것

  • += : i = i + 3 → i += 3
  • -= : i = i - 2 → i -= 2
  • *= : i = i * 4 → i *= 4
  • /= : i = i / 3 → i /= 3
  • %= : i = i % 5 →  i %= 5
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);
    }
}

실행결과

+ Recent posts