본문 바로가기
Delvelopment/Java

[JAVA] 산술, 비트, 관계, 논리, 3항, 화살표 연산자, java14 switch 문

by 제제킴 2022. 1. 6.
반응형

산술 연산자

산술 연산자는 우리가 일반적으로 말하는 사칙연산이다. 산술 연산자는 더하기 (+), 빼기 (-), 곱하기 (*), 나누기 (/), 나머지를 구하는 (%) 총 5개로 이루어져 있다. 산술 연산자는 boolean 타입을 제외한 모든 기본 타입에 사용할 수 있다.
기본적인 연산은 모두 알고 있을거다..
산술 연산자의 특징은 피연산자들의 타입이 동일하지 않을때 아래와 같은 규칙으로 타입을 일치 시킨 후 연산을 수행한다.

  • 피연산자들이 모두 정수 타입일때, int 타입(4byte) 보다 크기가 작을 경우 모두 int 타입으로 변환 후 연산을 수행한다.
  • 피연산자들이 모두 정수 타입일때, log 타입이 있을 경우 모두 long 타입으로 변환후 연산을 수행한다.
  • 피연산자 중 실수 타입이 있을때, 크기가 큰 실수 타입으로 변환 후 연산을 수행한다. (float < double)

→ 연산시 피 연산자들의 타입이 일치하지 않을때 캐스팅이 일어난다. → 연산시 연산된 값이 오버플로우가 발생하지 않도록 주의하여야 한다.


 

비트 연산자

비트 연산자는 데이터를 비트(bit) 단위로 연산한다. 즉 0과 1이 피연산자가 된다. 0과 1로 표현이 가능한 정수 타입만 비트 연산이 가능하다. 실수 타입은 연산이 불가능 하다.

비트 연산자는 기능에 따라 비트 논리 연산자 (&, |, ^, ~)와 비트 이동 연산자 (<<, >>, >>>)로 구분한다.

비트 논리 연산자

위 그림으로 정리된다.


 

비트 이동 연산자

  • a << b → 정수 a의 각 비트를 b만큼 왼쪽으로 이동 (빈자리는 0으로 채워진다)

http://www.tcpschool.com/java/java_operator_bitwise

  • a >> b → 정수 a의 각 비트를 b만큼 오른쪽으로 이동 (빈자리는 정수a의 최상위 부호 비트(MSB, 양수(0), 음수(1))와 같은 값으로 채워진다)

http://www.tcpschool.com/java/java_operator_bitwise

  • a >>> b → 정수 a의 각 비트를 b만큼 오른쪽으로 이동한다 (빈자리는 0으로 채워진다)

http://www.tcpschool.com/java/java_operator_bitwise

 


비교(관계) 연산자

비교 연산자는 대소 (<, ≤, ≥, >) 또는 동등 (==, ≠)을 비교해서 boolean타입으로 산출한다.
피 연산자가 char 타입이면 유니코드 값으로 비교 연산을 수행한다.
  ex) ‘A’ < ‘B’ == 65 < 66
피연산자가 int타입과 double 타입이면 더 큰 타입으로 캐스팅하고 비교한다
  ex) 3 == 3.0 → 3.0 == 3.0

그러나 한 가지 예외가 있다. double타입과 float타입을 비교 연산을 수행할때, float의 0.1f는 0.1의 근사값 0.10000000149011612와 같은 값이 되어 0.1 보다 큰 값이된다.
String 타입은 객체의 주소값을 가질 수 있기때문에 동등 연산자를 통해 비교할 수 없다. equals() 메소드를 사용하면 값이 정확히 같은지를 비교할 수 있다.

반응형

논리 연산자

논리 연산자는 논리곱(&&), 논리합 (||), 배타적 논리합(^), 부정 (!) 연산을 수행한다. 논리 연산자의 피연산자는 boolean 타입만 사용할 수 있다.

한 가지 특징을 가지고 있는데, &&와 &는 연산 과정의 차이를 가지고 있다. && 앞의 피연산자가 false라면 뒤의 연산자를 평가하지 않고 false라는 산출 결과를 내지만, &는 두개다 평가해서 산출 결과를 낸다. ||와 |도 마찬가지 이다. → 이것은 효율적인 사용을 위해 &&, || 가 올바른 사용이라고 볼 수 있다.

 


삼항 연산자

삼항 연사자 (? :) 는 세 개의 피연산자를 필요로 하는 연산자를 의미한다. ? 앞의 조건식에 따라 콜론 (:) 앞 뒤의 피연산자가 선택된다.
사실 삼항 연산자는 한 줄에 조건식을 표현할 수 있지만, 클린코드에 의하면 삼항연산자는 코드의 가독성이 떨어져 사용을 지양하고, 실제로 사용을 지양하길 바란다.

 


 

instanceof (객체 타입 확인)

instanceof 연산자는 객체가 어던 클래스의 인스턴스인지 확인할 수 있는 연산자 이다.

boolean result = (객체) instanceof 타입

Object obj = new Member();

boolean result = obj instanceof Member; // true

boolean result = obj instanceof Team; // false

객체가 우항의 인스턴스이면 true를 산출한다.

 


 

assignment(=) operator

할당 연산자라고 불린다.

String str = "Assignment";

 

 


 

화살표(->) 연산자

화살표는 람다의 파라미터 리스트와 바디를 구분한다.

(parameters) -> expression

람다의 기본 문법이다.

람다에 대해서 따로 다룰 예정이지만, 간단하게 정리하면, 함수형 인터페이스라는 문맥에서 람다 표현식을 사용할 수 있다. 람다 포현식으로 함수형 인터페이스의 추상 메서드 구현을 직접 전달할 수 있으므로 전체 표현식을 함수형 인터페이스의 인스턴스로 취급할 수 있다.

 


 

Java 14. switch 연산자

java 12, 13, 14 버전에서 switch 연산자의 개선이 이루어졌다. 기존 switch 문은 가독성과, break문의 누락에 대한 오류 등의 문제들이 있었다.

향상된 switch문의 특징들은 아래와 같다.

변화된 점은 화살표와 case 라벨이 추가됬다.

switch(data){
	case one, two, three -> log.info("1, 2, 3");
	case fore, five, six  -> log.info("4, 5, 6");
}

반환값 (return)이 추가된 switch 문.

int result = switch(data) {
	case one -> 1;
	case two -> 2;
	case three -> 3;
};

yield 예약어 사용.

int result = switch(data) {
	case one -> {
		log.info("one");
		yield 1;
		}
	case two -> {
		log.info("tow");
		yield 2;
}

https://openjdk.java.net/jeps/361

 

JEP 361: Switch Expressions

JEP 361: Switch Expressions AuthorGavin BiermanOwnerJan LahodaTypeFeatureScopeSEStatusClosed / DeliveredRelease14Componentspecification / languageDiscussionamber dash dev at openjdk dot java dot netEffortSDurationMRelates toJEP 354: Switch Expressi

openjdk.java.net

 

 

반응형

댓글