잇연

[국비지원교육] JAVA 3일차_연산자_05.03 본문

JAVA

[국비지원교육] JAVA 3일차_연산자_05.03

잇연 2022. 5. 3. 23:48
    1. 연산자 종류 => 결과값 
       --------
       데이터형 
         정수 : byte,int,long
         실수 : double 
         논리 : boolean 
         문자 : char
         
       1) 단항연산자 
           = 증감연산자 (++,--)
           = 부정연산자 (!)
           = 형변환연산자 ((type=기본형)) (int) , (double)...
       2) 이항연산자
           = 산술연산자 (+,-,*,/,%)
           = 비교연산자 (==,!=,<,>,<=,>=)
           = 논리연산자 (&& , ||)
           = 대입연산자 (= , += , -=)
       3) 삼항연산자 ?:
 

단항연산자-증감연산자

```java
증감 연산자 : 증가(++) / 감소(--) => 1 증가 / 1 감소
     ---------
      1) 전치 연산자
         ++a , --a (먼저 증가,감소를 한후에 다른 연산 수행) 
      2) 후치 연산자
         a++ , a-- (다른 연산을 수행하고 나중에 증가,감소가 된다)
         
         예)
             int a=10;
             int b = ++a;
                  -- --
                      1(먼저 증가)
                   2(대입) 
                   a=11,b=11
             ================>  int b = ++a(11)
                                    b=11 
                                    
             int a=10;
             int b =  a++;
                  ---  ---
                   1    2
              => 증가전에 대입 b=10 
              => a값 증가 a=11
```

```java
/*
     int a=10;
     int b= ++a + a++ + ++a + a++ + a++;
     
     a=? ==> 15
     b=?
*/ 
public class 단항연산자_증감연산자_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*int a=10;
		int b= ++a + a++ + ++a + a++ + a++;
		System.out.println(a);
		System.out.println(b);
		
		a=10;
		b= a++ + a++ + a++ + ++a + ++a;
		System.out.println(a);
		System.out.println(b);*/
		int a=10;
		int b=a++; // 대입 후 증가 
		System.out.println("a="+a+",b="+b);
		// a=11 , b=10
		int c=10;
		int d=++c; // 증가 후 대입 
		System.out.println("c="+c+",d="+d);
		// c=11, d=11
		// 전치 , 후치 관련없이 => 1개증가 
		
		// 연산자  =(대입연산자)
		// 반복문에 주로 사용 => 데이터베이스 
		int m=10;
		int n=m--; // n=10 
		           // m감소 => m=9
		System.out.println("m="+m+",n="+n);
		int x=10;
		int y=--x; // x감소  => x=9 , y=9
		System.out.println("x="+x+",y="+y);
		// 1씩감소 (--) , 1씩증가 (++)
	}

}
```

```java
// 단항 : 증감 , 부정 , 형변환 
// 이항 : 산술, 논리,비교 , 대입 
// 삼항 : (조건)?값:값 ==> if~else => 소스를 줄인다(웹,게임)
public class 단항연산자_증감연산자_2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        char c='A'; //char는 연산이 되면 => 정수변경후에 처리 
        c++;
        System.out.println(c);
        System.out.println(c++);//B => 출력 / 증가 
        // 증가 c='C'
        System.out.println(++c);//D
        // 증가 
        
        int a=10;
        System.out.println(a);//10
        System.out.println(a++);//10
        // a=11 => 증가된값을 기억하고 있다 
        System.out.println(a++);//11
        // a=12
        System.out.println(a++);//12
        // a=13
        System.out.println(a);//13
        // 변수는 } 에서 종료 
        // 지역변수 ==> 블록변수 (자동으로 메모리에서 해제 => 메모리 자체에 처리)
        // 스택공간에 저장 
        // 지역변수는 반드시 초기화를 한다 
	}

}
```

단항연산자-부정연산자

```java
// ! => boolean에서 사용이 가능 => 턴 
// ! => 예약 가능한날 , 예약이 없는 날 (예약프로그램 , 장바구니) 
/*
 *    사용방법 
 *    boolean bCheck=false; //false
 *    bCheck=!bCheck; // true
 *    부정연산자 
 */
public class 단항연산자_부정연산자 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        boolean bCheck=false;
        System.out.println("bCheck="+bCheck);
        bCheck=!bCheck;// NOT 
        System.out.println("bCheck="+bCheck);
        // true => false  => !true
        // false => true  => !false
	}

}
```

단항연산자-형변환연산자

  • ** byte < char,short < int < long < float < double
  • /* 결과값 : ++,--(정수만 사용이 가능) => 정수 ! (boolean) => 논리형 형변환 연산자 => boolean을 제외한 모든 기본형 사용이 가능 => 결과값? 1. 형식 (기호) 2. 결과값 => 형변환 타입으로 나온다 (int) => int , (double) => double , (char) => char = 자동 형변환 작은 데이터형 => 큰데이터형으로 변환 int => char , double => int ... = 강제 형변환 (형변환 연산자) 큰 데이터형 => 작은 데이터형으로 변경 (int)double , (char)int... = 데이터형 크기 순서 byte < char,short < int < long < float < double */

이항연산자-산술연산자

```java
/*
    ** 단항연산자 (-,+) 
       int a=1
       a=-a;//음수 
    이항연산자 : 피연산자(연산대상) 2개일때 
              a+b
              - -
    => 산술 연산자 ( + , -  , *  ,  /  , % )
       + :  실제 산술 , 문자열 결합(***) => 크롤링
       - , * :  산술
       / => 0으로 나눌 수 없다 , 정수/정수=정수 (오라클 , JSTL => 실수)
       % => 남는 값은 왼쪽부호를 따라 간다 
       
       우선순위 : * , / , % 우선순위 , +,- 나중 순위
*/
```

```java
// 3개의 정수를 받아서 총점 / 평균을 구한다 
import java.util.Scanner;
public class 이항연산자_산술연산자 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        //변수 선언 
		int kor,eng,math;
		int total;
		double avg;
		
		//변수 초기화 
		Scanner scan=new Scanner(System.in); // 사용자 입력값 (도스에서 사용)
		// System.in => 키보드 입력값을 가지고 온다 
		System.out.print("국어점수 입력:");
		kor=scan.nextInt();
		
		System.out.print("영어점수 입력:");
		eng=scan.nextInt();
		
		System.out.print("수학점수 입력:");
		math=scan.nextInt();
		
		// 총점 
		total=kor+eng+math;
		// 평균 
		avg=total/3.0; // 소수점 => 실수로 나눠준다 
		//화면 출력 
		System.out.println("국어점수:"+kor);
		System.out.println("영어점수:"+eng);
		System.out.println("수학점수:"+math);
		System.out.println("총점:"+total);
		System.out.printf("평균:%.2f\\n",avg);//반올림 
	}

}
```

이항연산자-비교연산자

```java
// => 조건문 (if,for)
/*
     1. 비교연산자 종류 (정수,실수,문자,논리=>기본형) 
                     참조형 (배열,클래스)= 비교할 수 없다  
        == 같다 (문자열은 비교할 수 없다: equals)
                정수 비교
                 10==9  ==> false
                문자 비교 
                 'A'=='A' ==> true
                 'A'==65  ==> true 
                 =======> 연산처리 자동으로 정수로 변경
                 'A'==65
                 ---
                  int로 변경 => 65==65
                  *** 연산 같은 데이터형만 연산 처리가 된다 
                  *** 작은 데이터형은 큰 데이터형으로 변경후에 연산처리
                      double int => int(double)
                  10.5 == 10 
                          --- 10.0 => 자동 형변환   
                논리 비교 
                 true==false ==> false
                 => == , != 가능 (크기비교는 안된다)
                실수 비교 
                 10.5 == 10.5 ==> true
        != 같지 않다 
           정수 비교
             10!=9 ==> true
           실수 비교 
             10.5!=10.5 ==> false
           문자 비교
             'A'!=66  ==> true
             ---
             65로 변경
           논리 비교
             true!=false ==> true
        <  작다 (왼쪽)
        >  크다
        <= 작거나 같다 ( < || == )
        >= 크거나 같다 ( > || == )
        -----------------------------------------
     2. 연산결과값 (boolean => true/false) , 연산자 
*/ 
public class 비교연산자 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        //1. 정수 비교 
		System.out.println(100==99); //같다 (= 대입연산자)
		//2. 문자 비교 
		System.out.println('A'=='B');
		System.out.println('A'==65);//65==65
		// 'A'=> int변경(65)
		System.out.println(10.5==10);
		// 10 => double (10.0) 
		System.out.println(true==false);
		int a=10;
		int b=9;
		System.out.println(a==++b);
		// a==b++ => b증가전에 비교 
		// a==++b => b먼저증가 비교 
		int c=66;
		char ch='A';
		System.out.println(--c==ch);
		//c=65
		System.out.println(c==ch);
		System.out.println(c++ == ch++);
		// c=66 , ch='B'
		System.out.println("c="+c);
		System.out.println("ch="+ch);
		
		c=67;
		ch='B';//66
		System.out.println(c!=ch); 
		System.out.println(c!=ch++);
		//ch='C'
		System.out.println(c!=ch); //'C'=67
		
		c=68;
		ch='D'; // 68
		System.out.println(c<ch);//68<68
		System.out.println(c>ch);//68>68
		System.out.println(c<=ch);// 68<68 || 68==68
		System.out.println(c>=ch);// 68>68 || 68==68
		// 조건문 => 가장 많이 등장하는 연산자 
		
		// 오라클 (=) , 자바스크립트 (===)  ES6 
		
	/*	    Back => 자바/오라클 
		    Front => HTML,CSS,JavaScript
		    ----------------------------
		     Back+Front : JSP == JDBC
		     => Front (Jquery,Ajax)
		     ----------------------
		     Spring  == Mybatis 
		      SELECT * FROM movie
		      WHERE title LIKE '%강%'
		     => Front (VueJS) => vuex
		     
		     Spring-Boot == JPA
		       findByTitleLike()
		     => Front (React) => WebPack(Redux) 
		     ============ 배포 (AWS)
		     옵션 : AI(ChatBot) 
	*/	     
		 
		
	}

}
```

이항연산자-논리연산자

```java
/*
    &&(AND) , ||(OR)  ==> true/false 
    && => 기간이나 범위 포함 
    || => 기간이나 범위를 벗어난 경우 
    --------------------------
       형식 : (조건) && (조건)
             -----   ------
               |       |
               ---------
                  |
                 결과값 
             (조건) || (조건)
             -----   ------
               |       |
               ---------
                  |
                 결과값 
        ----------------------
     경우의 수 : 로그인처리 , 아이디중복 , 우편번호 검색 , 아이디 찾기, 비밀번호 찾기
                        비밀번호 검색 , 영화 검색 .....
     ---------------------------------------
                        &&(직렬)      ||(병렬)
     ---------------------------------------
      true true         true           true
     ---------------------------------------
      true false        false          true
     ---------------------------------------
      false true        false          true
     ---------------------------------------
      false false       false         false 
     ---------------------------------------
     => 효율적인 연산처리 (최적화)
        ------------
        (조건) && (조건)
                ------- 실행이 안되게 만든다 
        false 
        
        (조건) || (조건)
                ------- 실행이 안되게 만든다 
        true
        
        int a=10;
        int b=9;
        
        (a<b) && (a==++b) ==> false
                  b=9
        (a<b) || (a==++b) ==> true
                  b=10
 */
```

```java
public class 논리연산자 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        int a=10;
        int b=9;
        boolean result=(a<b) && (a==++b);
        //             false => 연산종료 
        System.out.println("결과값:"+result);//false
        System.out.println("a="+a);//10
        System.out.println("b="+b);//9
        
        a=10;
        b=9;
        result=(a<b) || (a==++b);
        //     false   -------- true여부 확인 
        System.out.println("결과값:"+result);//true
        System.out.println("a="+a);//10
        System.out.println("b="+b);//10
        
        char c='a';
        // 대문자 여부 확인  => A~Z
        result=(c>='A') && (c<='Z'); //c가 A-Z사이에 있다 
        System.out.println(result);
        
        // 소문자 여부 확인
        result=(c>='a') && (c<='z');
        System.out.println(result);
        
        int k=(int)(Math.random()*20)+1;//1~20
        System.out.println("k="+k);
        // k가 1~10 사이에 있다 => &&
        result=(k>=1) && (k<=10);
        System.out.println(result+" &&수행");
        // k가 1~10 사이에 없다 => ||
        result=(k<1) || (k>10);
        System.out.println(result+" ||수행");
        
	}

}
```

이항연산자-대입연산자

```java
/*
     대입연산자 (값을 메모리에 저장)
     ------------------------ 최하위 연산자 (연산순위가 가장 낮다)
     연산자 종류 ( = , += , -= )
       *** = (가장 많이 사용되는 대입연산자)
       ------------------ 복합 대입연산자 
       *** +=
         int a=10;
         ---------
         a+=10;  ===>  a=a+10; => 20
                 ===>  반복 => 1개증가 , 여러개 증가 
                              ++       +=
                 ===> += (문자열 결합:파일읽기 , 웹에서 값을 읽어 올때)
                         -----------------------------------
                            한글자씩 읽어 온다 => (통으로 읽어 올 수 있다)
         ---------
         
       *** -=
          int a=10;
          a-=5;  ===> a=a-5; => 5
       *=
          int a=10;
          a*=5;  ===> a=a*5; => 50
          
       ---------------------------- 
         a++ , ++a , a+=1 , a=a+1  ==> 1씩 증가하는 프로그램 
         --------- 1개만 증가 
       ----------------------------
       /=
          int a=10;
          a/=2;  ==> a=a/2 ==> 5
       %=
          int a=10;
          a%=3;  ==> a=a%3 ==> 1
                       ---
                       10%3
       &=
          int a=10;
          a&=7;  ==> a=a&7 ==> 2
          1010
          0111
          ---- &
          0010 ==> 2
       |=
          int a=10;
          a|=7;  ==> a=a|7 ==> 15
          1010
          0111
          ---- |
          1111   ==> 15
          
       ^=
          int a=10;
          a^=7  ==> a=a^7  ==> 13
          1010
          0111
          ----- ^
          1101  ==> 13
       >>=
          int a=10;
          a>>=3   ==> a=a>>3 ==> 1
          10>>3 ==> 1
          1(010)
          -
          
       <<=
          int a=10;
          a<<=3; ==> a=a<<3 ==80
          10<<3 ==> 80
          1010000
            - 16  ==> 80 
          -64
       ------------------
     --------------------------------------------
*/
```

삼항연산자-:?

```java
/*
 *      => 프로그램 (변수,연산자,제어문) => 오라클 , 자바스크립트 , VueJS
 *                                   JSTL , React 
 *         클래스 
 *          변수 + 메소드 
 *                ----
 *                 연산자+제어문 
 *         객체지향 => 재사용 (묶어둔다)
 *      삼항연산자 (웹에서 => 페이지(이전/다음)) => if~else
 *      1) 형식 : 
 *               (조건)?값1:값2
 *                    --- ---
 *                     |   | 조건이 false일때 수행하는 값
 *                    조건 true일때 수행하는 값
 *         예)
 *            int a=10;
 *             a%2==0?"짝수":"홀수" => 짝수
 *             ------
 *              true 
 */
import java.util.Scanner;
// 정수입력 => 홀수/짝수 
public class 삼항연산자 {
    
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        //1. Scanner => 키보드 입력 받기 
		Scanner scan=new Scanner(System.in);
		/*System.out.print("정수 입력:");
		int num=scan.nextInt();
		// 짝수/홀수 => 처리 
		char result=num%2==0?'짝':'홀';
		System.out.println(result+"수");*/
		// scanner는 문자를 받을 수 없다 / 문자열 (String)
		System.out.print("알파벳 입력:");
		String alpha=scan.next();
		// charAt(0) => 첫글자를 char로 읽어 온다 
		// "ABCD" charAt(0) , charAt(1), charAt(2) charAt(3)
		char result=(alpha.charAt(0)>='A' && alpha.charAt(0)<='Z')?'대':'소';
		System.out.println(result+"문자");
	}

}
```