• 산술 연산자
  • 비트 연산자
  • 관계 연산자
  • 논리 연산자
  • instanceof
  • assignment(=) operator
  • 화살표(->) 연산자
  • 3항 연산자
  • 연산자 우선 순위
  • (optional) Java 13. switch 연산자

# 연산자

 연산자라함은, 사전적 의미로는 수행되는 연산을 표시하기 위한 기호라고 한다. 

 자바에서는 산술/비트/관계/논리 연산자가 존재하며 그 내용은 아래와 같다. 

 

1) 산술연산자 : 사칙연산을 하기위해 사용되는 연산자 

 다만 주의할 점으로는, 다른 형인 경우에는 더 큰 사이즈의 변수로 형변환을 수행하여 계산을 수행한다. 

값이 모두 float 형으로 출력된다.

2) 비트연산자 : 비트연산을 하기위해 사용되는 연산자 (&, |, ^, >>, <<, >>>)

비트연산은 피연산자들의 값을 비트단위로 논리연산을 수행한다. 그래서 결국 이 친구는 논리연산자인건가??????

 이때 주의사항으로는 아래와 같다. 

 a. byte일 지언정 bit 연산을 수행시는 int로 변환되서 수행된다. 

 b. bit shift를 수행 시, <<< 이 없는 이유는 부호를 고려할 필요가 없기 때문이다. >>> : 0으로 채울 때, >> : 해당 숫자의 부호비트로 채워짐. 

 

3) 관계연산자 : 같다, 같지않다, 작다, 크다를 확인하기 위해 사용되는 연산자

4) 논리연산자 : 논리적인 용어(AND, OR)를 사용하여 조건을 충족하는지 확인하기 위해 사용되는 연산자 

 

# insatnceof

instanceof는 연산자로써 (인스턴스) instanceof (클래스) 로써 형변환이 가능한지의 여부를 boolean 값으로 알려준다.  

# assignment operator (=)

assgitnment operator는 대입연산자이며 위의 예시로 본다면 Person의 객체를 생성하여 Person Type의 변수 a에 대입(할당)해라 라는 의미가 될 수 있겠다. 

 

#  삼항연산자 및 화살표연산자 

삼항연산자 및 화살표연산자 모두 가독성을 해친다고 생각한다. 대신 얻는 것은 내 손이 조금 편해진다? 는..

물론 익숙하지 않아서 가독성을 해친다고 생각하는 내가 문제지

 

 - 삼항연산자: 구성은 "조건식 ? 참일때 수행 : 거짓일때 수행" 이다. 삼항 연산자 이지만, 엑셀(?)처럼 추가적으로 조건을 더 달아줘도 최종 대입연산자를 통해 할당되는 형만 일치한다면 지장은 없다. 

 - 화살표연산자: 화살표 연산자는 람다식에서 사용되며 기본적인 아이디어는 아래와 같다. 

    :  (매개변수) -> (수행될 코드)

   Swift 에서는 Closure 로 사용되는데 (물론 다른 언어에서의 closure와는 다르다고 들었다) 쉽게 얘기해서 이름이 없는 함수로 이해하였다. 다만 여기서의 문제는 단순 최소값을 돌려주는 람다식을 이클립스에서 만들어봤는데 "The target type of this expression must be a functional interface" 라는 에러를 돌려줘서 다음에 다시 보충해서 코드도 작성할 예정이다;;; 

 

 

# 연산자 우선순위 

: 사칙연산에서 곱셈과 나눗셈이 덧셈과 뺄셈에 우선순위를 지니듯, 연산자에서도 우선순위가 존재한다. 

 규칙으로 분류하면 산술연산자 > 관계 연산자 > 논리연산자 > 대입연산자 이다. 합리적인 선에서 이해가 대부분 될테지만...

누가먼저인가????

 요런건 사실 헷갈릴 수 있는 부분이었다. 물론 IDE에서 비트연산에 괄호를 쓰라하여 우선순위를 합리적인 선에서 이해가 가게끔 도와주지만, 실제로 이런 경우에는 비교 연산자가 먼저 적용됨으로써 int형 데이터와 boolean 데이터를 & 하기 때문에 에러다. 

 

# java 13, switch 연산자 

 크게 변동사항으로는 switch 연산자 + yield문을 통해 값을 돌려줄 수 있다는 내용이다.

		// Before JDK 13
		int httpCode  =  400; 
		String meaning = "";
		
		switch(httpCode) {
		case 200:
			meaning = "Success";
			break;
        
        (etc.....)
			
		}
		
		// JDK 13 
		int httpCode  =  400;
		String meaning = switch(httpCode) {
		case 200:
			yield "Success";
		
        (etc....)
        
		}

티스토리 코드블럭을 자바로 변경하는건 태블릿이라 안되는건지 정말 열받는다..

+ Recent posts