[JAVA스터디]3주차-연산자

7268 단어 JavaStudyJavaStudy

백기선 선생님과 함께하는 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);
		};
				
		}
}

좋은 웹페이지 즐겨찾기