국민내일배움카드 - 고용노동부

에이콘 아카데미

아카데미 이야기 전문가칼럼

전문가칼럼

에이콘 아카데미의 전문 강사님의 분야별 칼럼을 확일 할 수 있습니다.

lesson02) Java 강의 (연산자와 자바의 제어문)

 

Chapter 04. 연산자(Operator)

 

[1] 연산자(Operator)란?

 

*연산자(Operator)

 -어떠한 기능을 수행하는 기호( +, - , * ,/ 등)

 

*피연산자(Operand)

 - 연산자의 작업 대상(변수,상수,리터럴,수식) 

 

 

[2] 연산자의 종류

 

*단항 연산자 : + - (타입) ++ -- ~ !

*이항 연산자 - 산술 : + - * / % << >> >>>

 

                  - 비교 : >  <  >=  <=  ==  !=

 

                  - 논리 : &&  ||  & ^ |

 

*삼항 연산자 :     ?  :

*대입 연산자 :  =

 

[3] 연산자의 우선순위 

 


 

* 괄호의 우선순위가 제일 높다.

* 산술 > 비교 > 논리 > 대입

* 단항 > 이항 > 삼항

* 연산자의 연산 진행방향은 왼쪽에서 오른쪽( - > )이다. 단, 단항 , 대입 연산자만 오른쪽에서 왼쪽( < -  ) 이다.

 

* -x + 3   단항 > 이항

  x + 3 * y   곱셈 , 나눗셈 > 덧셈 , 뺄셈

  x + 3 > y - 2  산술 > 비교

  x > 3 && x < 5   비교 > 논리

 int result = x + y * 3; 항상 대입은 맨 나중에


 

[4] 증감연산자 ( ++ , --)


*증가연산자(++) : 피연산자의 값을 1 증가 시킨다.

*감소연산자(--) : 피연산자의 값을 1 감소 시킨다.

 

*전위형 : ++ i ; 값이 참조되기 전에 증가시킨다.

*후위형 : i ++ ; 값이 참조 된 후에 증가시킨다.


 

[5] 나머지연산자( % )


*나누기한 나머지를 반환한다.

*홀수 , 짝수 등 배수검사에 주로 사용

 

int a = 10 ;

int b = 7 ;

int result = a % b ;

System . out . println(result); 





6] 쉬프트연산자 ( << , >> , >>>)


* 연산의 대상이 되는 값들을 내부적으로 bit 단위로 변경한 후 , 각 자리를 오른쪽 또는 왼쪽으로 이동

* 곱셈이나 나눗셈 보다 연산자 속도가 빠르다.

* << : 자리를 왼쪽으로 이동시키며 빈칸을 0으로 채움

* >> : 자리를 오른쪽으로 이동시키며 음수인 경우 부호를 유지시켜주기 위해 빈칸을 1로 채움

* >>> : 자리를 오른쪽으로 이동시키며 부호에 상관없이 항상 0으로 빈 칸을 채움


 

[7] 비교연산자( > , < , >= , <= , == , !=)


* 변수나 상수의 값 비교 및 객체 타입 비교(instanceof)

* 대소 비교(> , >=, < , <= )


 -boolean형 이외의 모든 기본형 변수에 사용 가능

 -참조형에 사용 불가

 

* 등가 비교( == , != )


 -모든 자료형에 사용 가능

 -기본형의 경우 : 변수에 저장되어 있는 값 비교

 -참조형의 경우 : 객체의 주소값 비교


 

* 기본형과 참조형 비교 불가


 -문자열 비교에는 equals()를 사용

 -연산 결과가 조건을 만족하면 true , 그렇지 않으면 false


 

[8] 비트 연산자


* &, | , ^

*연산의 대상이 되는 값들을 내부적으로 bit 단위로 변경한 후 연산 수행 

 *& : 비트 단위의 AND - 두 조건이 모두 true일 경우 true

 *|  : 비트 단위의 OR  - 두 조건 중 하나라도 true이면 true

 *^ : XOR                    - 두 조건이 서로 다를 경우에 true


 

[9] 논리 연산자


*&&, ||, !

 -true나 false인 논리값을 가지고  다시 한 번 조건 연산

 -하나 이상의 처리 조건이 있을 때 사용

 -&& : AND 논리곱 - 주어진 조건이 모두 true일 때 true 반환

-||  : OR  논리합 - 주언진 조건들 중 하나라도 true이면 true 반환

-  !  : NOT  부정 - true는 false로 false는 true로 

 

*주로 조건문과 반복문에서 조건식 간의 결합에 사용

 -같은 조건식이라도 피연산자의 위치에 따라서 연산속도가 달라질 수있음.

 -OR : 어느 한쪽이 true이면 true이므로 , 선조건을 true로 지정하면 후조건은 검사하지 않음

 -AND : 어느 한쪽이 false이면 false이므로, 선조건을 flase로 지정하면 후조건은 검사하지 않음


 


[9] 조건 연산자(삼항 연산자)

*조건  ? 조건이 true인 경우의 처리 : 조건이 false인 경우의 처리


 


  //국어 점수가 90점 이상이고 

  //영어 점수가 90점 이상인지 비교한 결과를 화면에 출력

  int k = 85;

  int e = 90;

  


  //국어 점수가 90점 이상인가 그리고 영어 점수가 90점 이상인가

  boolean r =   k>=90  &&  e>=90; 

  System.out.println(r);

  

  //조건 연산자를 이용하여 합격/불합격 판정

  //총점이 80 이상이면 합격, 그렇지 않으면 불합격

    int total = k + e;

    String panjung =  total >= 80 ?  "합격" : "불합격";

    System.out.println("응시 결과 : " + panjung);

    

    

   //국어와 영어의 총점이 80점 이상이거나,

   //각 과목이 80 이상인지 확인한 결과를 r에 저장하고 

   //r의 값을 화면에 출력

    r =   ( (k+e)>=80 )  ||   ( k>=80  &&  e>=80) ;

    System.out.println(!r);



 

Chapter 05. 실행흐름의 컨트롤

 

[1] 자바의 제어문


 *프로그램의 흐름에 영향을 주고 필요한 경우에 제어가능하도록 처리

  -비교문 - if, switch

  -반복문 - for, while, do-while

  -break문 - 반복문을 빠져나가기

  -continue문 - 진행되는 반복회차를 건너뛰고 다음 회차로 이동

 

[2] if문 


*boolean형의 결과를 가지는 조건식에 사용 , 조건식의 결과로 수행 문장 결정

*if(조건식) {조건식이 true일 때 처리할 내용

                 (단, 처리할 내용이 한 문장인 경우 { } 생략 가능)

                 } 


@단순 if문 연습

   (구매금액이 만원이 넘으면 2000원 할인쿠폰 발급 메시지 출력)

    int money = 10000;

    if(money>=10000){

     System.out.println("2000원 할인쿠폰 발급!");

    }




[3] if - else if 문


*조건을 만족하지 않는 경우의 처리 추가

* f(조건식){

               조건식이 true일 경우의 처리할 내용

   } else {

               조건식이 false일 경우의 처리

   }

   

  //구매금액이 만원이 넘으면 

  //2000원 할인 쿠폰 발급 메시지 출력

  //그렇지 않으면,

  //만원 이상 구매시 할인 쿠폰 발급 안내 메시지 출력


 

  money = 8000;

  if(money>=10000){

   System.out.println("2000원 할인쿠폰 발급 완료!");

  }else {

   System.out.println("만원 이상 구매시 할인 쿠폰 발급!");

  }



[4] for문


*특정한 명령들을 정해진 규칙에 따라 반복 처리할 때 사용

 -반복 횟수를 알고 있을 때 주로 사용

 

*for(초기식 ; 조건식 ; 증감식){

      조건식을 만족하는 동안 처리할 내용

      }

 -초기식 : 가장 먼저 수행 부분.  초기에 한 번만 수행

 -조건식 : 초기식 다음에 수행하는 부분

                반복문을 수행할 때마다 한 번씩 비교하여

                반복을 수행해야 할지 벗어날지 결정

 -증감식 : 반복문을 수행할 때마다 조건식에서 비교 전에

               항상 수행.

               조건식에 사용되는 변수의 값을 증가/감소 시킴


@단순 for문 연습


   System.out.println("1부터 5까지 for문으로 출력");

   for( int i=1 ; i<=5 ; i++){

    System.out.println(i);

   }


[5] 다중 for문


*for문 안에 for문이 중첩되어 있는 형태

*for(초기식1 ; 조건식1 ; 증감식1){

      for(초기식2 ; 조건식2 ; 증감식2){

           처리할 내용

      }

  }

 

@for( int i=1 ; i <= 5 ; i++){

        System.out.print(i + " : ");

    

        for( int j=1 ; j <= i ; j++){

        System.out.print(" *");

        }

        System.out.println();

   }



 

[6] Switch 문

 

*if문처럼 조건 비교에 사용되지만 조건값이 int, short, byte, char형 이어야 함.
*switch(조건값){
   case 조건값1 :    처리할 내용;  [break;]
   case 조건값2 :    처리할 내용;        [break;]
   .....
   default   :    위의 조건값과 일치하는 것이 없는 경우 처리할 내용
 }
*case 뒤의 조건값 중복 불가
*break문은 생략 가능하지만, 조건을 만족하는 경우라도 break문이 없으면
   다음 case 구문을 계속 실행
 
@switch문을 이용하여 특정 월의 마지막 날짜 판정 (단, 2월은 28일로 간주)
  int month = 3;
  int day = 0;
 
  switch(month){
  case 1: case 3:  case 5:
  case 7:  case 8 :  case 10 :
  case 12 :   day = 31;  break;
  
  case 4 : case 6:  case 9:
  case 11 :   day = 30;  break;
  
  default:   day = 28;
  }

  System.out.println(month + "월의 마지막 날짜는" + day + "입니다");



[7] While 문


*조건을 먼저 비교해서 만족할 경우에만 반복 처리

*while(조건식) {

 조건식을 만족할 경우의 처리

 }

 

@while문을 이용 - 1부터 10까지 누적합계 출력


int i = 1;

int sum = 0;

while(i<=10){

    sum = sum + i; //sum += i;

    System.out.println(i + "까지의 합 : " + sum);

    i++;

} 


[8] do ~ while 문


*일단 먼저 실행하고 조건을 확인한 후에 조건식을 만족한 경우에는 반복 계속

 do {

      처리할 내용

 } while ( 조건식 ) ;

 

@char gyesok = 'y';

  do {

   System.out.println("게임을 시작합니다~");

   System.out.println("게임이 종료 되었습니다.~");

   System.out.println("계속하시겠습니까?(y/n)");

  }while(gyesok == 'n');