본문 바로가기

자바(JAVA)
[자바(Java)] 연산자

1. 문장, Statement
    - 1개 이상의 표현식이 모여서 문장을 만든다.
        ~ int sum = 10 + 20;

2. 표현식, Expression
    - 문장을 구성하는 최소 단위
        ~ int sum
        ~ 10 + 20
        ~ sum = 30

3. 연산자, Operator
    - 피연산자를 대상으로 미리 정해진 연산(행동)을 한 후에, 연산(행동)의 결과를 반환하는 요소
    - 주로 기호를 많이 사용 + 영단어도 많이 사용
        ~ +
        ~ =

4. 피연산자, Operand
    - 연산의 대상
        ~ +: 10, 20
        ~ =: sum, 30

5. 연산자 우선순위
    - 하나의 문장에 속해 있는 모든 연산들은 누가 먼저 실행해야 하는지 순서가 정해져 있다.
        ~ () > 증감 연산자(전위) > 산술 연산자 > 비교 연산자 > 논리 연산자 > 대입 연산자 > 증감 연산자(후위)

6. 연산자 연산 방향
    - 하나의 문장에 속해 있는 연산자들 중 우선순위가 동일하면 어느 방향(좌,우)으로 실행해야 하는지 순서가 정해져 있다.
    - 대부분의 연산자는 왼쪽 -> 오른쪽 방향으로 실행한다.
    - 대입 연산자(=)는 오른쪽 -> 왼쪽 방향으로 실행한다.


//연산자 종류


1. 행동(목적)
    a. 산술 연산자
        - +, -, *, /(몫), %(mod:나머지)
        - 2항 연산자
        - 피연산자로 숫자를 가진다.(정수, 실수)
        - byte, short의 산술 연산은 무조건 int이다. > CPU 처리 단위
        - ★모든 산술 연산자의 결과값 자료형은 두 피연산자의 자료형 중에서 더 크기가 큰 자료형으로 반환된다.

    b. 비교 연산자
        - >, >=, <, <=, ==, !=
        - 2항 연산자
        - 피연산자들의 우위(동등) 비교를 하는 연산자
        - 피연산자는 숫자형을 가진다.
        - 연산의 결과가 boolean이다.(true/false)
        - 문자열의 비교는 ==, != 연산자를 절대 사용해서는 안 된다. > equals() 메서드 사용


    c. 논리 연산자
        - &&(and-논리곱), ||(or-논리합), !(not)
        - &(and), |(or), ^(xor-배타적 논리합 : 양쪽이 같으면 false(1), 다르면 true(0))  > 비트 연산자
        - 2항 연산자(&&. ||)
        - 1항 연산자(!)
        - 피연산자의 자료형이 boolean이다.
        - 연산의 결과는 boolean이다.


    d. 대입 연산자
        - = 
        - +=, -=, /=. %= (복합 대입 연산자)
        - LValue(공간) = RValue(값)
        - LValue와 RValue의 자료형은 동일해야 한다.(100%)
        - LValue와 RValue의 자료형이 다르면 에러 발생! 
        - 연산자 순위가 가장 낮다.


    e. 증감 연산자
        - ++(증가), --(감소)
        - 1항 연산자
        - 피연산자는 숫자형을 가진다.
        - 누적 연산을 한다. > 기존의 값에 +1, -1
        ※ 피연산자의 위치가 바뀔 수 있다. > 되도록 증감 연산자는 다른 연산자와 한 문장에서 사용하지 말 것.
            ~ ++n: 전위 배치(전치) > 연산자 우선 순위 가장 높음
            ~ n++: 후위 배치(후치) > 연산자 우선 순위 가장 낮음


    f. 조건 연산자
        - ?:
        - A ? B : C
        - 3항 연산자
        - A: 조건(boolean)
        - B,C: 결과(상수,변수)


    + 문자열 연산자, concat
        - + -
        - 문자열 + 문자열, ★숫자 + 문자열
        - 숫자 + 문자열의 경우 연산자 연산 방향에 특히 주의해야 한다.
            ~ "10" + 20 + 30 > "102030"


2. 형태(피연산자 개수) 
    a. 1항 연산자
    b. 2항 연산자
    c. 3항 연산자


 - 산술 연산자

package com.test.java;

public class Ex18_Operator {
    public static void main(String[] args) {
	//산술 연산자

	int a = 10;
	int b = 3;

	System.out.printf("%d + %d = %d\n", a, b, a + b);
	System.out.printf("%d - %d = %d\n", a, b, a - b);
	System.out.printf("%d * %d = %d\n", a, b, a * b);
	System.out.printf("%d / %d = %d\n", a, b, a / b); //몫
	System.out.printf("%d %% %d = %d\n", a, b, a % b); //나머지

	double c = 10;
	double d = 3;
	System.out.printf("%d / %d = %f\n", (int)c, (int)d, c/d);
	System.out.println();

	System.out.println(10 / 3);
	System.out.println(10.0 / 3);
	System.out.println(10 / 3.0);
	System.out.println(10.0 / 3.0);
	System.out.println();


	int e = 1000000000; //10억
	int f = 2000000000; //20
	System.out.println(e + f); // > overflow
	System.out.println(e + (long)f); // overflow 해결을 위해 둘 중 하나라도 long으로 형변환해야 함.

	e = 300000;
	f = 500000;
	System.out.println(e * (long)f);
	System.out.println();


	e = 10;
	f = 3;
	System.out.println(e % f);

	e = 10;
	f = 10;
	System.out.println(e % f);

	e = 10;
	f = 11;
	System.out.println(e % f);
	System.out.println();

	//달력 만들기 > 로직
	//1. 2023년 2월 1일 > 무슨 요일?
	//2. 2023년 2월의 마지막 일은 무슨 요일?

	//조건(날짜 % 7 > 나머지 4)

	byte b1 = 10;
	byte b2 = 20;

	System.out.println(b1 + b2);

	byte b3 = (byte)(b1 + b2); //b1 + b2 > int / () > 연산자 우선순위를 높여준다.

    }
}

- 비교 연산자

package com.test.java;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ex19_Operator {
    public static void main(String[] args) throws IOException {

	int a = 10;
	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();

	//요구사항] 사용자 나이 입력 > 성인(19세 이상) O, X


	BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

	System.out.print("당신의 나이는 몇 살인가요?: ");
	String input = reader.readLine();
	int age = Integer.parseInt(input);
	System.out.println(age >= 19);
	System.out.println();


	boolean b1 = true;
	boolean b2 = true;

	System.out.println(b1 == b2);
	System.out.println(b1 != b2);

	String s1 = "홍길동";
	String s2 = "홍길동";
	String s3 = "아무개";
	String s4 = "홍";
	s4 += "길동";

	System.out.println(s1 == s2);
	System.out.println(s1 == s3);
	System.out.println(s4);
	System.out.println(s1 == s4);
	System.out.println(s1.equals(s2));
	System.out.println(s1.equals(s4));

    }
}

- 논리 연산자

package com.test.java;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ex19_Operator {
    public static void main(String[] args) throws IOException {

	//논리 연산자

	//요구사항] 사용자 나이 입력 > 19세 이상~ 60세 미만
	BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

	System.out.print("당신의 나이는 몇 살인가요?: ");
	String input = reader.readLine();
	int age = Integer.parseInt(input);
	System.out.println(age >= 19 && age < 60);
	System.out.println();

	System.out.println(true && true);
	System.out.println(true && false);
	System.out.println(false || false);
	System.out.println(false || true);
	System.out.println(!true);
	System.out.println();

	int a = 10; //1010
	int b = 3; //0011

	System.out.println(a & b); //0010 > 2
	System.out.println(a | b); //1011 > 11
	System.out.println(a ^ b); //1001 > 9
	System.out.println(true ^ true);
	System.out.println(true ^ false);
	System.out.println(false ^ true);
	System.out.println(false ^ false);

    }
}

- 대입 연산자

package com.test.java;

public class Ex20_Operator {
    public static void main(String[] args) {
	//대입 연산자

	int n = 10;
	System.out.println(n);

	//요구사항] n에 1을 더해서 다시 n에 넣어라 > 누적
	n += 7; //복합 연산자
	System.out.println(n);

	n -= 1;
	System.out.println(n);

	n -= 3;
	System.out.println(n);

	n *= 4;
	System.out.println(n);

	n /= 4;
	System.out.println(n);

	n %= 7;
	System.out.println(n);

	n %= 4;
	System.out.println(n);
    }
}

- 증감 연산자

package com.test.java;

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

	// 증감 연산자
	int n = 10;
	System.out.println("n = " + n);

	++n;
	System.out.println("++n = " + n);
	n++;
	System.out.println("n++; 후 n = " + n);
	System.out.println("n++ = " + n++);
	System.out.println("n = " + n);

	--n;
	System.out.println("n--; 후 n = " + n);
	System.out.println("n-- = " + n--);
	System.out.println("n = " + n);
	System.out.println();

	//개선 전1
	n = 10;
	int result = 0;
	result = 10 + ++n;
	System.out.println(result);

	//개선 후1 > 되도록 증감 연산자는 다른 연산자와 한 문장에서 사용하지 말 것
	n = 10;
	result = 0;
	++n;
	result = 10 + n;
	System.out.println(result);

	n = 10;
	result = 0;
	result = 10 + n++;
	System.out.println(result);
	System.out.println(n);

	int o = 10;

	System.out.println(--o-o--); //9-9 = 0
	System.out.println(o); //8

    }
}

package com.test.java;

import java.util.Scanner;

public class Ex21_Operator {
    public static void main(String[] args) {
	//요구사항] 사용자로부터 문자 1개를 입력 > 영어 소문자인지 검사?

	//시나리오
	//1. Scanner 생성하기
	//2. 라벨 출력하기
	//3. 문자 1을 입력 받기
	//4. 입력 받은 문자가 영어 소문자인지 검사? ★
	//5. 결과 출력

	Scanner scan = new Scanner(System.in); //1.

	//화면 설계
	System.out.print("문자 입력: "); //2.

	//System.out.println("a"); //3.
	String input = scan.nextLine();
	char ch = input.charAt(0);
	int code = ch;

	String result = ((code >= 97) && (code <= 122)) ? "소문자입니다." : "소문자가 아닙니다.";

	System.out.printf("입력받은 문자 '%c'은/는 %s\n", ch, result);

    }
}

'자바(JAVA)' 카테고리의 다른 글

[자바(Java)] 동기화  (0) 2023.02.19
[자바(Java)] 디버그(debug)  (0) 2023.02.09
[자바(Java)] DateTime  (0) 2023.02.06
[자바(Java)] 에러(Error)  (0) 2023.02.03
[자바(Java)] 파일과 디렉토리  (0) 2023.01.24