자바

JAVA STEP 9. Operator

IT의 큰손 2023. 2. 6. 18:15
728x90

연산자(Operator)

  • 수학 연산자 > 프로그래밍 연산자
  • 피연산자를 대상으로 미리 정해진 연산(행동)을 한 후에, 연산(행동)의 결과를 반환하는 요소
  • 주로 기호를 많이 사용 + 영단어도 많이 사용

1. 문장, Statement

  • 1개 이상의 표현식이 모여서 문장을 만든다.
  • int sum = 10 + 20;

2. 표현식, Expression

  • 문장을 구성하는 최소 단위
  • int sum
  • 10 + 20
  • sum = 30

3. 연산자, Operator

  • +
  • =

4. 피연산자, Operand

  • +: 10, 20
  • = : sum, 30

5. 연산자 우선 순위

  • 하나의 문장에 속해있는 모든 연산들은, 누가 먼저 실행해야 하는지 순서가 정해져있다.
  • 1 + 2 * 3 = 7

6. 연산자 연산방향

  • 하나의 문장에 속해있는 연산자들 중 우선순위가 동일하면 어느 방향(좌,우)으로 실행해야 하는지 순서가 정해져있다.
  • - 1 + 2 + 3 = 6

7. 연산의 종류

7-1. 행동(목적)

7-1.a 산술 연산자

  • +, -, *, /, %(mod, 나머지)
  • 2항 연산자
  • 피연산자를 숫자를 가진다. (정수, 실수)
  • ex)
    • int a = 10;
    • int b = 3;
    •  
		System.out.printf("%d + %d = %d\n", a, b, a+b);
		System.out.printf("%d - %d = %d\n", a, b, a-b);
		System.out.printf("%d * %d = %d\n", a, b, a*b);
		System.out.printf("%d / %d = %d\n", a, b, a/b); // 몫 
		System.out.printf("%d %% %d = %d\n", a, b, a%b); //나머지,% Escape 는 %%라고 입력해야함.
  • 모든 산술 연산자의 결과값 자료형은 두 피연산자의 자료형중에서 더 크기가 큰 자료형으로 반환된다.
  • ex)
  •  
//int / int = int
		System.out.println(10/3); //- 정수/정수		= 3
		
		//double / int = double
		System.out.println(10.0/3); //- 실수/정수		= 3.333333333
		
		// int / double = double
		System.out.println(10/3.0); //- 정수/실수		= 3.333333333
		
		// double / double = double
		System.out.println(10.0/3.0); //- 실수/실수	= 3.333333333 
		
		System.out.println();
		
		int e = 1000000000; //10억 
		int f = 2000000000; //20억
		
		//int + int = int(overflow 발생!)
		System.out.println(e+f); //30억이 나와야하는데 에러가 나오지 않고 -1294967296 이라는 값이 나옴.
		
		//(long) int + int
		System.out.println((long)e + f); //e를 long으로 바꾸어 주었기 때문에 long이 되서 정상적으로 출력 
		
		e = 300000;
		f = 500000;
		
		System.out.println(e*f);
		System.out.println((long)e*f);

7-1.b 비교 연산자

  • >, >=, <, <=, ==(같다, equals), !=(같지않다. not equals)
  • 2항 연산자
  • 피연산자들의 우위(동등) 비교를 하는 연산자
  • 피연산자는 숫자형을 가진다.
  • 연산의 결과가 반드시 boolean이다. (true, false)
  • ex)
  •  
		int a = 10;
		int b = 3;
		
		System.out.println(a > b);
		System.out.println(a >= b);
		System.out.println(a < b);
		System.out.println(a <= b);
		System.out.println(a == b);
		System.out.println(a != b);
        
        boolean b1 = true;
		boolean b2 = true;
		
		System.out.println(b1 == b2);
		System.out.println(b1 != b2);
		
		String s1 = "홍길동";
		String s2 = "홍길동";
		String s3 = "아무개";
		String s4 = "홍";
		
		s4 = s4 + "길동"; //"홍" + "길동"
		
		System.out.println(s1==s2); //true
		System.out.println(s1==s3); //false
		System.out.println(s4);
		System.out.println(s1==s4); //false
		
		//*** 문자열의 비교는 ==, != 연산자를 사용하면 절대 안된다.
		//*** 문자열의 비교는 equals() 메소드를 사용한다.
		
		System.out.println();
		System.out.println(s1.equals(s2)); // s1 == s2
		System.out.println(s1.equals(s4)); // s1 == s4
		System.out.println();

7-1.c 논리 연산자

  • &&(and), ||(or), !(not)
  • &(and), |(or), ^(xor, exclusive or, 베타적 논리합) : 비트 연산할 때 사용.
  • 2항 연산자(&&, ||)
  • 1항 연산자(!)
  • 피연산자의 자료형이 boolean이다.
  • 연산의 결과는 boolean이다. (true, false)
  • 논리곱 (A && B = ?)
    • T && T = T
    • T && F = F
    • F && T = F
    • F && F = F
  • 논리합 (A || B = ?)
    • T || T = T
    • T || F = T 
    • F || T = T
    • F || F = F
  • ex)
  •  
				System.out.println(true && true);
				System.out.println(false || false);
			
		//! : boolean을 반대로 뒤집기
				System.out.println(!true); //false
				System.out.println(!false);//true
		
		//비트 연산자(비트 단위의 연산)
				System.out.println(a&b); //2
		
		//베타적 논리합
		//- 좌우가 서로 다른 true 
		//- 암호화
				System.out.println(true ^ true); //false
				System.out.println(true ^ false); //true
				System.out.println(false ^ true); //true
				System.out.println(false ^ false); //false
        
        //ex2) 사용자 나이 입력 > 성인(19세 이상) O,X
		//					19세 이상 ~ 60세 미만
		
				System.out.println("나이를 입력하세요 : ");
				
				String input2 = reader.readLine();
				
				int age2 = Integer.parseInt(input2);
				
				System.out.println(age2 >= 19);
				
				//19 <= age < 60
				//- 연산자 우선 순위
				System.out.println((19 <= age2) && (age2 < 60));
				System.out.println();

7-1.d 대입연산자

  • =  
  • +=, -=, *=, /=, %=  (복합 대입 연산자)
  • LValue(변수) = RValue(변수, 상수)
  • LValue와 RValue의 자료형은 동일해야 한다. > 형변환
  • 대입 연산자의 연산자 순위는 가장 낮다.
  • ex)
  •  
int sum = 1+2*3;
		System.out.println(sum);
		
		//복합 연산자
		int n = 10;
		
		//요구사항] n에 1을 더하시오. > n의 값에 1을 더해서 다시 n에 넣어라.
		//		> 누적(***)
		
		n = n + 1;
		System.out.println(n);
		
		n += 1; // n=n+1;과 같은 의미.
		System.out.println(n);
		
		n += 5;
		System.out.println(n);
		
		n -= 1;
		System.out.println(n);
		
		n -= 2;
		System.out.println(n);
		
		n = n * 2;
		System.out.println(n);
		
		n *= 2;
		System.out.println(n);
		
		n = n / 2;
		System.out.println(n); 
		
		n /= 2;
		System.out.println(n); 
		
		n = n%7;
		System.out.println(n); 
		
		n %= 4;
		System.out.println(n); 
		
		//+, *
		//-, /, %
		
		n = n + 10;
		n += 10;
		
		n = n - 10;
		n -= 10;
		
		n = 10 + n;
		n += 10;
		
		n = 10 - n;
		n -= 10; //X

7-1.e 증감 연산자

  • ++, --
  • 1항 연산자
  • 피연산자는 숫자형을 가진다.
  • 누적 연산을 한다. 기존의 값에 +1, -1을 한다.
  • 피연산자의 위치가 바뀔 수 있다. > 연산자 우선 순위가 달라진다.
  • ++n : 전위 배치(전치) > 연산자 우선 순위 가장 높음.(1등)
  • n++ : 후위 배치(후치) > 연산자 우선 순위 가장 낮음.(꼴등)
  • ex)
  •  
		n = 10;
		result = 0;
		
		++n; //전위 증가 11
		result = 10 + n; //21
		
		System.out.println(result);
        
        n = 10;
		result = 0;
		
		result = 10 + n; //20
		n++; //후위증가 n=11
		
		System.out.println(result);

7-1.f 조건 연산자

  • ?:
  • A ? B : C
  • 3항 연산자
  • A: 조건(boolean)
  • B,C: 결과(상수,변수)
  •  
		boolean flag = false;
		String m1 = "참";
		String m2 = "거짓";
		
		// 			  A   ? B(true 이면 이게 출력)  : C(false이면 이게 출력) 
		String m3 = flag ? m1 : m2;
		
		System.out.println(m3);
		
		//나이 > 성인?
		Scanner scan = new Scanner(System.in);
		
		System.out.print("나이 : ");
		
		int age = scan.nextInt();
		
		System.out.println(age >= 19? "통과" : "거절");
		
		System.out.println(age % 2 == 0? "짝수" : "홀수");

8. 모든 것을 이용하여 요구사항 만들어보기

  • 요구사항 : 사용자로부터 문자 1개를 입력 > 영어가 소문자인지 아닌지 검사
  • 시나리오
    • 1. Scanner 생성하기
    • 2. 라벨 출력하기
    • 3. 문자 1개를 입력받기
    • 4. 입력 받은 문자가 영어 소문자인지 검사
    • 5. 결과를 출력
  • ex)
  •  
//화면설계
		Scanner scan = new Scanner(System.in); //1
		
		System.out.print("문자를 입력하세요 : "); //2
		
		//System.out.println("a"); //3
		
		//문자 1개 입력 > 왜? > 소문자인지?(a ~ z) 97 ~ 122
		String input = scan.nextLine(); //a를 입력
		
		char c = input.charAt(0); //문자열의 첫글자를 char로 뽑아낸다. // "a" > 'a'
		
		//String > int : 불가능
		
		//Integer.parseInt("5") -> 숫자만 가능
		
		//검사
		//System.out.println((int)c); //문자 코드값 출력
		int code = (int)c;
		
		String result = ((code >=97) && (code <= 122) ? "소문자입니다." : "소문자가 아닙니다.");
		
		// System.out.println("입력받은 문자 'a'는 소문자입니다.");
		// System.out.println("입력받은 문자 'F'는 소문자가 아닙니다.");

		System.out.printf("입력받은 문자 '%c'는 %s\n", code, result);

 

728x90