일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 깃허브 로그인
- 모두를위한딥러닝
- 깃 연동
- 팀플회고
- 데베
- 모두의네트워크
- 문자열
- HTTP
- 모두를 위한 딥러닝
- 네트워크
- 깃허브 토큰 인증
- 딥러닝
- 스터디
- 백준 5525번
- 백준 4949번
- 머신러닝
- 리액트 네이티브
- 깃 터미널 연동
- 백준
- 정리
- 데이터베이스
- 리액트 네이티브 프로젝트 생성
- 백준 4358번
- 자바
- 리액트 네이티브 시작하기
- 모두의 네트워크
- 지네릭스
- SQL
- 백준 4358 자바
- React Native
- Today
- Total
솜이의 데브로그
Chapter 03 ) 연산자 operator 본문
참고 : Java의 정석
1. 연산자
- 연산자 (operator) : 연산을 수행하는 기호 (+, -, *, / 등)
- 피연산자 (operand) : 연산자의 작업 대상 (변수, 상수, 리터럴, 수식)
연산자의 종류
산술 연산자 | + - * / % << >> | 사칙 연산과 나머지 연산(%) |
비교 연산자 | > < >= <= == != | 크고 작음과 같고 다름을 비교 |
논리 연산자 | && || ! & | ^ ~ | '그리고(AND)'와 '또는(OR)'으로 조건을 연결 |
대입 연산자 | = | 우변의 값을 좌변에 저장 |
기타 | (type) ?: instanceof | 형변환 연산자, 삼항 연산자, instanceof 연산자 |
연산자의 우선순위는 다음과 같다.
- 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.
- 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.
- 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
(교재에 표 참고). 논리 연산자에서는 & , ^, |, &&, || 순으로 우선순위가 높다. 헷갈릴 땐 괄호로 표기하자.
증감연산자
- 증가 연산자(++) : 피연산자의 값을 1 증가시킨다.
- 감소 연산자(--) : 피연산자의 값을 1 감소시킨다.
이 때 값이 참조되기 전에 증가시키면 전위형, 참조 후 증가시키면 후위형이라한다. (감소의 경우도 동일)
식에 두번 이상 포함된 변수에 증감 연산자를 사용하는 것은 피해야한다.
산술연산자
- 수행 할 때 형변환에 주의하자!
헷갈렸던 부분
char c1 = 'a'
char c2 = c1 + 1; //컴파일 에러
char c3 = 'a' + 1; //컴파일 에러 없음
'a'+1 의 경우 리터럴 간의 연산이라 컴파일 시 컴파일러가 계산하지만, 수식에 변수가 들어가 있는 경우 컴파일러가 미리 계산 할 수 없기 때문에 형변환을 해주어야한다!
등가 비교연산자 == 와 .equals 의 차이 꼭 기억하기
== 의 경우 두 피연산자의 값이 같은지 비교한다.
비교 연산자도 이항연산자이므로 연산을 수행하기 전에 형변환을 통해 두 피연산자의 타입을 같게 맞춘 다음 피연산자를 비교한다.
문자열의 비교
두 문자열을 비교할 때는 '==' 대신 equals()라는 메서드를 사용한다.
비교 연산자는 두 문자열이 완전히 같은 것인지를 비교하고, equals()는 문자열의 내용이 같은지를 비교한다.
String str1 = "abc";
String str2 = new String("abc");
str2=="abc" ? false
str2.equals("abc") ? true
즉, '==' 로 비교하면 내용이 같아도 다른 객체일 경우 false를 반환한다!
논리 연산자
- || (OR 결합) : 피연산자 중 어느 한 쪽만 true이면 true를 결과로 얻는다.
- && (AND 결합) : 피연산자 양쪽 모두 true 이어야 true를 결과로 얻는다.
Tip : OR 연산의 경우, 좌측 피연산자가 참이면 우측 피연산자의 값은 평가하지 않는다. AND 연산의 경우 좌측이 거짓이면 우측 피연산자는 평가하지 않는다. 따라서 같은 조건식이라도 피연산자의 위치에 따라서 연산 속도가 달라질 수 있다.
비트 연산자
- | (OR 연산자) : 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다. 주로 특정 비트의 값을 변경할 때 사용한다.
- & (AND 연산자) : 피연산자 양 쪽이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다. 주로 특정 비트의 값을 뽑아낼 때 사용한다.
- ^ (XOR 연산자) : 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다. 간단한 암호화에 사용된다.
~ : 비트 전환 연산자. 논리 부정 연산자 !와 유사하다.
쉬프트 연산자
- x << n 은 x * 2^n 의 결과와 같다.
- x << n 은 x / 2^n 의 결과와 같다.
빠른 실행속도를 요구하는 곳에만 쉬프트 연산자를 사용하는 것이 좋다. (가독성을 위해)
조건 연산자 ?:
조건식 ? 식1 : 식2
ex)
result = (x>y)? x:y
위의 식에서 x>y의 결과가 true 이면, result에는 x 의 값이 저장되고 false이면 y 값이 저장된다.
역시 가독성이 떨어지므로 한번 정도만 중첩하여 사용하는 것이 좋다.
복합 대입 연산자 (op)
주의 할 점 : i *= 10 + j; 의 경우
i = i* (10+j); 와 같다.
'책을 읽자 > Java의 정석' 카테고리의 다른 글
Chapter 06 ) 객체지향프로그래밍(1) (0) | 2021.09.04 |
---|---|
Chapter 05 ) 배열 array (0) | 2021.09.03 |
Chapter 04 ) 조건문과 반복문 (0) | 2021.09.03 |
Chapter 02 ) 변수 (0) | 2021.09.02 |
Chapter 01 ) 자바를 시작하기 전에 (0) | 2021.09.02 |