일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이클립스
- 주민번호마스킹
- CentOS
- Oralce
- 서울에어비앤비
- 7kyu
- 6kyu
- 남산타워뷰
- 8kyu
- 파이썬
- Eclipse
- Linux
- 중첩쿼리
- JavaScript
- Codewars
- 이것이리눅스다
- SQL
- 오류
- class파일바로보기
- 사용자변경
- monthPicker
- https
- java
- 멀티쓰레드프로그래밍
- 서울복층에어비앤비
- VMware
- 시즌1
- Python
- 자바기초스터디
- CentOS8
- Today
- Total
보통사람
[Study-3주차] 연산자 본문
- 목표
-
자바가 제공하는 다양한 연산자를 학습하세요.
-
- 학습할 것
-
산술 연산자
-
비트 연산자
-
관계 연산자
-
논리 연산자
-
instanceof
-
assignment(=) operator
-
화살표(->) 연산자
-
3항 연산자
-
연산자 우선순위
-
1. 연산자(Operator)란?
-
연산자는 연산을 수행하는 기호를 의미
-
다양한 연산자의 종류가 있으며 사칙연산에도 우선순위가 있듯이 연산자에도 우선순위가 있음
-
연산자의 우선순위
-
산술 연산자 > 관계(비교) 연산자 > 논리 연산자 > 대입 연산자순으로 우선순위가 높음
-
단항 연산자 > 이항 연산자 > 삼항 연산자순으로 우선순위가 높음
-
단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽
-
※ 산술 변환(Usual Arithmetic Conversion)
-
연산 전에 타입을 일치시키기 위해 자동 형변환되는 것
-
데이터 타입이 일치해야 연산이 가능하며 만약 서로 다르다면 형변환 연산자로 타입을 일치시켜야 연산 가능함
-
모든 연산에서 산술 변환이 일어나지만 쉬프트 연산자(<<, >>) , 증감 연산자(++,--)는 예외
2. 산술 연산자
- 정수형인 경우 0으로 나누면 실행 시 에러 발생함
- 증감 연산자
-
연산자의 값을 1씩 증가 또는 1씩 감소시키는 연산자
-
전위형(preifx)과 후위형(postfix)이 있으며 독립적으로 사용되는 경우 둘의 차이는 없음
-
전위형 : 값이 참조되기 전에 증가 또는 감소
-
후위형 : 값이 참조된 후 증가 또는 감소
-
-
int i = 1;
int j = 2;
System.out.println(i++); // 1
System.out.println(++j); // 3
System.out.println(i); // 2
System.out.println(j); // 3
3. 관계 연산자(비교 연산자)
-
대소 비교 연산자(<,>, <=,>=)는 참조형 타입 변수에서 사용할 수 없음
-
등가 비교(==,!=) 연산자는 모든 타입에서 사용할 수 있음
4. 논리 연산자
-
|| (OR) : 조건 중 하나만 true이면 true를 반환함
-
&&(AND) : 2개의 조건 모두 true이면 true를 반환함
※ 단락 회로 평가(Short Circuit Evaluation)
-
|| 연산자는 조건 중 하나만 true이면 true를 반환하기 때문에 좌측 조건 결과가 true로 판단되면 우측 조건을 판단하지 않고&& 연산자는 조건 모두 true여야 true를 반환하기 때문에 좌측 조건 결과 false이면 우측 조건을 판단하지 않는 평가 기법
-
좀 더 빠른 연산을 보장한다고 함
int i = 100;
int j = 0;
// 단락회로평가때문에 변수 j의 값이 변하지 않음
System.out.println(i >= 100 || ++j >= 1 ); // true
System.out.println(i); // 100
System.out.println(j); // 0
// 조건을 바꾸거나 |, & 연산자를 이용하면 됨
System.out.println(i >= 100 | ++j >= 1 ); // true
System.out.println(i); // 100
System.out.println(j); // 1
5. 비트 연산자
-
비트 단위로 논리 연산 시 사용하는 연산자
-
정수(문자 포함)만 허용됨
-
비트 연산자 규칙
-
|(OR) : 한쪽 값이 1이면 1을 반환
-
&(AND) : 양쪽 값이 1이면 1을 반환
-
^(XOR) : 서로 값이 다를 때만 1을 반환
- ~(NOT) : 현재 값의 반대되는 값을 반환
-
- 쉬프트 연산자(>>,<<)
-
<< 연산자 : 2의 n승으로 나눈 결과값과 동일함
-
>>연산자 : 2의 n승으로 곱한 결과값과 동일함
-
System.out.println(8<<2); // 32
System.out.println(8*2*2); // 32
System.out.println(8>>2); // 2
System.out.println(8/(2*2)); // 2
6. 삼항 연산자
-
if문 대신 삼항 연산자를 사용하면 코드가 간결해짐 하지만 중첩 사용하면 가독성이 좋지 않으니 한 번만 사용할 것
-
결과1, 결과2의 데이터 타입이 다른 경우 산술 변환이 발생함
조건식 ? 결과1 : 결과2
결과1 => 조건식이 true인 경우
결과2 => 조건식이 false인 경우
7. 대입 연산자
-
연산자들 중에서 낮은 우선순위를 가지고 있음
8. instanceof 연산자
- 변수의 실제 타입을 확인할 때 사용함
- 참조형 타입 변수만 사용 가능하며 기본형 타입 변수는 다른 방식으로 해야 함
- 해당 결과가 true라는 것은 검사한 타입으로 변수가 형변환이 가능하다는 것을 의미함
// 참조형 타입 변수
StringBuffer sb = new StringBuffer();
System.out.println(sb instanceof Object); // true
// 기본형 타입 변수
// 방법1)
int num = 100;
System.out.println(Integer.class.isInstance(num)); // true
System.out.println(Double.class.isInstance(num)); // false
// 방법2)
Integer num2 = 1000;
System.out.println(num2 instanceof Integer); // false
9. 화살표(->) 연산자
-
화살표 연산자는 Java 8에 추가된 람다식에서 사용함
- 람다식은 메소드를 식으로 표현한 것으로 익명 함수(Anonymous Function)이라고도 함
// 람다식 이용 전
int sum(int a, int b) {
return a + b;
}
// 람다식 이용
(a, b) -> { a + b }
-
람다식은 익명 클래스의 객체여서 타입이 없음
-
Object 타입으로 형변환은 할 수 없고 오직 함수형 인터페이스로만 형변환이 가능함
※ 참조
Java의 정석
https://velog.io/@foeverna/Java-%EC%97%B0%EC%82%B0%EC%9E%90-%EA%B4%80%EA%B3%84-%EB%85%BC%EB%A6%AC-%EC%A1%B0%EA%B1%B4-%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90
http://w7c.blogspot.com/2015/12/javascript-short-circuit-evaluation.html
'Study' 카테고리의 다른 글
[Study-6주차] 상속 (0) | 2020.12.22 |
---|---|
[Study-5주차] 클래스 (0) | 2020.12.13 |
[Study-4주차] 제어문 (0) | 2020.12.07 |
[Study-2주차] 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.21 |
[Study-1주차] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) | 2020.11.21 |