[JAVA스터디]3주차-연산자
백기선 선생님과 함께하는 JAVA스터디 3주차
* 학습할 것
산술 연산자
비트 연산자
관계 연산자
논리 연산자
instanceof
assignment(=) operator
화살표(->) 연산자
3항 연산자
연산자 우선 순위
(optional) Java 13. switch 연산자
산술 연산자
- 산술 연산자는 연산자들 중 가장 기본이 되는 연산자로서 사칙 연산자들을 말한다.
- 연산자의 종류는 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 값을 구하기 위한 연산자가 있다.
연산자 | 설명 |
---|---|
+ | 더하기 연산자(문자열 연결에도 사용) |
- | 빼기 연산자 |
* | 곱하기 연산자 |
/ | 나누기 연산자(정수형은 몫 연산자) |
% | 나머지 MOD 연산자 |
- 피연산자들의 변수형이 서로 다르면 데이터 값의 범위가 큰 변수형으로 변환됨.
- int형보다 작은 크기의 변수형들은 int로 형 변환된다.
- 따라서 int형 변수를 float형 변수로 나눈다면 먼저 int형 변수가 float형 변수형으로 형 변환되고 그 뒤에 나눗셈이 진행된다.
비트 연산자
- 비트 연산자는 byte, short, int, char 변수형에 대해서 사용 가능한 연산자이며 비트연산자와 관련된 모든 연산은 2진수에서 처리된다.
- 비트 연산자를 사용하는 이유는 컴퓨터 내부 프로세스의 모든 연산은 2진수 체계에서 처리되기 때문에 보다 빠르게 처리될 수 있기 때문.
비트연산자 | 기호 | 설명 |
---|---|---|
비트 not 연산자 | ~ | 2진수의 각 자리수에 not연산을 한다(ex. ~0011) |
비트 and 연산자 | & | 2진법으로 표시된 두 개의 피연산자가 필요. 각 자릿수에 AND 연산 실행. |
비트 OR 연산자 | 2진법으로 표시된 두 개의 피연산자가 필요. 각 자릿수에 OR 연산 실행. | |
비트 XOR 연산자 | ^ | 2진법으로 표시된 두 개의 피연산자가 필요. 각 자릿수에 XOR 연산 실행. |
OR 연산자는 '|'기호를 사용한다... 표에 |가 사용되어서 자꾸 사라진다ㅠ-ㅠ 뭔가 예외처리 있을거 같은데 몰겠음..
비트 시프트 연산자
- 시프트 연산자는 정수형 변수에서만 사용 가능하다.
- 이진법으로 표기된 데이터의 자리를 이동시키는 역할을 한다.
- << , >> 으로 표기하고, <<는 왼쪽 방향으로 데이터를 이동시키고 >>는 오른쪽 방향으로 이동시킨다.
연산자 | 설명 |
---|---|
<< 연산자 | 데이터를 왼쪽으로 지정한 숫자만큼 자릿수를 점프한다. 점프하고 남은 자릿수는 피연산자가 양수인 경우에는 0으로 채우고 음수인 경우에는 1로 채운다. 음수, 양수를 의미하는 맨 앞의 비트는 연산에 관여하지 않는다. |
>> 연산자 | 데이터를 오른쪽으로 지정한 숫자만큼 자릿수를 점프한다. 점프하고 남은 자릿수는 피연산자가 양수인 경우에는 0으로 채우고 음수인 경우에는 1로 채운다. 음수, 양수를 의미하는 맨 앞의 비트는 연산에 관여하지 않는다. |
>>> 연산자 | 데이터를 오른쪽으로 이동한다. 점프하고 남은 자릿수는 부호에 상관없이 0으로 채운다. 항상 양수를 유지하므로 unsigned shift operator이다. |
관계 연산자
- 피연산자를 비교하기 위해서 사용하는 것으로 결과값은 true/false이다.
- 관계연산자는 > , < , >= , <= , == , !=으로 사용한다.
- 여기서 중요할 부분은 =(대입) 와 ==(같다) 는 다르다는 것.
- 그리고 자바에서 문자열을 비교할 때는 ==를 사용하지 않고 equals()함수를 사용해야한다.
논리 연산자
- 논리연산자는 true or false 값을 갖는 boolean형의 피연산자들을 판단해서 그 결과값을 true/false로 반환하는 것이다.
연산자 | 기호 | 설명 |
---|---|---|
not 연산자 | ! | 한 개의 피연산자가 필요. boolean 변수 혹은 데이터에서만 사용 가능. 전위형 (ex. !isWork) |
and 연산자 | && | 두 개의 피연산자가 필요하며 피연산자들은 boolean 혹은 데이터에서만 사용가능 |
or 연산자 | 두 개의 피연산자가 필요하며 피연산자들은 boolean 혹은 데이터에서만 사용가능 |
or 연산자 기호는 ||이다,,,
instanceof
-
타입 비교 연산자이다.
-
참조 변수가 instanceof로 형 변환이 가능한지 연산.
-
주로 조건문으로 사용되며 instanceof의 왼쪽에는 참조변수를 오른쪽에는 타입이 피연산자로 위치한다. 그리고 연산의 결과로 true/false를 반환함.
class A{
}
calss B extends A {
//A를 상속받는 클래스 B
}
main(){
A a = new A();
if(a instanceof Object) { //가능 }
if(a instanceof A) { //가능 }
if(a instanceof B) { //불가능 }
=> 결과는 Object, A만 가능하다.
assignment(=) operator
- 대입 연산자는 '='를 이용해서 사용하는데 이것은 위에도 말했듯이 '=='과 다르다.
- '=='는 같다를 뜻한 다면 '='는 a = b ; 이렇게 사용할 때 a에 b를 대입한다는 의미가 된다.
대입 연산자 | 설명 |
---|---|
= | 왼쪽의 피연산자에 오른쪽의 피연산자를 대입함 |
+= | 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결괏값을 왼쪽의 피연산자에 대입함. |
-= | 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후, 그 결괏값을 왼쪽의 피연산자에 대입함. |
*= | 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, 그 결괏값을 왼쪽의 피연산자에 대입함. |
/= | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 결괏값을 왼쪽의 피연산자에 대입함. |
%= | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 나머지를 왼쪽의 피연산자에 대입함. |
길게 써져있어서 복잡할 수도 있으니
쉽게 말하면,
a += b; 는 a = a+b; 가 되고
a -= b; 는 a = a-b; 가 되고
a *= b; 는 a = a x b;가 되고 (별표가 안써진다;;ㅎㅎ)
a /= b;는 a = a/b;가 되고
a %= b;는 a = a%b;가 된다.
화살표(->) 연산자
- 람다 표현식은 8버전 부터 적용이 가능하다.
(파라미터) -> { body } 형태로 사용이 가능하다.
public class Main {
A a = new A() {
@Override
public void go() {
System.out.println("hellow world");
}
};
//위의 식을 아래로 축약 가능함.
// 1. 하나의 식, 로직을 가지고 있다면 { }과 return도 생략 가능.
A b = () -> System.out.println("hellow world");
// 2. 그렇지 않다면 이렇게 작성.
A c = () ->{
System.out.println("hellow world");
};
}
class A {
public void go(){
}
}
3항 연산자
- 조건식을 간단하게 해주는 3항 연산자는 피연산자의 개수가 3개인 것을 의미한다.
(피연산자1) ? (피연산자2) : (피연산자3)
피연산자1의 결과값이 true이면 피연산자2가 반환되고 false이면 피연산자3이 반환된다.
if-else문과 비슷하지만, 한 줄로 간단하게 표현된다.
연산자 우선 순위
연산자 우선순위는 괄호가 가장 높고,
그 다음 산술 > 비교 > 논리 > 대입의 순서.
항은 단항 > 이항 > 삼항 순서.
연산자들의 진행 방향은 왼쪽 -> 오른쪽.
단항 연산자와 대입 연산자의 경우에는 오른쪽 -> 왼쪽.
(optional) Java 13. switch 연산자
[switch statement]
- 먼저 기본적으로 우리가 알고있는 switch문의 정석을 보면,
case, break가 존재한다.
=> java 12 이전에는 switch문을 이렇게 사용했다.
=> 이것을 switch statement라고 한다.
[switch operator]
- break를 사용하지 않아도 된다.
- yield 존재함. return 값 존재해도 됨.
- case --> A 같은 형식으로 사용 표현 가능함.
- 만약 switch의 반환값이 따로 필요하지 않거나 case가 switch 들어오는 모든 인자들을 커버할 수 있으면 상관없지만, 그렇지 않다면 default -> code를 필수로 작성해야한다.
import java.util.*;
public class Main {
public static void main(String[] args) {
//java 12
int a= 1;
int b= 0;
b = switch(a) {
case 1->1;
case 2->2;
default -> throw new IllegalStateException("예외값:"+a);
};
}
}
귀찮아서 자바 8버전 쓰고 있어서 에러가 떠서 그냥 코드만 업로드^^;;
[JAVA 13]
import java.util.*;
public class Main {
public static void main(String[] args) {
//java 13
int a= 1;
int b= 0;
b = switch(a) {
case 1: yield 3;
default : throw new IllegalStateException("예외값:"+a);
};
}
}
Author And Source
이 문제에 관하여([JAVA스터디]3주차-연산자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tms01365/JAVA스터디3주차-연산자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)