본문 바로가기

Studying/JAVA

[JAVA]_Operator(연산자)

1. 산술연산자

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

 

[Operator1]

 

- 나눗셈에서 정수 / 정수는 소수점이 제거된 정수의 형태가 나옴.

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

 

- 나머지 연산자(%)는 실무와 알고리즘에서 모두 종종 사용하므로 잘 알아두기.

 

!주의!

- 숫자는 0으로 나눌 수 없음. 이 경우 프로그램에서 오류가 발생함.


package operator;

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

        /*
        문자열 더하기
        자바는 문자열에도 + 연산자를 사용할 수 있음.
        + 연산자 사용하면 두 문자 열결 가능.
         */

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

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

        // 문자열과 숫자 더하기01 -> 숫자를 문자로 변경한 다음에 서로 더함
        String result3 = "a + b = " + 10;
        System.out.println(result3);

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

 

[Operator2]

 

- 자바는 문자열에도 + 연산자 사용하여 두 문자를 연결 할 수 있음.

- 문자열과 숫자를 더할 때 숫자를 문자열로 변경한 다음에 서로 더함. 단, 문자열이 앞에 있는 경우에만 해당.


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

 

[Operator3]

 

- 출력 결과를 보면 sum1에서는 7이 나오고, sum2에서는 9가 나옴.

- sum1은 * 연산자가 우선순위가 높고, sum2에서는 ( ) 연산자의 우선순위가 높은 것을 알 수 있음.


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

[Operator4]

 

*연산자 우선순위 암기법*

 

1. 괄호

2. 단항 연산자

3. 산술 연산자

4. Shift 연산자

5. 비교 연산자

6. 등식 연산자

7. 비트 연산자

8. 논리 연산자

9. 삼항 연산자

 

!하지만!

실무개발자들은 우선순위를 외우지 않음. 연산자 우선순위는 딱 2가지만 기억하기.

1. 상식 선에서 우선순위 사용함 : + 연산자보다 * 연산자의 우선순위가 더 높은 것처럼..

2. 애매하면 괄호를 사용함.

 

개발에서 가장 중요한 것은 단순함가 명확함임. 애매하거나 복잡하면 안됨.


package operator;

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

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

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

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

    }
}

 

[OperatorAdd1]

 

-증감연산자에는 ++(증가), --(감소)가 있음.

- 예를들어 a = a + 1을 ++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;  // 값을 다시 1로 저장.
        b = 0;  // 값을 다시 0으로 저장.

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

    }
}

 

[OperatorAdd2]

 

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

- ++a : 증감 연산자를 피연산자 앞에 두면 전위(Prefix) 증감 연산자라고 함.

- a++ : 증감 연산자를 피연산자 뒤에 두면 후위(Postfix) 증감 연산자라고 함.

 

- 전위 증감 연산자는 증감 연산이 먼저 수행된 후 나머지 연산이 수행됨.

- 후위 증감 연산자는 다른 연산이 먼저 수행된 후 증감 연산인 수행됨.

 

- 참고로 증감 연산자를 단독으로 사용하는 경우 다른 연산이 없기 때문에 본인의 값만 증가하며, 전위이든 후위이든 둘 다 결과가 같음.


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

    }
}

 

[Cpm1]

 

*비교 연산자*

- 두 값을 비교하는데 사용. 조건문과 함께 사용.

- == : 동등성
- != : 불일치
- > : 크다
- < : 작다
- >= : 크거나 같다
- <= : 작거나 같다

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

 

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


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);    // true
        System.out.println(result2);    // true
        System.out.println(result3);    // false

    }
}

 

[Comp2]

 

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

- ==을 사용하면 성공할 때도 있지만 실패할 때도 있음. 자세한 내용을 추후에 다룸.


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();
        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("! 연산");
        System.out.println(!true);
        System.out.println(!false);
        System.out.println();
        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);
    }
}

 

[Logical1]

 

*논리 연산자*

 

- boolean 형인 true, false 비교하는데 사용.

 

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

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

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


package operator;

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

        int a = 15;
        // a는 10보다 크고 20보다 작다.
        boolean result = a > 10 && a < 20;

        /*
        이러면 가독성 더 좋음
        boolean result = 10 < a && a < 20;
         */

        System.out.println("result = " + result);
    }
}

 

[Logical2]

 

- 주석처리 된 것 처럼 변수의 위치를 변경해도 결과는 같음.

- 오히려 범위를 나타내는 경우 주석처리 된 것처럼 사용하면 코드의 가독성이 좋음.


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 = " + a);
    }
}

 

[Assign1]

 

*대입 연산자*

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

 

*축약(복합) 대입 연산자

- 산술연산자와 대입연산자를 한번에 축약해서 사용하는 연산자.

ex) i = i + 3 → i += 3


1-1 연산자 예제

[OperationEx1]

 

1. num1, num2, num3 이라는 이름의 세 개의 int 변수 선언하고, 각각 10, 20, 30으로 초기화.

2. 세 변수의 합을 계산하고 그 결과를 sum이라는 이름의 int 변수에 저장.

3. 세 변수의 평균을 계산하고, 그 결과를 average라는 이름의 int 변수에 저장. 평균 계산 시 소수점 이하의 결과는 버림.

4. sum과 average 변수의 값을 출력.

package operator.ex;

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

        int num1, num2, num3;

        num1 = 10;
        num2 = 20;
        num3 = 30;

        int sum = num1 + num2 + num3;
        int average = sum / 3;  // int끼리의 나눗셈은 자동으로 소수점 이하 버림.

        System.out.println("sum = " + sum);
        System.out.println("average = " + average);
    }
}
sum = 60
average = 20

[OperationEx2]

 

1. 다음 double 변수들을 선언하고, 그 합과 평균을 출력하는 프로그램 작성.

2. 합은 double형 sum 변수로, 평균은 double 형 average 변수로 사용.

double val2 = 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 average = sum / 3;

        System.out.println("sum = " + sum);
        System.out.println("average = " + average);
    }
}
sum = 7.5
average = 2.5

[OperationEx3]

 

1. int형 변수 score 선언.

2. score을 80으로 초기화,

3. 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 = " + result);
    }
}
true

 


 

2. 정리

 

○ 자주 사용하는 연산 ○

 

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

- 증감 연사자 : ++, --

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

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

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

 

- 비트 연산자는 실무에서 거의 사용할 일이 없으므로 필요할 때마다 찾아보기.

'Studying > JAVA' 카테고리의 다른 글

[JAVA]_Casting(형변환)  (0) 2024.12.03
[JAVA]_Scope(스코프)  (0) 2024.12.03
[JAVA]_Loop Statement(반복문)  (0) 2024.12.03
[JAVA]_Conditional Statement(조건문)  (2) 2024.11.29
[JAVA]_Variable(변수)  (0) 2024.11.23