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 |