Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- aws #아키텍트 #과정 #vpc #인프라 구축 #amazon sns #server #less #architecture
- aws #아키텍트 #과정 #vpc #인프라 구축 #sqs #message #queue #sns구독
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- aws #아키텍트 #과정 #vpc #인프라 구축 #rds #replica #복제본 #aurora #database #고가용성
- 프로세스 #CPU #시공유 #커널
- aws #아키텍트 #과정 #vpc #인프라 구축 #s3 #bucket #객체 #스토리지 #isci #이미지 #업로드
- aws #아키텍트 #과정 #vpc #인프라 구축 #db #장애조치 #reand only #replica #events
- aws #아키텍트 #과정 #vpc #인프라 구축 #haproxy #round robin #process #high ability #auto scailling #app server #launch template
- aws #아키텍트 #과정 #vpc #인프라 구축 #php #alb #application #load #balancer #security #group #igw #ec2 #vpc #virtual #private #cloud
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #OSI #ISO #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #웹개발
- aws #아키텍트 #과정 #vpc #인프라 구축 #rds #endpoint #cloudwatch #monitoring
- aws #아키텍트 #과정 #vpc #인프라 구축 #ec2 #instance #launch #template #생성 #ami #amazone #machine #image
- 썸네일 #이미지
- aws #아키텍트 #과정 #vpc #인프라 구축 #aurora #database #rds #rdbs #load #balancer #web #page #haproxy
- 공간복잡도 #공간자원 #캐시메모리 #SRAM #DRAM #시간복잡도
- aws #아키텍트 #과정 #vpc #인프라 구축 #alb #load balancer #t.g #target #group #haproxy #high ability #db #replica #region
- 비트 #바이트 #이진수
- aws #아키텍트 #과정 #vpc #인프라 구축 #second nat #gateway #routing table #route53 #고가용성 #private subnet #
- aws #아키텍트 #과정 #vpc #인프라 구축 #auto scailling #lauch template #ec2 instace #private #subnet
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- aws #아키텍트 #과정 #vpc #인프라 구축 #haproxy #고가용성 #테스트 #alb #application #load balancer #application
- aws #아키텍트 #과정 #vpc #인프라 구축 #s3 #bucket #객체 스토리지 #objects storage #events #upload #알림
- aws #아키텍트 #과정 #vpc #인프라 구축 #t.g #target group #alb #application #load #balancer #web #server
- aws #아키텍트 #과정 #vpc #인프라 구축
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #KDT #기본문법 #데이터베이스 #Computer #Science #CPU #메모리
- 업로드 #lambda #함수 #모바일 이미지 #썸네일 이미지
- aws #아키텍트 #과정 #vpc #인프라 구축 #sqs #trigger #python3.9 #패키지 #
- 쓰레드 #쓰레드풀 #프로세스
Archives
- Today
- Total
요리사에서 IT개발자로
Java 2장(with 자바의 정석) 본문
연산자 (Operator)
어떠한 기능을 수행하는 기호(+, -, *, / 등)
피연산자(Operand)
- 연산자의 작업 대상(변수, 상수, 리터럴, 수식)
연산자의 종류
단항 연산자
- + - (타입) ++ -- ~ !
이항연산자
- 산술 : + - * / % << >> >>>
- 비교 : > < >= <= == !=
- 논리 : && || & ^ |
삼항 연산자
- ? :
대입 연산자
- = op=
연산자의 우선 순위
연산자의 우선순위
- 괄호의 우선순위가 제일 높다
- 산술 > 비교 > 논리 > 대입
- 단항 > 이항 > 삼항
- 연산자의 연산 진행방향은 왼쪽에서 오른쪽
- 단, 단항, 대입 연산자만 오른쪽에서 왼쪽
Ex1 ) -x + 3 단항 > 이항
Ex2) x + 3 * y 곱셈, 나눗셈 > 덧셈, 뺄셈
Ex3) x + 3 > y -2 산술 > 비교
Ex4) x > 3 && x<5 비교 > 논리
Ex5) int result = x+ y * 3; 항상 대입은 맨 끝에 한다.
<<, >>, >>> 는 덧셈 연산자보다 우선순위가 낮다.
- x << 2 + 1 는 x << (2+1) 과 같다.
||,|(OR)는 &&, &(AND) 보다 우선순위가 낮다.
- x < -1 || x > 3 && x <5 는 x < -1 || (x >3 && x <5) 와 같다.
증감연산자 -, ++, --
- 증가연산자(++) : 피연산자의 값을 1 증가시킨다
- 감소연산자(--) : 피연산자의 값을 1 감소시킨다.
전위형 | j = ++i; | ++i; j= i ; |
값이 참조되기 전 증가시킨다. |
후위형 | j = i++; | j = i; i++; |
값이 참조된 후에 증가시킨다. |
부호연산자(+, -)와 논리부정연산자(!)
부호연산자(+,- )
- '+'는 피연산자에 1을 곱하고
- '-'는 피연산자에 -1을 곱한다.
논리부정연산자(!)
- true는 false로, false는 true로 피연산자가 boolean일 경우에만 가능하다.
비트전환연산자 - ~
- 정수를 2진수로 표현했을 때 1을 0으로 0은 1로 바꾼다. 정수형에만 사용이가능하다.
이항연산자의 특징
이항연산자는 연산을 수행하기 전에 피연산자의 타입을 일치시킨다.
- int보다 크기가 작은 타입은 int로 변환한다.(byte, char, short -> int)
- 피연산자 중 표현범위가 큰타입으로 형변환 한다.
산술변환
- char + int -> int + int -> int
- float + int -> float + float -> float
- long + float -> float + float -> float
- float + double -> double + double -> double
byte a = 10;
byte b = 20; // byte + byte -> int + int -> int
byte c = a + b; // Error, int값을 byte에 저장이 불가능하다
byte c = (byte)a + b; //Error
byte c = (byte)(a+b); // Ok
int a = 1000000; // 1,000,000
int b = 2000000; // 2,000,000
long c = a * b; // c는 -1454759936 원하는 값이 나오지 않음
//int * int -> int 이므로 long을 추가하여 형변환을 해야 원하는 값이 나온다.
//long으로 형변환 예시
long c = (long) a * b; // c는 2,000,000,000,0000
//long * ing -> long *long -> long
long a = 1000000 * 1000000; // a = -727,379,968
long b = 1000000 * 1000000L; // b = 1,000,000,000,000
int c = 1000000 * 1000000 / 1000000; // c는 -727
int d = 1000000 / 1000000 * 1000000; // d는 1,000,000
char c1 = 'a';
char c2 = c1 + 1; //에러
char c2 = (char)(c1 + 1); //ok
char c2 = ++c1; // ok
int i = 'B' - 'A'; //문자 코드로 변환하면 i = 1
int i = '2' -'0''; // 문자를 코드로 변환하면 i = 2
float pi = 3.141592f;
float shortPi =
(int)(pi * 1000) / 1000f; // pi 값에 3.141592f 를 넣는다
(int)(3.141592f * 1000) / 1000f; // 3.141592f 를 1000으로 곱한다.
(int)(3141.592f) / 1000f; // int로 형변환한다
3141 / 1000f; //3141을 1000f로 나눈다.
3141.0f / 1000f //3141.0f를 1000f 로 나눈다
3.141f //결과 값
형변환이란
작은 값을 큰값으로, 큰값을 작은값으로 넣기위한 과정
주로 서로 다른 두타입을 일치시키기 위해서
형변환을 생략하면 작은값에서 큰값은 자동형변환이 된다.
기존의 값을 최대한 보존할 수 있는 타입으로 형변환된다.
하지만 큰값을 작은값으로 변환시키려면
강제적으로 ()안에 동일 값을 써주어야 수동형변환이 가능하다.
byte(1byte) -> short(2byte)->int(4byte) -> long(8byte) -> float (4byte) -> double(8byte)
short 에서 char는 서로 같은 byte이지만 자동으로 되지않는다. 정수와 문자.
class Ex3_9 {
public static void main(String args[]) {
int a = 1_000_000; // 1,000,000 1백만
int b = 2_000_000; // 2,000,000 2백만
long c = a*b ; //error
long c = (long)a * b; // a * b = 2,000,000,000,000 ?
System.out.println(c);
} 형변환을 위해 수동형변환을 해주어야한다.
}
Math.round() : 소수점 첫째자리에서 반올림한 값을 반환한다.
float pi = 3.141592f;
float shortPi = Math.round(pi *1000) / 1000f; // pi 에 3.141592f 를 넣는다
Math.round(3.141592f * 1000) / 1000f; // 3.141592f 에 1000을 곱한다
Math.round(3141.592f) / 1000f // 3141.592f 를 Math.round로 반올림한다.
3142 / 1000f; // 3142를 1000f로 나눈다.
3.142f //결과 값
나머지 연산자 (- ,%)
- 오른쪽 피연산자로 나누고 남은 나머지를 반환한다.
- 나누는 피연산자는 0이 아닌 정수로만 허용한다(부호는 무시된다.)
- 홀수, 짝수 등 배수검사에 주로 사용한다.
int share = 10 / 8; // 1
int remain = 10 % 8; // 2
10 % 8 -> 2
10 % -8 -> 2
-10 % 8 -> -2
-10 % -8 -> -2
쉬프트연산자 - <<, >> , >>>
- 2ⁿ 으로 곱하거나 나눈 결과를 반환한다.
- 곱셈, 나눗셈보다 빠르다.
x << n 은 x * 2ⁿ과 같다.
x >> n 은 x / 2ⁿ과 같다.
8 << 2 는 8 * 2²과 같다
8 >> 2는 8 / 2²과 같다.
비교연산자 (- >, <, >=, <=, == !=)
- 피연산자를 같은 타입으로 변환한 후에 비교한다.결과 값은 true 또는 false이다.
- 기본형 (boolean 제외) 과 참조형에 사용할 수 있으나 참조형에는 ==와 !=만 사용할 수 있다.
- 문자열 비교에는 == 대신에 equals()를 사용해야한다.
수식 | 연산결과 |
x > y | x가 y보다 클 때 true, 그외 false |
x < y | x가 y보다 작을 때 true, 그 외 false |
x >= y | x 가 y보다 크거나 같을 때 true, 그 외 false |
x <= y | x가 y보다 작거나 같을 때 true, 그 외 false |
x == y | x와 y가 같을 때 true, 그 외 false |
x != y | x와 y가 다를 때 true, 그 외 false |
'A' < 'B' -> 65 < 66 -> true
'0' == 0 -> 48 == 0 -> false
'A' ! = 65 -> 65 ! = 65 -> false
10.0d == 10.0f -> 10.0d == 10.0d -> true //double 이 더 크므로 double로 형변환함
0.1d == 0.1f -> 0.1d == 0.1d -> ? //float의 함수가 double을 맞출 수 없다.
!('a' <= ch && ch<='z') // ch < 'a' || ch >'z' 보다 논리부정연산자를 사용하는것이 좋다
double d= (double) 0.1f;
Sytem.out.println(d); // 0.10000000149011612가 나온다.
(float)0.1d == 0.1f -> 0.1f == 0.1f -> true //double의 함수가 더 크므로 float에 맞춰야 한다.
비트연산자 -, &, | ^
피연산자를 비트단위로 연산한다. 실수형(float, double)을 제외한 모든 기본형에 사용이 가능하다.
- OR연산자(|) : 피연산자 중 어느 한 쪽이 1 이면 1이다.
- AND연산자(&) : 피연산자 양 쪽 모두 1이면 1이다.
- XOR연산자(^) : 피연산자가 서로 다를 때 1이다.
논리연산자 - &&, ||
피연산자가 반드시 boolean이어야 하며 연산결과도 boolean이다.
&&가 || 보다 우선순위가 높다. 같이 사용되는 경우 괄호( )를 사용해야 한다.
- OR연산자(||) : 피연산자 중 어느 한쪽이 true이면 true 이다
- AND연산자(&&) : 피연산자 양 쪽 모두 true 이면 true이다
- or와 and 가 같이 들어가게 된다면 () 괄호를 해주는것이 좋다.
- 논리 부정 연산자 (!)는 true를 false로 false는 true로 바꿔준다.
int i = 7;
i > 3 && i < 5 // 3보다 크다(ture) "그리고" 5보다 작지않다. (false) -> false
i > 3 || i < 0 // 3보다 크다 (true) "또는" 0보다 작지않다 (false) -> true
char x = 'j';
x >= 'a' && x<= 'z' // 'a' 보다 크거나 같다 (ture) "그리고" z 보다 작거나 같다 (true) -> true
(x >='a' && x<='z') || (x >= 'A' && x<='Z')
// a보다 크고 z보다 작다(true) "또는" A보다 크거나 같지않고 Z보다 작다 (false) -> true
조건연산자
삼항연산자 (-?, :)
조건식의 연산결과가 true이면 '식1'의 결과를 반환하고 false이면 '식2'의 결과를 반환한다.
(조건식)? 식1:식2
int x = -10; // x 는 -10
int absX = x >=0 ? x : -x; // x는 -10, -x는 10 absX 의 결과는 ?
-x // x가 0보다 작아서 결과는 -x
//if문과 같다.
if(x >=0) {
absX = x;
} else {
absX = -x;
}
-x // 위와 같다.
int score = 50;
char grade = score >= 90? 'A' : (score >= 80? 'B':'C');
C // A는 90, B는 80이기에 score는 50이므로 C
if(score >= 90){
score = A;
} else if (score >=80){
score = B;
} else {
score = C;
}
C // 위와 같다.
대입연산자( -, = ,op=)
오른쪽 피연산자의 값을 왼쪽 피연산자에 저장한다.
단, 왼쪽 피연산자는 상수(고정값)가 아니어야 한다.
복합 대입 연산자
대입 연산자와 다른 연산자를 하나로 축약한 표
int i = 0;
i = i + 3; //0이였던 i 에서 3을 더해 i 는 3이 되었고
final int MAX = 3;
MAX = 10; //마지막에 상수로 변경이 되었으므로 10의 값을 입력할 수 없다.
반응형
'Java' 카테고리의 다른 글
스파르타 코딩클럽 부트캠프 (Java 문법 1장) (2) | 2024.04.22 |
---|---|
Eclipse 단축키 정리(with 자바의 정석) (0) | 2024.04.18 |
Java 2장(with 이것이 자바다) (0) | 2024.04.11 |
Java 1장(with 이것이 자바다) (0) | 2024.04.09 |
Java 1장(with 자바의 정석) (1) | 2024.04.03 |