- 백기선-JAVA STUDY/WEEK32020년 12월 19일 00시 25분 28초에 업로드 된 글입니다.작성자: jCurve728x90반응형
목표
자바가 제공하는 다양한 연산자를 학습하세요.
학습할 것
- 산술 연산자
- 비트 연산자
- 관계 연산자
- 논리 연산자
- instanceof
- assignment(=) operator
- 화살표(->) 연산자
- 3항 연산자
- 연산자 우선 순위
- (optional) Java 13. switch 연산자
산술연산자
산술 연산자는 수학적인 계산에 사용되는 연산자로 기본적으로 아는 +,-,*,/,%가 산술 연산자다.
'+' 연산잔느 숫자 값은 더해주고 문자열의 경우 문자열을 연결해 새로운 문자열을 만들어준다.
산술 연산에 있어 피연산자들이 모두 정수 타입이고 int타입 보다 크기가 작은 타입일 경우 모두 int로 변환 후 연산을 수행하기 때문에 byte타입 피연산자를 2개 연산하여 받은 결과물은 int여야 한다.
'-','/','*' ,'%'연산자는 각각 값을 뺀 결과값 ,값을 곱한 결과값, 나눈 몫, 나눈 나머지 값을 나타낸다.
산술 연산자의 특징은 피연산자들의 타입이 동일하지 않을 경우 크기가 더 큰 피연산자의 타입으로 변환후 연산을 수행한다.
연산의 결과가 실수라 하더라도 값을 받는 변수의 타입이 정수이면 정수 부분만 저장이되고,
값을 받는 변수가 실수 타입이고 결과가 정수 타입일 경우 '.0'으로 표기되어 저장된다.
따라서 결과를 받는 변수와 연산을 진행하는 변수의 타입을 고려하여 선택해야 한다.
부동 소수점 연산의 결과를 보면 1 - 0.7의 경우 예상 결과인 0.3인 아니라 0.2999999999999999993이 되어 정확한 계산이 되지 않는다 따라서 정확한 계산이 필요하다면 정수 연산으로 변경해서 계산해야 한다.
산술 연산시 값을 저장하는 변수의 타입보다 더 큰 타입의 값이 저장되거나 표현 가능 범위를 초과하여 오버플로우가 발생하면 ArithmeticException 예외를 발생시킨다.
5 / 0.0 → infinity
5% 0.0 →NaN (Not a Number)
위와 같은 연산을 실행하면 나오는 결과로 inifinity 와 NaN이있는데 이 값이 나오면 다음 연산을 수행해서는 안된다. 이 값으로는 어떤 수와 산술 연산을 하더라도 동일하게 inifinity 와 NaN이 산출된다. 따라서 어떠한 결과값이 infinity 와 NaN인지 확인하려면 Double.isInfinite( )와 Double.isNaN( ) 을 사용하여 확인하면 된다.
비트 연산자
https://kookyungmin.github.io/language/2018/05/14/java_03/
우리가 평소에 사용하는 10 진수 숫자를 2진수의 0과1로 표현하면 비트 연산자를 이용한 연산이 조금 더 용이 하다.
not 연산의 경우 1의 보수를 취한 후 2의 보수 표기 법으로 바꿔주기 위해 +1을 하면 -3이 된다.
관계 연산자.
관계 연산자는 관계 연사자를 중심으로 우항과 좌항을 비교해 대소 관계 ,동등 관계를 boolean값으로 return해주는 연산자로서 비교 연산자라고도 합니다.
(<https://kookyungmin.github.io/language/2018/05/14/java_03/>)
논리 연산자
boolean 형 값을 결과로 하는 조건식만을 허용하는 연산자 입니다.
https://kookyungmin.github.io/language/2018/05/14/java_03/
&&와 || 연산자를 함께 사용하는 경우 &&가 연산 우선수위가 더 높다는 것을 인지해야한다.
instanceof 연산자
프로그래밍시 동적으로 인스턴스가 생성될 때 , 해당 타입을 알아기 위해 instanceof 연산자를 사용할 수 있습니다. instanceof 연산자의 좌측에 있는 인스턴스 값이 우측에 있는 클래스의 인스턴스인지 확인 할 수 있습니다. 이때 동일 타입, 상위 타입을 상속, 인터페이스 상속에 대한 여부도 확인할 수 있습니다.
a2는 B의 인스턴스가 타입이 A인 변수에 담겨져 있습니다.
그럼에도 두 개 출력의 결과가 true인 이유는 값이 담긴 변수의 타입을 확인하는 것이 아니라 실제 힙 영역에 저장된 인스턴스 타입을 확인하는 것이기 때문에 B인스턴스로 판단하여 true를 return 하게 됩니다.
인터페이스도 동일합니다.
assignment(=) operator
할당 연산자라고 부르는 assignment operator는 변수에 값을 할당하는데 사용한다.
할당 연산자의 왼쪽 피연산자는 변수에 해당되며 오른쪽 피연산자는 값이 된다. 오른쪽에 있는 값은 왼쪽에 있는 피연산자의 데이터 타입과 동일해야 할당이 가능하다. 타입이 동일하지 않은 경우 컴파일 에러가 발생한다.
화살표 연산자
화살표 연산자의 생김새가 c/c++에서 구조체의 변수에 접근하기 위한 연산자와 동일하지만 java에서 쓰임은 전혀 다릅니다.
( )-> System.out.print("Run method");
위 처럼 메서드를 람다식으로 표현하여 이름과 반환값이 없어지므로 익명함수라고도 한다.
return 문 없이 식의 연산 결과가 반환될 수 있습니다.
오히려 c언어의 화살표 보다 자바스크립트의 화살표 함수와 형태가 비슷하다고 생각합니다.
const a = ()⇒{ console.log("Run method")}
a();
3항 연산자
3항 연산자의 표현은
조건식 ? 식1 : 식2 로 조건식의 평가 결과가 true이면 식1이 false이면 식2의 연산 결과가 됩니다.
연산자 우선 순위
표로 보는 것보다 규칙을 정리하여 규칙을 기억하는게 더 쉽다.
- 단항,이항,삼항 연산자 순으로 우선순위를 가진다.
- 산술,비교,논리,대입 연산자 순으로 우선순위를 갖는다.
- 단항과 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽인다. (→)
- 복잡한 연산식에는 괄호( )를 사용해서 우선순위를 정해준다.
(optional)Java 13. switch 연산자
자바에서 도입한 switch연산의 경우 매 case마다 원하는 조건에서 멈추려면 break문을 추가해야하는 반복과 그런 반복으로 인한 많은 글자 수를 차지 하는것에 반하여 새로운 case 레이블로
switch연산을 구현했습니다.
Day day = Day.WEDNESDAY; System.out.println( switch (day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; case THURSDAY, SATURDAY -> 8; case WEDNESDAY -> 9; default -> throw new IllegalStateException("Invalid day: " + day); } );
위 코드 처럼 한 줄의 case 레이블에 여러 값을 넣고 그 값에 해당하는 상황에서의 return 값을 화살표로 지정해 주었습니다.
→뒤에 값이 아니라 해당조건에 실행되는 식을 넣을 수도 있습니다.
반응형'JAVA' 카테고리의 다른 글
백기선-JAVA/STUDY/WEEK6 (0) 2021.01.07 백기선-JAVA STUDY/WEEK5 (0) 2020.12.19 백기선-JAVA STUDY/WEEK4 (0) 2020.12.19 백기선-JAVA STUDY/WEEK2 (0) 2020.12.19 백기선-JAVA STUDY/WEEK1 (0) 2020.12.19 댓글