본문 바로가기
[JAVA]/[자바 기초]

[자바 기초] 연산자

by 북방바다코끼리표범 2023. 7. 25.

복습

https://shins99.tistory.com/4

 

[자바 기초] 상수와 형 변환

복습 https://shins99.tistory.com/3 상수와 형 변환 💡 학습 목표 1. 상수에 의미가 뭘까? 2. 리터럴이란? 상수(constant) 선언하기 상수는 변하지 않는 수 원주률 3.14, 1년 12개월 등 final 예약어를 사용하여

shins99.tistory.com


항과 연산자

  • 항(operand) : 연산에 사용되는 값
  • 연산자 (operator) : 항을 이용하여 연산하는 기호

대입 연산자 (assignment operator)

  • 변수에 다른 변수나 값을 대입하는 연산자
  • 이항 연산자 중 우선 순위가 가장 낮은 연산자들
  • 왼쪽 변수 = 오른쪽 변수 (변수 또는 식, 값)
package ch03;

public class MainTest1 {

	public static void main(String[] args) {
		
		char myA = 'A';
		char youerA = 'A';
		
		// 변수를 활용해서 연산 한다고 해서 실제 변수 안에 들어가 있는 값이 변경되지는 않음.
		System.out.println((int)myA);
		System.out.println((short)myA);
		System.out.println("-------------------------------");
		System.out.println(myA);
		System.out.println("-------------------------------");
		
		// 즉 값을 변경 하려면 대입 연산자를 활용할 수 있다.
		myA = 'B';
		System.out.println(myA);
		
		// 대입 연산자에 우선 순위는 가장 낮다.
		// 연산의 방향은 반드시 오른쪽에서 왼쪽으로 생각.
		
	} // end of main

} // end of class

부호 연산자

  • 단항 연산자
  • 변수의 부호를 유지 하거나 (+) 바꿈 (-)
  • 실제 변수의 부호를 변경 하려면 대입 연산자를 사용해야 함.

부호 연산자 예제

package ch03;

public class MainTest2 {

	public static void main(String[] args) {
		
		// 부호 연산자 (+. -)
		// 단항 연산자이다.
		int number = 10;
		// 부호 연산자는 메모리 공간에 접근해서 값을 변경하는 것은 아니다.
		System.out.println(-number);
		
		System.out.println(number);
		// 실제 값을 변경 하려면 대입 연산자 사용
		
		// 문제
		// 1. number 변수에 접근해서 현재 값 양수 10을 -10으로 변경하는 코드 작성할 것.
		// 단 R value 리터럴 값 대신 변수를 활용하시오
		number = -number;
		
		// 2. 그 결과를 출력 하시오.
		System.out.println(number);

	} // end of main

} // end of class

산술 연산자

사칙 연산자

연산자 기능 연산 예
+ 두 항을 더한다. 5 + 3
- 앞에 있는 항에서 뒤에 있는 항을 뺀다. 5 - 3
* 두 항을 곱한다. 5 * 3
/ 앞에 있는 항에서 뒤에 있는 항을 나누어 몫을 구한다. 5 / 3
% 앞에 있는 항에서 뒤에 있는 항을 나누어 나머지를 구한다. 5 % 3

산술 연산자 예제

package ch03;

public class MainTest3 {

	// 메인 함수 - 코드의 시작점 : (메인 쓰레드)
	public static void main(String[] args) {

		// 산술 연산자 연습
		int number1 = 5 + 3;
		int number2 = 5 - 3;
		int number3 = 5 * 3;
		int number4 = 5 / 4;
		int number5 = 5 % 3;
		
		System.out.println(number1);
		System.out.println(number2);
		System.out.println(number3);
		System.out.println(number4);
		System.out.println(number5);

		System.out.println("=========================");
		
		// 문제
		// 1. (12 + 3) / 3 값을 화면에 출력 하시오
		int num1 = (12 + 3) / 3;
		System.out.println(num1);
		
		// 2. (25 % 2) 값을 화면에 출력하시오.
		int num2 = (25 % 2);
		System.out.println(num2);
		
		double number6 = 5.0 / 4.0;
		System.out.println("----------------------");
		System.out.println(number6);
		
	} // end of main

} // end of class

복합 대입 연산자

대입 연산자와 다른 연산자가 함께 쓰임

연산자 기능 연산 예
+= 두 항의 값을 더해서 왼쪽 항에 대입한다. 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와 같음
 

복합 연산자 예제

package ch03;

public class MainTest4 {

	public static void main(String[] args) {

		// 복합 대입 연산자
		// 대입 연산자와 다른 연산자랑 함께 쓰인다.

		int num1 = 1;
		// num1 = num1 + 10;
		num1 += 10; // 위의 내용을 간소화 한 것.
		System.out.println(num1);

		System.out.println("-----------------------");

		int num2 = 1;
		num2 = 10;
		num2 += 100;
		System.out.println(num2);

		System.out.println("-----------------------");

		int num3 = 1;
		// num3 -= 10;
		// 반대로 풀어서 코드를 작성해주세요
		num3 = num3 - 10;
		System.out.println(num3);

		System.out.println("-----------------------");
		// num1 = num1 * 2;
		// 위 내용을 복합 대입 연산자로 변경 해주세요
		num1 *= 2;
		System.out.println(num1);

		System.out.println("-----------------------");

		// num2 = num2 / 2;
		// 위 내용을 복합 대입 연산자로 변경 해주세요
		num2 /= 2;
		System.out.println(num2);

		System.out.println("-----------------------");
		// num2 = num2 % 2;
		// 위 내용을 복합 대입 연산자로 변경 해주세요
		
		num2 %= 2;
		System.out.println(num2);

	} // end of main

} // end of class

출력결과
11
-----------------------
110
-----------------------
-9
-----------------------
22
-----------------------
55
-----------------------
1

증감, 감소 연산자

  • 단항 연산자
  • 변수의 값을 1 더하거나 1 뺄때 사용
  • 연산자가 항의 앞에 있는가 뒤에 있는가에 따라 연산 시점과 결과가 달라짐
  • 문장(statement)의 끝(;)을 기준으로 연산 시점을 생각해야 함

증감, 감소 연산자 예제

package ch03;

import java.util.Iterator;

public class MainTest5_1 {

	public static void main(String[] args) {

		// 증감 연산자 표시를 앞에다가 작성해서 연습해보자.
		// 감소 연산자 표시를 앞에다가 작성해서 연습해보자
		
		// ++, --
		
		int num1 = 10;
		int num2 = 0;
		
		// 문제 1
		// num1 에 더하기 1 하는 코드를 4가지 방식으로 작성해주세요
		// num1 = 11;
		// num1 = num1 + 1;
		// num1 += 1;
		// num1++;
		System.out.println(num1);
		
		// 문제 2
		// num2 에 빼기 1 하는 코드를 4가지 방식으로 작성해주세요
		// num2 = -1;
		// num2 = num2 - 1;
		// num2 -= 1;
		// num2--;
		System.out.println(num2);
					
	} // end of main

} // end of class
💡정리
증감, 감소 사용하는 방법 : 앞에 오거나 뒤에 오거나 사용할 수 있다. 
오직 1을 더하거나 감소 시킨다. 

단항 연산자

관계 연산자

  • 이항 연산자
  • 연산의 결과가 true(참), false(거짓) 으로 반환 됨. 비교 연산자 라고도 한다.
  • 조건문, 반복문의 조건식으로 많이 사용된다.
연산자 기능 연산 예
> 왼쪽 항이 크면 참, 아니면 거짓을 반환 num > 3;
< 왼쪽 항이 작으면 참, 아니면 거짓을 반환 num < 3;
>= 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓을 반환 num >= 3;
<= 왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓을 반환 num <= 3;
== 두 개 항의 값이 같으면 참, 아니면 거짓을 반환 num == 3;
!= 두 개 항이 다르면 참, 아니면 거짓을 반환 num != 3;

관계 연산자 예제

package ch03;

public class MainTest6 {

	public static void main(String[] args) {
		
		// 관계 연산자, 비교 연산자
		// 관찰의 결과가 참, 거짓을 판별할 때 사용한다.
		// 결과는 오직 true, false 로 반환된다.
		
		boolean value1 = 5 > 3;
		boolean value2 = 5 < 3;
		boolean value3 = 5 == 1;
		
		System.out.println(value1);
		System.out.println(value2);
		System.out.println(value3);
		
		boolean value4;
		int num1 = 10;
		int num2 = 50;
		
		value4 = num1 < num2;
		System.out.println(value4);
		
		value4 = num1 > num2;
		System.out.println(value4);
		
		// 문제 직접 만들어 보기
		
		// 값이 참인지 거짓인지 출력하시오
        
        boolean val;
        boolean b;
        int no = 1;
        int no1 = 7;
        
        val = no1 == no;
        System.out.println(val);
        
        val = no1 != no;
        System.out.println(val);
        
       
	} // end of main

} // main of class

논리 연산자

  • 관계 연산자와 혼합하여 많이 사용 됨
  • 연산의 결과가 true(참), false(거짓) 으로 반환 됨. 비교 연산자 라고도 한다.
연산자 기능 연산 예
&& (논리 곱) 두 항이 모두 참 이면 결과가 참, 아니면 거짓 boolean a = (1<3) %% (3>1) 
|| (논리 합) 두 항 중 하나만 참이면 결과가 참, 둘 다 거짓이면 거짓 boolean a = (1<3) || (3>1)
! (부정) 단항 연산자. 참인 경우 거짓으로 거짓은 참으로 바꾼다 boolean a = !(3>1)

논리 연산에서 모든 항이 실행되지 않는 경우

(short circuit evaluation)

● 논리 곱(&&)은 두 항의 결과가 모두 true일 때만 결과가 true

    - 앞의 항의 결과가 false이면 뒤 항의 결과를 평가하지 않음

● 논리 합(||)은 두 항의 결과가 모두 false일 때만 결과가 false

    - 앞의 항의 결과가 true이면 뒤 항의 결과를 평가하지 않음

논리 연산자 예제

package ch03;

public class MainTest7 {

	public static void main(String[] args) {
		
		
		// 논리 연산자 (&&, ||) 엠퍼센트, 버티컬 바
		// 관계 연산자와 혼합하여 많이 사용한다ㅏ.
		// 연산의 결과는 true, false 반환
		
		int num1 = 10;
		int num2 = 20;
		
		// 논리 곱(&&)
		// 논리 곱은 모든 결과 값이 참이어야 참. true
		// 하나라도 거짓이 나오면 무조건 거짓. false
		
		boolean flag1 = (num1 > 0) && (num2 > 0);
		System.out.println(flag1);
		
		boolean flag2 = (num1 > 0) && (num2 < 0);
		System.out.println(flag2);
		
		boolean flag3 = (num1 < 0) && (num2 < 0);
		System.out.println(flag3);
		
		// 결론
		// 논리 곱에서 하나라도 거짓이 있으면 연산의 결과는 false 이다.
		
		System.out.println("------------------------------");
		
		// 논리 합 (||)
		// 논리합에서는 하나라도 참이 있으면 연산의 결과는 true
		flag1 = (num1 < 0) || (num2 > 0);
		System.out.println(flag1); // true
		
		// flag2 = true || true	 = true 
		// flag3 = true || false = true
		// flag4 = false || false = false
		
	} // end of main
	
} // end of class

조건 연산자

● 삼항 연산자

● 조건식의 결과가 true(참)인 경우와 false(거짓)인 경우에 따라 다른 결과가 수행됨

● if (조건문)을 간단히 표현할 때 사용 할 수 있음

연산자 기능 연산 예
조건식 ? 결과1 : 결과2; 조건식이 참이면 결과1, 조건식이 거짓이면 결과 2가 선택 int num = (5>3) ? 10 : 20;

 

연산자 우선순위

● 가장 높은 순위 연산자는 () [] .

● 가장 낮은 순위 연산자 =

연산자 우선순위

 

연산자 연습문제

 

package ch03;

public class OperatorEx1 {

	public static void main(String[] args) {

		// 1
		// 두 수를 덧셈 연산 하여 result1 변수에 담고
		// 결과값 30.5를 출력 하세요.
		int i = 10;
		double d = 20.5;

		double result1 = i + d;
		System.out.println(result1);

		// 2
		// result1 변수를 정수형으로 강제 형 변환 해서 출력하세요
		System.out.println((int) result1);

		// 3
		// i 변수의 값을 -1을 뺀 후 출력하세요
		// 단, 단항 연산자 사용
		System.out.println(--i);

		// 4
		// d 변수에 값을 -20.5로 출력 하세요
		// 단, d 변수에 값을 변경하지 마세요
		System.out.println(-d)

		// 5
		// 변수 i와 d, 관계 연산자를 사용해서 result2 변수를
		// 선언하고 변수에 true 값이 담기도록 식을 만들고
		// 출력하세요

		int num1 = 10;
		int num2 = 30;
		boolean result2 = num1 < num2;
        // boolean result2 = 10 <30;
		System.out.println(result2);

		// 6
		// 변수 result3을 선언하고
		// num1과 num2 변수가 숫자 50보다 큰지 논리 연산자를 사용해서 결과를 담고 출력하세요
		boolean result3 = (num1 > 50) && (num2 > 50);
		System.out.println(result3);

		result3 = (num1 > 50) || (num2 > 50);
		System.out.println(result3);

		// 7
		// num1과 num2 값 중 큰 수를 삼항 연산자를 사용해서
		// max 변수에 값을 담고 출력해주세요
		// 단, 선언과 초기화를 동시에 해주세요

		String max = (num1 < num2) ? "true" : "false";
		System.out.println(num1 + " 이 " + num2 + " 보다 값이 작은게 맞으므로 " + max);

	} // end of main

} // end of class