반응형
- 해당 내용은 백기선 님의 자바 온라인 스터디 공부 및 제출 목적
-> https://github.com/whiteship/live-study/issues/3
목표
- 자바가 제공하는 다양한 연산자를 학습하세요.
학습할 것
- 산술 연산자
- 비트 연산자
- 관계 연산자
- 논리 연산자
- instanceof
- assignment(=) operator
- 화살표(->) 연산자
- 3항 연산자
- 연산자 우선 순위
- (optional) Java 13. switch 연산자
* 연산
- 주어진 정보를 통해 일정한 규칙에 따라 어떤 값이나 결과를 구하는 과정
* 연산자
- 연산을 위해 사용되는 기호
* 피연산자
- 연산 대상
* 예제
int a = 3;
int b = 5;
// 연산자: + , 피연산자: a, b
a + b;
// 연산자: * , 피연산자: a, b
a * b;
// 연산자: + , 피연산자: 5, b
5 * b;
1. 산술 연산자
- 수학적 계산(사칙 연산)에 사용되는 연산자.
- +, - , * , / , %
- 예제
int a = 3;
int b = 5;
int c = 0;
// 3 + 5 = 8
System.out.println(a + b);
// 3 - 5 = -2
System.out.println(a - b);
// 3 * 5 = 15
System.out.println(a * b);
// 3 / 5 = 0.6
System.out.println(a / b);
// 3 % 5 = 3
System.out.println(a % b);
// a++ = 4
System.out.println(a++);
// --a = 2
System.out.println(--a);
// 아래 두 경우는 Exception 발생
// 3 / 0 = 분모가 0이면 ArithmeticException
System.out.println(a / c);
// 3 % 0 = 정수 나머지 연산자의 제수 값이 0이면 ArithmeticException
System.out.println(a % c);
2. 비트 연산자
- &, |, ^, ~
- &(AND) : 피연산자의 비트 또는 논리 "AND"를 수행하는 이항 연산자
- |(OR) : 피연산자의 비트 또는 논리 "OR(포함 또는)"을 수행하는 이진 연산자
- ^(XOR) : 피연산자의 비트 또는 논리 "배타적 논리합"을 수행하는 이항 연산자
- ~(보수) : 피연산자 비트를 비트 또는 논리 반전하는 단항 연산자
- 예제
// &(AND)
3 & 1; // 0011 & 0001 = 0001(1)
// |(OR)
3 | 1; // 0011 | 0001 = 0011(3)
// ^(NOR)
3 ^ 1; // 0011 ^ 0001 = 0010(2)
// ~(보수)
int f = ~3 // ~0011 -> 1111 1111 1111 1111 1111 1111 1111 1100
3. 관계 연산자
- ==, !=, >, <, >=, <=
- == : 같다
- != : 같지 않다
- > : 크다(오른쪽보다 왼쪽이)
- < : 작다(오른쪽보다 왼쪽이)
- >= : 크거나 같다(오른쪽보다 왼쪽이)
- <= : 작거나 같다(오른쪽보다 왼쪽이)
- 연산의 결과는 모두 boolean 형태.
- 관계 연산자를 통해 숫자를 다른 유형과 비교 가능.
- 예제
int a = 3;
int b = 5;
int c = 3;
// 3 == 5 => false
System.out.println(a == b);
// 3 == 3 => true
System.out.println(a == c);
// 3 != 5 => true
System.out.println(a != b);
// 3 > 5 => false
System.out.println(a > b);
// 3 < 5 => true
System.out.println(a < b);
// 3 <= 3 => true
System.out.println(a <= c);
// 3 >= 5 => false
System.out.println(a >= b);
4. 논리 연산자
- 피연산자의 타입: boolean
- 연산 결과 타입: boolean
- && (LOGICAL AND)
- true && true : true
- true && false : false
- false && ture : false
- false && false : false
- || (LOGICAL OR)
- true || true : true
- true || false : true
- false || true : true
- false || false : false
- 예제
int a = 3;
int b = 5;
int c = 3;
boolean test1 = a == b; // false
boolean test2 = a == c; // true
boolean test3 = c == b; // false;
// true && true => true
System.out.println(test1 && test1);
// true && false => false
System.out.println(test1 && test2);
// false && false => false
System.out.println(test2 && test3);
// true || true => true
System.out.println(test1 || test1);
// true || false => true
System.out.println(test1 || test2);
// false || false => false
System.out.println(test2 || test3);
5. instanceof
- A instanceof B
- 객체가 특정 클래스 / 인터페이스 유형인지 여부를 확인.
- 연산결과 타입 : boolean
- A가 B의 타입 혹은 하위 구현체인지 판단.
- 예제
class Test {
...
}
class Test2 extends Test{
...
}
class Operator{
public static void main(String[] args) {
Test obj1 = new Test();
Test obj2 = new Test2();
System.out.println(obj1 instanceof Test); // true
System.out.println(obj1 instanceof Test2); // false
System.out.println(obj2 instanceof Test); // true, 상속 관계
System.out.println(obj2 instanceof Test2); // true
//null 은 어떤 것의 instance 도 아님
System.out.println(null instanceof Object); // false
}
}
6. assignment(=) operator
- 객체에 값을 할당
- 다른 연산자와 묶어서 사용 가능
대입연산자 | 설명 |
A = B | A 피연산자에 B 피연산자를 대입 |
A += B | A 피연산자에 B 피연산자를 더한 후, 결과값을 A 피연산자에 대입 |
A -= B | A 피연산자에 B 피연산자를 뺀 후, 결과값을 A 피연산자에 대입 |
A *= B | A 피연산자에 B 피연산자를 곱한 후, 결과값을 A 피연산자에 대입 |
A /= B | A 피연산자에 B 피연산자를 나눈 후, 결과값을 A 피연산자에 대입 |
A %= B | A 피연산자에 B 피연산자를 나눈 후, 결과값(나머지)을 A 피연산자에 대입 |
A &= B | A 피연산자를 B 피연산자와 비트AND 연산 후, 결과값을 A 피연산자에 대입 |
A |= B | A 피연산자를 B 피연산자와 비트OR 연산 후, 결과값을 A 피연산자에 대입 |
A ^= B | A 피연산자를 B 피연산자와 비트XOR 연산 후, 결과값을 A 피연산자에 대입 |
- 예제
// a 피연산자에 3이란 값을 대입
int a = 3;
int b = 5;
// 3+=5 = 8
a += b; // a=8
// 8*=5 = 40
a *= b; // a=40
7. 화살표(->) 연산자
- Java 8에서 추가된 Lambda 식을 지원하기 위해 사용되는 연산자
- 함수형 프로그래밍(Functional programming) 표현
- 예제
int a = 3;
// 축약식
// 하나의 식or로직을 가진다면 {}과 return 생락이 가능
// a -> { return a + 1; }과 같다.
a -> a + 1;
// 그렇지 않다면, 다음과 같이 작성한다.
a -> {
int b = 3;
a += b;
return a + 1;
}
// ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
interface Test{
int func(int a);
}
class Test2 {
public void func(Test test){
int value = test.func(3);
System.out.println(value);
}
}
class Operator{
public static void main(String[] args) {
Test2 test2 = new Test2();
// lambda expression 사용 X 버전
test2.func(new Test() {
public int func(int a){
return a + 2;
}
});
// lambda expression 사용 버전
test2.func((a) ->{
return a + 2;
});
}
}
8. 삼항 연산자(3항 연산자)
- 조건식 ? 반환값1(true 인 경우) : 반환값2(false 인 경우)
- 삼항 연산자는 피연산자 3개를 사용하며, if-then-else 명령문의 축약형이라고 할 수 있다.
- 예제
int a = 3;
int b = 5;
int result;
// (3 - 5 > 0) => false
result = (num1 - num2 > 0) ? num1 : num2;
// result = 5
System.out.println("두 정수 중 더 큰 수는 " + result + "입니다.");
9. 연산자 우선 순위
출처
- https://www.notion.so/3-f3a94e0092664d8aa1debe7e88dec43b
- https://lob-dev.tistory.com/entry/Live-StudyWeek-03-%EC%97%B0%EC%82%B0%EC%9E%90
반응형
'Study > Java(Online-Study)' 카테고리의 다른 글
6주차 과제: 상속 (0) | 2021.07.17 |
---|---|
5주차 과제: 클래스 - 이론(1) (0) | 2021.06.27 |
4주차 과제: 제어문 - 이론(1) (0) | 2021.06.20 |
2주차 과제 : 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.20 |
1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (0) | 2020.11.19 |