본문 바로가기
스터디/2209_자바의정석

3주차 과제 : 연산자

by Jeong.dev 2022. 9. 18.

📌 연산자

- 연산자 : 어떠한 기능을 수행하는 기호

- 피연산자 : 연산자의 작업 대상(변수, 상수, 리터럴, 수식)

 

 

 

📌 연산자의 종류

- 단항 연산자 : +, - , ++, --, ~, !

- 이항 연산자

  - 산술 : *, /, %, +, -, <<, >>, >>>

  - 비교 : >, <, >=, <=, ==, !=

  - 비트 : &, |, ^

  - 논리 : &&, ||

- 삼항 연산자 : ? :

- 대입 연산자 : =, op=

 

 

 

📌 단항 연산자(+, - , ++, --, ~, !)

- 부호연산자 (+, -) : 피 연산자에 1 곱하기(+), -1 곱하기(-)

- 증감 연산자 (++, --) : 피연산자 값 1 증가(++), 1 감소(--)

// 전위형
j = ++i; // ++i; j=i; 와 동일

// 후위형
j = i++; // j=i; ++i; 와 동일

 

- 논리부정연산자 (!) : true는 false로, false는 true로 바꾼다. (피연산자가 boolean일 때만 가능)

- 비트전환연산자 (~) : 정수를 2진수로 표현 시, 1을 0으로, 0은 1로 바꾼다. (피연산자가 정수형일 때만 가능)

 

 

 

 

📌 이항 연산자(산술, 비교, 비트, 논리)

특징

- 이항 연산자는 연산을 수행하기 전에 피연산자의 타입을 일치시킨다.(보다 큰 타입으로 일치)

- int보다 크기가 작은 타입은 int로 변환 (ex. byte + short → int + int, 결과도 int)

 

산술연산자(*, /, %, +, -, <<, >>, >>>)

- 나머지연산자(%) : 나누기한 나머지 반환

- 쉬프트연산자(<<, >>, >>>) : 2ⁿ으로 곱하기(<<), 나누기(>>) 

  ex. 8 << 2 → 8 * 2², 8 >> 2 → 8 / 2²

 

비교연산자(관계연산자)(>, <, >=, <=, ==, !=)

- 피연산자를 같은 타입으로 변환 후 비교

- 결과는 true 또는 false

- 참조형은 ==(같다), !=(다르다)만 사용 가능

- 문자열 비교는 == 대신 equals() 사용해야 한다.

 

비트연산자(&, |, ^)

- 피연산자를 비트단위로 연산한다.(실수형 제외한 모든 기본형에 사용 가능)

- OR연산자 (|) : 피연산자 중 어느 한 쪽이 1이면 1

- AND연산자 (&) : 양쪽 모두 1이여야 1

- XOR연산자(^) : 서로 달라야 1

ex. 3 | 5 = 7

3 → 2진수 : 011

5 → 2진수 : 101

| →              111 = 7

 

논리연산자(&&, ||)

- 피연산자 boolean이어야 하고, 연산결과도 boolean

- 우선순위 && > || (같이 사용하는 경우 그냥 괄호 사용해서 명시적으로 나타내기)

- OR연산자 (||) : 피연산자 중 어느 한 쪽이 true 이면 true 

- AND연산자 (&&) : 양쪽 모두 true이여야 true 

 

 

 

📌 삼항 연산자(? :)

- 간단한 if문은 삼항연산자를 사용하면 코드 간결하게 작성할 수 있다.

- (조건식) ? 식1 : 식2

- 조건식의 연산결과가 true이면 식1 반환, false이면 식2 반환

 

 

 

📌 대입연산자(assignment operator)(=, op=)

- 오른쪽 피연산자의 값을 왼쪽 피연산자에 저장한다.(단, 왼쪽 피연산자는 상수가 아니어야 한다.)

- 복합 대입연산자(op=)

int i;
i = 0; // 대입연산자

final int MAX = 5; // 상수는 선언과 동시에 초기화
MAX = 10; // 에러, 상수에는 새로운 값 저장 못함

i = i + 3; // 대입연산자
i += 3; // 복합대입연산자, 위와 동일

 

 

 

📌 연산자 우선순위

- 단항 > 이항 (산술 > 비교 > 논리) > 삼항 > 대입

- 괄호가 우선순위 제일 높음

- 연산자 진행 방향 :  왼쪽 → 오른쪽 (단항, 대입 연산자만 오른쪽에서 왼쪽)

- &&, & (AND)은 ||, | (OR)보다 우선순위가 높다.

 

 

 

📌 instanceof

- 참조변수가 참조하는 인스턴스의 실제 타입을 체크하는데 사용

- 이항연산자이며 피연산자는 참조형 변수와 타입. (연산결과 true, false)

- 연산결과가 ture이면, 해당 타입으로 형변환 가능

car instanceof Car // true
superCar instanceof Car // true
car instanceof SuperCar // false
superCar instanceof SuperCar // true

 

 

 

📌 화살표(->) 연산자 (람다 연산자)

- 자바 8이상 람다식에서 익명함수 만들 때 사용

int max(int a, int b){
	return a > b ? a : b;
}

// 화살표 연산자 사용
(int a, int b) -> {
	return a > b ? a : b;
}

 

 

 

📌 switch 연산자

- 조건식의 결과가 int타입의 정수, 문자열만 가능

- 조건식의 계산결과와 일치하는 case문으로 이동 후 break문 만날 때까지 문장 수행

   break문 없으면 switch문 끝까지 진행

- 일치하는 case문 없으면 default문으로 이동(default문 생략 가능)

- case문의 값으로 변수 사용 불가(리터럴, 상수, 문자열 상수만 가능)

switch (조건식){
    case 값1 :
	// 조건식 결과 값1일 경우 수행될 문장
    	break;
    case 값2 :
    	break;
    default :
    	// 조건식의 결과와 일치하는 case문 없을 때 수행
}

 

 

 

 

[참고]

- 자바의 정석

- https://kils-log-of-develop.tistory.com/336#java13-switch-%EC%97%B0%EC%82%B0%EC%9E%90

- https://github.com/sombrero104/java-study/blob/master/w3.md

댓글