📌 연산자
- 연산자 : 어떠한 기능을 수행하는 기호
- 피연산자 : 연산자의 작업 대상(변수, 상수, 리터럴, 수식)
📌 연산자의 종류
- 단항 연산자 : +, - , ++, --, ~, !
- 이항 연산자
- 산술 : *, /, %, +, -, <<, >>, >>>
- 비교 : >, <, >=, <=, ==, !=
- 비트 : &, |, ^
- 논리 : &&, ||
- 삼항 연산자 : ? :
- 대입 연산자 : =, op=
📌 단항 연산자(+, - , ++, --, ~, !)
- 부호연산자 (+, -) : 피 연산자에 1 곱하기(+), -1 곱하기(-)
- 증감 연산자 (++, --) : 피연산자 값 1 증가(++), 1 감소(--)
// 전위형
j = ++i; // ++i; j=i; 와 동일
// 후위형
j = i++; // j=i; ++i; 와 동일
- 논리부정연산자 (!) : true는 false로, false는 true로 바꾼다. (피연산자가 boolean일 때만 가능)
- 비트전환연산자 (~) : 정수를 2진수로 표현 시, 1을 0으로, 0은 1로 바꾼다. (피연산자가 정수형일 때만 가능)
📌 이항 연산자(산술, 비교, 비트, 논리)
특징
- 이항 연산자는 연산을 수행하기 전에 피연산자의 타입을 일치시킨다.(보다 큰 타입으로 일치)
- int보다 크기가 작은 타입은 int로 변환 (ex. byte + short → int + int, 결과도 int)
산술연산자(*, /, %, +, -, <<, >>, >>>)
- 나머지연산자(%) : 나누기한 나머지 반환
- 쉬프트연산자(<<, >>, >>>) : 2ⁿ으로 곱하기(<<), 나누기(>>)
ex. 8 << 2 → 8 * 2², 8 >> 2 → 8 / 2²
비교연산자(관계연산자)(>, <, >=, <=, ==, !=)
- 피연산자를 같은 타입으로 변환 후 비교
- 결과는 true 또는 false
- 참조형은 ==(같다), !=(다르다)만 사용 가능
- 문자열 비교는 == 대신 equals() 사용해야 한다.
비트연산자(&, |, ^)
- 피연산자를 비트단위로 연산한다.(실수형 제외한 모든 기본형에 사용 가능)
- OR연산자 (|) : 피연산자 중 어느 한 쪽이 1이면 1
- AND연산자 (&) : 양쪽 모두 1이여야 1
- XOR연산자(^) : 서로 달라야 1
ex. 3 | 5 = 7
3 → 2진수 : 011
5 → 2진수 : 101
| → 111 = 7
논리연산자(&&, ||)
- 피연산자 boolean이어야 하고, 연산결과도 boolean
- 우선순위 && > || (같이 사용하는 경우 그냥 괄호 사용해서 명시적으로 나타내기)
- OR연산자 (||) : 피연산자 중 어느 한 쪽이 true 이면 true
- AND연산자 (&&) : 양쪽 모두 true이여야 true
📌 삼항 연산자(? :)
- 간단한 if문은 삼항연산자를 사용하면 코드 간결하게 작성할 수 있다.
- (조건식) ? 식1 : 식2
- 조건식의 연산결과가 true이면 식1 반환, false이면 식2 반환
📌 대입연산자(assignment operator)(=, op=)
- 오른쪽 피연산자의 값을 왼쪽 피연산자에 저장한다.(단, 왼쪽 피연산자는 상수가 아니어야 한다.)
- 복합 대입연산자(op=)
int i;
i = 0; // 대입연산자
final int MAX = 5; // 상수는 선언과 동시에 초기화
MAX = 10; // 에러, 상수에는 새로운 값 저장 못함
i = i + 3; // 대입연산자
i += 3; // 복합대입연산자, 위와 동일
📌 연산자 우선순위
- 단항 > 이항 (산술 > 비교 > 논리) > 삼항 > 대입
- 괄호가 우선순위 제일 높음
- 연산자 진행 방향 : 왼쪽 → 오른쪽 (단항, 대입 연산자만 오른쪽에서 왼쪽)
- &&, & (AND)은 ||, | (OR)보다 우선순위가 높다.
📌 instanceof
- 참조변수가 참조하는 인스턴스의 실제 타입을 체크하는데 사용
- 이항연산자이며 피연산자는 참조형 변수와 타입. (연산결과 true, false)
- 연산결과가 ture이면, 해당 타입으로 형변환 가능
car instanceof Car // true
superCar instanceof Car // true
car instanceof SuperCar // false
superCar instanceof SuperCar // true
📌 화살표(->) 연산자 (람다 연산자)
- 자바 8이상 람다식에서 익명함수 만들 때 사용
int max(int a, int b){
return a > b ? a : b;
}
// 화살표 연산자 사용
(int a, int b) -> {
return a > b ? a : b;
}
📌 switch 연산자
- 조건식의 결과가 int타입의 정수, 문자열만 가능
- 조건식의 계산결과와 일치하는 case문으로 이동 후 break문 만날 때까지 문장 수행
break문 없으면 switch문 끝까지 진행
- 일치하는 case문 없으면 default문으로 이동(default문 생략 가능)
- case문의 값으로 변수 사용 불가(리터럴, 상수, 문자열 상수만 가능)
switch (조건식){
case 값1 :
// 조건식 결과 값1일 경우 수행될 문장
break;
case 값2 :
break;
default :
// 조건식의 결과와 일치하는 case문 없을 때 수행
}
[참고]
- 자바의 정석
- https://kils-log-of-develop.tistory.com/336#java13-switch-%EC%97%B0%EC%82%B0%EC%9E%90
- https://github.com/sombrero104/java-study/blob/master/w3.md
'스터디 > 2209_자바의정석' 카테고리의 다른 글
6주차 과제 : 상속 (0) | 2022.09.29 |
---|---|
5주차 과제 : 클래스 (0) | 2022.09.26 |
4주차 과제 : 제어문 (0) | 2022.09.18 |
2주차 과제 : 자바 데이터 타입, 변수 그리고 배열 (0) | 2022.09.15 |
1주차 과제 : JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (0) | 2022.09.13 |
댓글