본문 바로가기
Java

Java 복습_4

by 지민재 2022. 6. 1.

연산자

항과 연산자

  • 연산에 사용하는 기호를 연산자(operator)라고 합니다.
  • 연산에 사용하는 값을 (operand)라고 합니다.
  • 연산자는 항의 개수에 따라 단항연산자, 이항연산자, 삼항연산자로 나눌 수 있습니다.

연산자설명연산 예

단항 연산자 항이 한 개인 연산자 ++num
이항 연산자 항이 두 개인 연산자 num1 + num2;
삼항 연산자 항이 세 개인 연산자 (5 > 3)?1:0;

대입 연산자

  • 변수에 값을 대입하는 연산자입니다.
  • 대입연산자는 이항 연산자 중 우선순위가 가장 낮은 연산자입니다.
  • 하나의 문장에 여러 연산자가 있을 때 모든 연산을 다 끝낸 후 마지막에 연산 결과를 변수에 대입하는 것입니다.
왼쪽 변수 = 오른쪽 변수(또는 식)

int age = 25;  // 나의를 의미하는 age 변수에 값 24를 대입함
  • 오른쪽 변수 값이나 식의 연산 결과를 왼쪽 변수에 대입합니다.

부호 연산자

  • 부호연산자는 +, - 두 가지가 있습니다.
  • 더하기, 빼기 연산에 쓰는 이항 연산자이면서 부호를 나타내는 단항 연산자로 사용합니다.

연산자기능연산 예

+ 변수나 상수 값을 양수로 만듭니다. +3
- 변수나 상수 값을 음수로 만듭니다. -3
int num = 20;

System.out.println(+num); // 값 20이 그대로 출력됨
System.out.println(-num); // 값 20에 -가 붙어서 -20이 출력되지만 num 값이 실제로 바뀌지는 않음.
System.out.println(num); // 값 10이 그대로 출력됨

num = -num; // num 값을 음수로 바꿔서 다시 num으로 대입함
System.out.println(num); // 값 -20이 출력됨

산술 연산자

  • 사칙 연산에 사용하는 연산자가 산술 연산자 입니다.

연산자기능연산 예

+ 두 항을 더합니다. 5 + 3
- 앞에 있는 항에서 뒤에 있는 항을 뺍니다. 5 - 3
* 두 항을 곱합니다. 5 * 3
/ 앞에 있는 항에서 뒤에 있는 항을 나누어 몫을 구합니다. 5 / 3
% 앞에 있는 항에서 뒤에 있는 항을 나누어 나머지는 구합니다. 5 % 3

산술 연산자의 우선순위

  • 산술 연산자의 우선순위는 일반 수학의 산술연산과 같습니다.
package selfstudy;

public class Tstory11 {
	public static void main(String[] args) {
		int math = 95;
		int eng = 85;
		
		int total = math + eng; // 총점 구하기
		System.out.println(total);
		
		double avg = total / 2.0; // 평균 구하기
		System.out.println(avg);
	}
}

실행결과
180
90.0

증가감소 연산자

  • 증가,감소 연산자는 단항 연산자 입니다.
  • 연산자 앞이나 뒤에 사용하며 값을 1만큼 늘리거나 1만큼 줄입니다.

연산자기능연산 예

++ 항의 값에 1을 더합니다. val = ++num; // 먼저 num에 값이 1 증가한 후 val변수에 대입
val = num++; // val 변수에 기존 num 값을 먼저 대입한 후 값 1 증가
-- 항의 값에서 1을 뺍니다. val = --num; // 먼저 num값이 1 감소한 후 val 변수에 대입
val = num--; // var 변수에 기존 num 값을 먼저 대입한 후 num값 1 감소
int val = 15;
int num = ++val; // num에 16이 대입됨
int value = 10;
int num = value++; // num에 10이 대입됨

관계 연산자

  • 항이 두 개인 이행 연산자 입니다.
  • 두 개의 항 중 어느 것이 더 큰지, 작은지, 같은지등의 여부를 검사합니다.
  • 관계 연산자의 결과 값은 참(true) 또는 거짓(false)로 반환됩니다.

연산자기능연산 예

> 왼쪽 항이 크면 참을, 아니면 거짓을 반환합니다. num > 3;
< 왼쪽 항이 작으면 참을, 아니면 거짓을 반환합니다. num < 3;
>= 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓을 반환합니다. num >= 3;
<= 왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓을 반환합니다. num <= 3;
== 두 개의 항의 값이 같으면 참, 아니면 거짓을 반환합니다. num == 3;
!= 두 개의 항이 다르면 참, 아니면 거짓을 반환합니다. num != 3;
int age = 25;
boolean val = (age > 20);
System.out.println(val); // true

논리 연산자

  • 두 명제가 모두 참이면 논리 곱은 참이고, 두 명제 중 하나만 참이면 논리 합은 참입니다.
  • 참의 부정은 거짓, 거짓의 부정은 참입니다.
  • 이러한 논리 연산을 프로그래밍 언어로 구현한 연산자가 논리 연산자입니다.
  • 논리 연산자는 주로 관계연산자와 함께 사용합니다.
  • 관계연산자의 우선순위가 논리연산자보다 높으므로, 관계연산자의 결과 값을 기반으로 논리 연산자의 결과 값을 계산합니다.

연산자기능연산 예

&&
(논리 곱)
두 항이 모두 참인 경우에만 결과 값이 참입니다. 그렇지 않은 경우는 거짓입니다. boolean val = (5 > 3) && (5 > 2);
||
(논리 합)
두 항 중 하나의 항만 참이면 결과 값은 참입니다. 두 항이 모두 거짓이면 결과 값은 거짓입니다. boolean val = (5 > 3) || (5 > 2);
!
(부정)
단일 연산자입니다. 참인 경우는 거짓으로 바꾸거, 거짓인 경우는 참으로 바꿉니다. boolean val = !(5 > 3);
int num1 = 20;
int num2 = 30;

boolean flag = (num1 > 0) && (num2 > 0);
System.out.println(flag); // flag는 참

flag = (num1 < 0) && (num2 > 0);
System.out.println(flag); // flag는 거짓 

flag = (num1 < 0) || (num2 > 0);
System.out.println(flag); // flag는 참

논리연산에서 모든 항이 실행되지 않는 경우 - 단락회로 평가

package selfstudy;

public class Tstory12 {
	public static void main(String[] args) {
		int num1 = 10;
		int i = 2;
		
		// 논리 곱에서 앞 항의 결과 값이 거짓이므로 ((i = i + 2) < 10); 문장은 실행되지 않는다.
		boolean value = ((num1 = num1 + 10) < 10) && ((i = i + 2) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);
		
		// 논리 합에서 앞 항의 결과 값이 참이므로 ((i = i + 2) < 10);은 실행되지 않음
		value = ((num1 = num1 + 10) > 10) || ((i = i + 2) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);
	}
}

실행결과
false
20
2
true
30
2

복합 대입 연산자

  • 복합 대입 연산자란 대입 연산자의 다른 연산자를 조합해 하나의 연산자처럼 사용하는 연산자입니다.
  • 산술연산자, 비트연산자와 함게 사용하여 코드를 간결하게 표현할 수 있습니다.
  • 대입 연산자는 우선순위가 가장 낮은 연산자입니다. 연산이 모두 끝난 후 마지막으로 결과 같을 변수에 대입합니다.
  • 복합 대입 연산자 역시 연산한 결과 값을 변수에 대입합니다.
  • 복합 대입 연산자는 특히 산술 연산자와 함께 자주 사용됩니다.

연산자기능연산 예

+= 두 항의 값을 더해서 왼족 항에 대입합니다. num1 += 2;
num1 = num1 + 2;와 같음
-= 왼쪽 항에서 오른족 항을 빼서 그 값을 왼쪽 항에 대입합니다. num1 -= 2;
num1 = num1 - 2;와 같음
*= 두 항의 값을 곱해서 왼쪽 항에 대입합니다. num1 *= 2;
num1 = num1 * 2;와 같음
/= 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입합니다. num1 /= 2;
num1 = num1 / 2;와 같음
%= 왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입합니다. num1 %= 2;
num1 = num1 % 2;와 같음

복합 대입 연산자를 사용하면 변수를 반복적으로 사용하지 않아도 되는 장점이 있습니다.

조건 연산자

  • 조건 연산자는 연산에 필요한 항의 개수가 세 개입니다. 그래서 삼항 연산자라고 합니다.

연산자기능연산 예

조건식 ? 결과1 : 결과2; 조건식이 참이면 결과1, 조건식이 거짓이면 결과2가 선택됩니다. int num = (5 > 3)?10:20

 

package selfstudy;

public class Tstory13 {
	public static void main(String[] args) {
		int myage = 25;
		int brotherage = 27;
		
		char ch; 
		ch = (myage > brotherage)? 'T':'F';
		
		System.out.println(ch);
	}
}

실행결과
F

연산자 우선순위

  • 연산자에는 우선순위가 있습니다.
  • 우선순위에 따라 컴퓨터가 연산을 수행하고 그 결과가 달라집니다.
    • 단항 연산자가 가장 높고 이항, 삼항 연산자 순서입니ㅏㄷ.
    • 대입 연산자의 우선순위가 가장 낮습니다.
    • 산술, 관계, 논리, 대입 연산자 순서로 우선순위를 가지며, ()의 우선순위가 가능 높습니다.

우선순위형연산자연산방향

1 일차식 (), [] ---->
2 단항 ! ++ -- + - <----
3 산술 % / ---->
4 산술 + - ---->
5 관계 < > <= >= ---->
6 관계 == != ---->
7 논리 곱 && ---->
8 논리 합 (|| ---->
9 조건 ?: ---->
10 대입 = += -= *= %= /= <----

'Java' 카테고리의 다른 글

Java 복습_6  (0) 2022.06.18
Java 복습_5  (0) 2022.06.09
Java 복습_3  (0) 2022.05.31
Java 복습_2  (0) 2022.05.30
Java 복습_1  (0) 2022.05.29

댓글