Java - 연산자

kojam9041·2022년 3월 16일
0

KH정보교육원 - JAVA

목록 보기
5/12

연산자의 종류

* 최우선 연산자(직접접근연산자) : 괄호() 점. 중괄호{}
* 단항 연산자 : 느낌표(!), 형변환연산자(자료형), 증가연산자(++), 감소연산자(--)
* 이항 연산자
1. 산술연산자 
- 곱하기(*), 나누기(몫, /), 나누기(나머지, %) 
- 더하기(+), 빼기(-) 
2. 비교연산자
- 크다(>), 작다(<), 크거나 같다(>=), 작거나 같다(<=)
- 같다(==), 다르다(!=)
3. 논리연산자
- 그리고(&&), 또는(||)
- 삼항 연산자 : (조건식)? 참일때의 사용값 : 거짓일때의 사용값
- 대입연산자
        1. 순수 대입 : =
        2. 산술 대입 : +=, -=, *=, /=, %=
- 나열 연산자 : 쉼표(,)

산술연산자

 * 이항연산자로, 연산방법과 우선순위가 기존의 수학에서의 사칙연산과 같다
 * 종류 : +, -, *, /, %(Modular)

package com.kh.operator;
public class A_Arithmetic {

	public void method1() {
		int num1 = 10;
		int num2 = 3;
		System.out.println("num1 + num2 = " + num1 + num2); // 103
		// +라는 기호는 연산의 기능과 출력의 기능을 둘다 가지고 있다.
		// 앞과 뒤가 우선순위가 동일한 +이기 때문에 연산의 순서가 왼쪽에서 오른쪽으로 진행된다.
		System.out.println("num1 + num2 = " + (num1 + num2));
		// 최우선순위인 괄호로 묶어서 문자열과 int값을 따로 출력한다.
		
		System.out.println("num1 - num2 = " + num1 - num2);
		// [오류메세지]
		// The operator - is undefined for the argument type(s) String, int
		// 뺄셈의 경우, 덧셈과 우선순위가 동일하다.
		// 쌍따옴표와 +num1까지 String으로 취급하였고, String - int가 되어 오류가 발생한다.
        
		System.out.println("num1 - num2 = " + (num1 - num2));
		// =>마찬가지로 최우선순위인 괄호로 묶어서 문자열과 int값을 따로 출력한다.
		
		int result = num1 + num2;
		System.out.println("result = " + result);
		// Variable을 통해서는 우선순위에 차등없이 괄호없이 사용해도 된다.
		
		// *,/,%의 우선순위가 +,-보다 높기 때문에 괄호를 사용하지 않아도 된다.
		// 다만, 괄호로 묶는 것을 권장한다.(Source Code의 가독성이 좋아지기 때문에)
		System.out.println("num1 * num2 = " + (num1*num2)); // 30
		System.out.println("num1 / num2 = " + (num1/num2)); // 3
		System.out.println("num1 % num2 = " + (num1%num2)); // 1
		// 본래 3.33333... 이나 int의 연산결과라 int로 출력된다.
        
		System.out.println(10 / 0);
		// [오류메세지]
		// Exception in thread "main"
		// java.lang.ArithmeticException: / by zero
		// 0으로는 숫자의 몫을 구하지 못한다.
		System.out.println(10 % 0);
		// [오류메세지]
		// Exception in thread "main"
		// java.lang.ArithmeticException: / by zero
		// 0으로는 숫자의 나머지를 구하지 못한다.
		
        //실수의 경우
		double a = 35; // 35.0
		double b = 10; // 10.0
		
		System.out.println("a + b= "+(a+b));
		System.out.println("a - b= "+(a-b));
		System.out.println("a * b= "+(a*b));
		System.out.println("a / b= "+(a/b));
		System.out.println("a % b= "+(a%b));
	}
}

증감연산자

* 단항연산자로, 한번에 값을 1씩 증가시키거나 감소시키는 연산자이다.
* 종류 : ++(전위, 후위 증가), --(전위, 후위 감소)
* 연산자의 위치에 따라, 연산이 언제 될지 결정한다.
* (증감연산자)값 : 연산이 먼저 되고, 값을 처리한다 => 선증감 후처리
* 값(증감연산자) : 값을 먼저 처리하고, 연산을 한다 => 선처리 후증감

package com.kh.operator;
public class B_InDecrease {

	public void method1() {
		int num = 10;
		System.out.println("num : "+num);
		num++;
		System.out.println("변경된 num : " +num);
		// num Variable에 들은 값을 1 증가시킨다.
		// 즉, num = num + 1; 과 같은 의미이다.
		num--;
		// num Variable에 들은 값을 1 감소시킨다.
		// 즉, num = num - 1; 과 같은 의미이다.
		System.out.println("변경된 num : " +num);
	}

	public void method2() {
		// 전위연산
		int a = 10;
		int b = ++a; 
		// 선증감 : ++a(11)
		// 후처리 : int b=++a(11)
		// ++a를 먼저, 이후 대입
		System.out.println("a : "+a+", b : "+ b);
		
		// 후위연산
		int c = 10;
		int d = c++; 
		// 선처리 = int d=c(10)
		// 후증감 : c++(11)
		// 대입 먼저, 이후 c++
		System.out.println("c : "+c+", d : "+ d);
	}

	public void method3() {
		// 증감연산자는 단항연산자라 값 한개에만 적용 된다.
		// 즉, 증감연산자가 붙은 num(1,2,3,4)에만 증감이 적용된다.
		// ++후위연산
		int num1 = 20;
		int result1 = num1++ * 3; 
		// result1 = 60, num1 = 21
		System.out.println("num1 : " + num1);
		System.out.println("result1 : " + result1);
		
		// ++전위연산
		int num2 = 20;
		int result2 = ++num2 * 3;
		// num2 = 21, result2 = 63
		System.out.println("num2 : " + num2);
		System.out.println("result2 : "+result2);
		
		// --전위연산
		int num3 = 10;
		int result3 = --num3 * 5;
		// num3 = 9, result3 = 45 
		System.out.println("num3 : "+ num3);
		System.out.println("result3 : "+result3);
		
		// --후위연산
		int num4 = 10;
		int result4 = num4--*5;
		// result = 50, num4 = 9
		System.out.println("num4 : "+num4);
		System.out.println("result4 : "+result4);
	}
}

복합대입연산자

* 산술연산자와 대입연산자를 함께 사용하는 연산자
* 종류 : +=, -=, *=, /=, %=

package com.kh.operator;
public class C_Compound {

	public void method1() {
		// 산술연산자를 이용하여
		// 3을 증가시키기
		int num = 12;
		System.out.println("현재 num : " + num);
		num = num + 3;
		System.out.println("증가된 num : " + num);
		
		// 복합대입연산자를 이용하여 
		// 3을 증가시키기
		num += 3;
		System.out.println("또 증가된 num : "+num);
		
		// 5를 감소시키기
		num -= 5;
		System.out.println("감소된 num : "+num);
		
		// 6배 증가시키기
		num *= 6;
		System.out.println("배가된 num : "+num);
		
		// 2배 나누어서 몫을 구하기
		num /= 2;
		System.out.println("나눠진 몫 num : "+num);
		
		// 4배 나누어서 나머지 구하기
		num %= 4; 
		System.out.println("나눠진 나머지 num : " + num);
		
		// +=의 경우, 문자열의 접합도 가능함 
		String str = "Hello";
		str += "World";
		//str = str + "World";
		System.out.println(str);
		
	}
}

논리부정 연산자

* true 또는 false라는 논리값을 반전시켜주는 연산자
* 논리부정연산자는 이처럼 논리값에 대한 연산을 적용한다.
* 종류 : !(느낌표)

package com.kh.operator;
public class D_LogicalNegation {
	
	public void method1() {
		System.out.println("True의 부정 : " + !true);
		System.out.println("False의 부정 : "+ !false);
		
		boolean b1 = true;
		boolean b2 = !b1;
		System.out.println("b1의 부정 : "+b1);
		System.out.println("b2의 부정 : "+b2);
	}
}

비교연산자(관계연산자)

* 두개의 값을 비교하는 이항 연산자
* 비교 연산 결과가 참일 경우 true, 거짓일 경우 false를 반환한다.
* 특정 조건을 제시하는 조건문에 사용된다.
* 종류
1. 크고 작음을 비교(숫자, 문자) : >, <, >=, <=
2. 같음을 비교(숫자, 문자, 주소값, 논리값) : ==, !=

package com.kh.operator;
import java.util.Scanner;
public class E_Comparison {

	public void method1() {
		
		//대소비교 연산자
		int a = 10;
		int b = 25;
		System.out.println("b가 a보다 큽니까? " + (a < b));
		System.out.println("a가 b보다 큽니까? " + (a > b));
		// +가 >보다 우선순위가 높으나, 문자열 > 숫자의 경우라서 오류가 뜬다.
		// 따라서, 괄호로 묶어서 우선순위를 차등하여 더 높여주어야 한다.
		// 괄호로 묶으면 (a > b)를 먼저 수행하고,이후 왼쪽에서 오른쪽으로 출력을 진행한다.
		System.out.println("a가 b보다 작거나 같습니까? " + (a <= b));
		System.out.println("a가 b보다 크거나 같습니까? " + (a >= b));
	
		//동등비교 연산자
		boolean result1 = (a == b);
		System.out.println("result1 : " + result1);
		boolean result2 = (a != b);
		System.out.println("result2 : " + result2);

		//산술연산 + 비교연산
		boolean result3 = 3 + 5 < 1;
		// 우선순위가 산술연산, 비교연산, 대입연산 순이라
		// 3+5, <1, = 순서로 실행된다.
		System.out.println("result3 : " + result3);

		/*
		 * 짝수, 홀수
		 * 짝수 : 2로 나누었을 때, 나누어 떨어지는 수(나머지가 0)
		 * 홀수 : 2로 나누었을 때, 나누어 떨어지지 않는 수(나머지가 1)
		 */
		// a = 10;, b = 25;
		System.out.println("a가 짝수입니까? " + ((a % 2)==0) );
		System.out.println("a가 홀수입니까? " + ((a % 2)==1) );
		System.out.println("b가 짝수입니까? " + ((b % 2)==0) );
		System.out.println("b가 홀수입니까? " + ((b % 2)==1) );
		System.out.println("b가 짝수가 아닙니까? " + ((b % 2)!=0) );
	}

	public void method2() {
		
		// 1. 사용자로부터 값(정수)을 입력받는다.
		// 2. 해당 값이 양수입니까?
		// 3. 해당 값이 짝수입니까?
		
		Scanner sc = new Scanner(System.in);
		System.out.print("정수의 값 :");
		int iNum = sc.nextInt();
		sc.nextLine();
	    System.out.println("해당 값이 양수입니까? : " + (iNum > 0) );
	    System.out.println("해당 값이 짝수입니까? : " + ((iNum % 2) == 0) );
		
	}
}

논리연산자

* 이항연산자로, 두개의 논리값을 연산하는 연산자
* 종류 : &&(AND, 둘다 참일때 true), ||(OR연산자, 둘중 하나만 참이어도 true)

package com.kh.operator;
import java.util.Scanner;
public class F_Logical {
	
	public void method1() {
		// 비교연산자 + 논리연산자
        Scanner sc = new Scanner(System.in);
		System.out.print("정수 값 : ");
        int num = sc.nextInt();
        sc.nextLine();
		// 사용자가 입력한 정수 값이 양수 이면서 짝수인지 확인
        // && : 그리고, ~(이)면서, ~(이)고
		boolean result = ((num > 0) && (num % 2 == 0));
		System.out.println("정수값이 양수이면서 짝수인가 ? "+result);
	}

	public void method2() {
    	Scanner sc = new Scanner(System.in);
        System.out.print("정수 값 : ");
		int num = sc.nextInt();
        sc.nextLine();
		// 사용자가 입력한 정수값이 1 이상 100이하의 수인지 확인하기
		// 1이상 이면서 100이하 ( 1 <= num <= 100)
		boolean result = ((1 <= num  && num <= 100));
		System.out.println("정수값이 1이상 100이하인가? "+result);
	}

	public void method3() {
		// || : 또는 ,~(이)거나
        Scanner sc = new Scanner(System.in);
		System.out.print("계속하시려면 y 또는 Y를 입력하시오 : ");
		char ch =sc.nextLine().charAt(0);
		// 사용자가 입력한 값이 'y' 이거나(또는) 'Y'인지 확인하기
		boolean result = ((ch == 'y') ||(ch =='Y'));
		System.out.println("사용자가 입력한 값이 y 또는 Y인가? " + result);
	}

	public void method4() {
		/*
		 * && : 둘 다 True여야 True이다
		 * || : 둘 중 하나만 True여도 True이다(둘 다 False여야 False)
		 */
		
		int num1 = 10;
		boolean result1 = false && (num1 > 0); // false
		// dead code(오류가 아닌 필요없는 코드라는 경고의 뜻이다.) : num1 > 0
		// 이미 앞에 false가 떠서 뒤에 무슨 코드이든지 false가 나온다.
		System.out.println("result1 : "+result1);
		
		boolean result2 = true || (num1 > 0); // true
		// 마찬가지로 dead code : num1 > 0
		// 어차피 앞이 true라 뒤가 뭐가 나오든지 true라는 결과가 나온다.
		System.out.println("result2 : "+result2);
		
	}
}

삼항연산자

* 세 개의 항목(피연산자)를 가지고 연산하는 연산자
* 표현법 : (조건식)? 참일때의 값, 거짓일때의 값
* 조건식의 결과값은 true, false만 나온다.
* 논리부정연산자, 비교연산자, 논리연산자를 조건식에 쓸 수 있다.

package com.kh.operator;
import java.util.Scanner;

public class G_Triple {

	public void method1() {
		Scanner sc = new Scanner(System.in);
		System.out.print("정수 값 : ");
		int num = sc.nextInt();
		sc.nextLine();
		// 사용자가 입력한 정수값이 양수인지 아닌지 판별 후, 결과를 출력하기
		String result = (num > 0)? "양수입니다." : "양수가 아닙니다.";
		// 결과 값이 String이 나오기 때문에 Variable을 String으로 하였다.
		System.out.println(num+"은 "+result );
	}

	public void method2() {
    	Scanner sc = new Scanner(System.in);
		System.out.print("정수 값 : ");
		int num = sc.nextInt();
		sc.nextLine();
		// 사용자가 입력한 정수값이 짝수인지 홀수인지를 판별 후, 결과를 출력하기
		// 짝수일 경우
		// String result = (num % 2 == 0)? "짝수입니다." : "홀수입니다.";
        // 홀수일 경우
		String result = (num % 2 == 1)? "홀수입니다." : "짝수입니다.";
		System.out.printf("%d은  %s", num , result);
	}

	public void method3() {
		Scanner sc = new Scanner(System.in);
		System.out.print("영문자 : ");
		char ch = sc.nextLine().charAt(0);
        // 사용자로부터 영문자 하나를 입력받아 대문자인지 아닌지 판별 후 출력하기
		// => 아스키코드 'A' = 65, 'a' = 97
		//자동형변환이라 (int)안써줘도 된다.

		String result = (65 <= (int)ch && (int)ch <=90 )? 
		"대문자입니다" : "대문자가 아닙니다."; 
		String result = (('A'<=ch) && (ch <='Z'))? 
		"대문자입니다." : "대문자가 아닙니다.";
		System.out.printf("%c은 %s",ch,result);
	}

	public void method4() {
		/*
		 * 기존의 method1의 내용을 보완한다.
		 * 사용자가 입력한 정수 값이 (음수, 0, 양수)인지를 판별한 후
		 * 결과를 출력해보겠다.
		 */
		
		Scanner sc =new Scanner(System.in);
		System.out.print("정수 값 : ");
		int num = sc.nextInt();
		sc.nextLine();
		String result = (num > 0)? "양수입니다" 
				: (num == 0)? "0입니다" : "음수입니다.";
		System.out.printf("%s",result);
        // 조건식을 중첩하여 사용할 수 있다.
	}
}

0개의 댓글