본문 바로가기
내일배움캠프(Sparta)/Java Handbook

[Java Handbook] Part 2-1

by mmm- 2023. 9. 12.

1. 연산자

연산자

: 연산을 수행하는 기호 (*, +)

 

피연산자

: 연산자의 연산 수행 대상 (9, x, 3)

 

모든 연산자는 연산결과를 반환한다.
즉, 연산결과를 반환하지 않으면 연산자가 아니다.

 

 

 

연산자의 종류

종류 연산자 설명
산술 연산자 + - * / % << >> 사칙 연산과 나머지 연산(%)
비교 연산자 < > >= <= == != 크고 작음과 같고 다름을 비교
논리 연산자 && || ! & | ^ ~ '그리고(AND)' 와 '또는(OR)' 으로 조건을 연결
대입 연산자 = 우변의 값을 좌변에 저장
기타 연산
(type) ?: instanceof
형변환 연산자, 삼항 연산자, instanceof연산자

 

연산자의 우선순위

단항, 대입 연산자를 제외한 모든 연산자의 진행 방향은 왼쪽 &rarr; 오른쪽

public class Operator1_1 {
    public static void main(String[] args) {
        int x = 10;
        int y = 20;

        // + 연산자는 피연산자가 2개인 이항 연산자임으로 단항 연산자인 -x의 -가 먼저 실행됨
        System.out.println("-x + 3 = ");
        System.out.println(-x + 3); // -10 + 3 = -7

        System.out.println("x + 3 * y = ");
        System.out.println(x + 3 * y); // 10 + (3 * 20) = 70

        System.out.println("x + 3 > y - 2 = ");
        System.out.println(x + 3 > y - 2); // false
        System.out.println("x + 3 < y - 2 ");
        System.out.println(x + 3 < y - 2 ); // true

        System.out.println("x > 3 && y < 2 = ");
        System.out.println(x > 3 && y < 2); // false

        int result = x + y * 3;
        System.out.println("result = " + result); // 10 + (20 * 3), result = 70
    }
}

2. 증감 연산자

증가 연산자(++)

: 피연산자의 값을 1 증가시킴

 

감소 연산자(--)

: 피연산자의 값을 1 감소시킴

 

전위형

: 값이 참조되기 전에 증가/감소 시킴

 

후위형

: 값이 참조된 후에 증가/감소 시킴

public class Operator2_1 {
    public static void main(String[] args) {
        int k = 0, j = 3;
        
        // 후위형
        k = j++;
        System.out.println("k = j++;, k = " + k);
        System.out.println("k = j++;, j = " + j);

        // 값 초기화
        k = 0;
        j = 3;

        // 전위형
        k = j++;
        System.out.println("k = ++j;, k = " + k);
        System.out.println("k = ++j;, j = " + j);
    }
}
  • 증감 연산자가 독립적으로 사용된 경우, 전위형과 후위형 차이 없음
    (ex; ++k; k++; → 이런 경우 두 개의 값 동일)

3. 부호연산자

  • '-' 는 피연산자의 부호를 반대로 변경
public class Operator2_2 {
    public static void main(String[] args) {
        int i = -10;
        i = +i;
        System.out.println("i = +i; = " + i);

        i = -10;
        i = -i;
        System.out.println("i = -i; = " + i);
    }
}

4. 형변환 연산자

형변환

: 변수 또는 상수의 타입을 다른 타입으로 변환하는 것

public class Operator3_1 {
    public static void main(String[] args) {
        int i = 65, num = 10;
        char ch = 'A';
        float f = 1.6f;

        System.out.println("(char)i = " + (char)i);
        System.out.println("(int)ch = " + (int)ch);
        System.out.println("(int)f = " + (int)f);
        System.out.println("(float)num = " + (float)num);
    }
}

5. 자동 형변환

  • 작은 타입을 큰 타입에 저장시 컴파일러에 의해 자동으로 형변환이 됨
  • 큰 타입을 작은 타입에 저장시 에러 발생. 그래서 수동으로 형변환 해줘야 함
public class Operator3_2 {
    public static void main(String[] args) {
        float f1 = 1234; // int < float 이기 때문에 가능. 컴파일러에 의해 자동 형변환된 것.
        float f2 = (float)1234;

        // int i = 3.14f; // int < float 이기 때문에 에러 발생.
        // int -> float 될 때, 소수점 사라지면서 원래 값이 달라짐.
        // 값 손실이 발생하는 경우에는 컴파일러가 자동으로 형변환 안해줌.
        int i = (int)3.14f; // 직접 수동으로 형변환 해줘야 함.

        // " 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환됨 "

        // 큰 타입을 작은 타입에 저장
        System.out.println("i = " + i);
        
        byte b = 100;
        System.out.println("b = " + b); // 자동 형변환

        int num = 100;
        //byte b2 = num; // error
        byte b2 = (byte)num;
        System.out.println("b2 = " + b2);
        
        //byte b3 = 1000; // 범위 넘어가 error 발생
        byte b3 =(byte)1000;
        // 위의 경우 오류는 발생하지 않지만 값 손실 발생.
        // " 상수여도 값 손실이 일어나면 자동 형변환 불가능 "
        System.out.println("b3 = " + b3); // b3 = -24

    }
}

6. 사칙 연산자

: + - * /

public class Operator4_1 {
    public static void main(String[] args) {
        int a = 10, b = 4;

        // 덧셈
        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);

        // 나눗셈
        // 소수점 이하는 버려짐
        System.out.println("a / b = ");
        System.out.println(a / b);

        // 10 / 4.0f -> 10.0f / 4.0f -> 2.5
        System.out.println("a / (float)b = ");
        System.out.println(a / (float)b);
    }
}

7. 산술변환

: 연산 전, 피연산자의 타입을 일치시키는 것

 

  1. 두 피연산자의 타입을 같게 일치시킴 (큰 타입으로 일치)
    • long + int → long + long => long
    • float + int → float + float => float
    • double + float → double + double => double
  2. 피연산자의 타입이 int 보다 작은 경우 int로 변환됨
    • byte + short => int
    • char + short => int
public class Operator4_2 {
    public static void main(String[] args) {
        char ch ='2';

        // 문자 '2'는 숫자로 50, '0'은 48이기 때문에 int 타입으로 자동변환되어 50 - 48 = 2
        System.out.println("ch - '0' = ");
        System.out.println(ch - '0'); // 2

        int a = 1_000_000; // 1백만
        int b = 2_000_000; // 2백만

        // a * b = 2_000_000_000_000 -> 10^12
        // long 에 저장하려는 것은 맞지만 a * b의 결과 타입이 int
        // 이미 계산을 할 때 오버플로우 발생. 따라서 계산을 할 때 형변환 필요

        long l = (long)a * b;
        // long * int -> long * long => 1_000_000L * 2_000_000 -> 1_000_000L * 2_000_000L
        System.out.println("l = " + l);
    }
}

'내일배움캠프(Sparta) > Java Handbook' 카테고리의 다른 글

[Java Handbook] Part 3-1  (0) 2023.09.12
[Java Handbook] Part 2-2  (0) 2023.09.12
[Java Handbook] Part 1-4  (0) 2023.09.11
[Java Handbook] Part 1-3  (0) 2023.09.11
[Java Handbook] Part 1-2  (0) 2023.09.11