본문 바로가기

Java Live Study

Live Study 4주차 : 제어문

자바가 제공하는 제어문 학습

 

습할 것

선택문

반복문

 

과제 마감

2020.12.12 1PM


 

제어문
제어문은 코딩하면서 가장 많이 쓰이는 문법 중 하나라고 생각한다. 이번주는 제어문 중 하나인 선택문과 반복문을 공부한다!

 

 

선택문

'선택문'이라 하면, 가장 먼저 떠오르는 것은 if 그리고 switch이다. 조건에 따라 분기한다.

 

 

단순 if문

조건에 따라 단순히 한 단위의 특정 작업을 수행해야 하는 경우 사용하는 if문이다.

 

if(count < 0) // 조건문
	System.out.println(count + "은(는) 음수입니다."); // 조건이 참일 때 수행

 

이중 if문 (if-else)

조건식의 결과에 따라 특정 작업을 수행해야 하는 경우 사용하는 선택문을 이중 선택문이라 한다.

조건에 따라 서로 다른 문장들을 수행한다.

 

if(num%2==0){
	System.out.println(num + "은 짝수입니다.");
}
else{
	System.out.println(num + "은 홀수입니다.");
}

 

다중 if문 (if-else if)

다중 선택을 제공하는 선택문이다. 조건이 거짓일 경우 다시 선택 조건을 제시하여 조건의 결과에 따라 처리하며, 결과가 거짓일 경우 반복적으로 다시 선택 조건을 제시할 수 있는 구조의 선택문이다.

 

if(grade>=90)
	System.out.println("A학점 취득");
else if(grade>=80)
	System.out.println("B학점 취득");
else if(grade>=70)
	System.out.println("C학점 취득");
else
	System.out.println("학점 취득 실패);

 

내포된 if문

if문 내에 또 다른 if문이 내포될 수 있다. 앞에서 기술한 3가지 if문들은 자유롭게 서로 내포되어 사용될 수 있다.

 

if(score>=80){
    System.out.println("우수 학점군!");
    if(score>=90)
        System.out.println("A학점입니다.");
    else
        System.out.println("B학점입니다.");
}
else{
    if(score>=60){   
        System.out.println("보통 학점군!")
        if(score>=70)
            System.out.println("C학점입니다.");
        else
            System.out.println("D학점입니다.");
    }
    else{
        System.out.println("학점 취득 실패");
    }
}

 

 

switch문

다중 선택 기능을 제공하는 switch문이다. if-else-if 문을 사용해서 다중 선택을 구현할 수도 있지만, 구조가 복잡해진다.

if의 조건식은 참 또는 거짓을 가지며, switch는 정수값을 가지는 정수식이 포함된다.

우선, 정수식이 평가되며 평가된 값에 적합한 case절이 수행된다. case절의 정수값은 반드시 상숫값이어야하며 변수가 사용될수 없다.

 

string str="";
switch(month)
{
    case 12:
    case 1:
    case 2:
    	str = "겨울입니다.";
        break;
    case 3:
    case 4:
    case 5:
    	str = "봄입니다.";
        break;
    case 6:
    case 7:
    case 8:
    	str = "여름입니다.";
       	break;
    case 9:
    case 10:
    case 11
    	str = "가을입니다.";
        break;
    default:
        str = "1~12월을 벗어난 달입니다.";
        break;
}
System.out.println(str);

 

 


 

반복문

자바 언어에서 제공하는 반복문은 while문, do-while문, for문이 있다. 세가지 모두 반복의 기능을 제공하지만 각각 고유의 특징이 있다. 목적에 따라 적합한 반복문을 선택해야 한다.

  • while문 : 반복의 횟수가 결정되지 않은 상태에서 특정 조건이 만족할 떄까지 반복하는 경우에 적합한 반복문
  • do-while문 : while문과 같으나 조건을 나중에 검사하는 반복문. 즉 이 반복문은 조건을 나중에 검사함으로써 최소한 한 번은 수행되는 반복문
  • for문 : 반복의 패턴(특정 숫자만큼 증가 또는 감소)과 반복 횟수가 고정된 경우에 적합한 반복문

 

while문

특정 조건이 만족하는 동안 지정된 영역을 반복할 수 있다. 우선 조건식을 검사하여 그 결과가 참이면 반복될 문장 블록을 수행하고, 거짓이면 while문을 빠져나온다. 만일 처음 조건을 검사할 때 조건이 거짓이라면 반복될 문장들은 한 번도 수행되지 않는다.

조건식이 참일 동안 반복 부분을 계속해서 수행하기 때문에, 대부분의 while문의 사용에서는 반복 블록 내에 조건식의 조건을 거짓으로 만들 수 있는 부분이 포함되는 것이 일반적이다.

 

int sum=0, count=1;
while(count<=10){
    sum += count;
    count += 1;
}
System.out.println("1부터 10까지의 합은 " + sum + "입니다.");

 

do-while문

while문과 유사하지만 조건식의 위치가 다른 형태의 반복문으로 do-while문이 있다. 조건을 먼저 검사하는 while문과 달리 조건을 나중에 검사하는 반복문이다.

do-while문은 반복될 문장이 먼저 실행되고 조건이 나중에 검사되기 때문에 반복될 문장이 최소 한 번은 실행될 수 있다.

int sum=0, count=1;
do{
    sum = sum + count;
    count = count + 1;
} while(count<=10);
System.out.println("1부터 10까지의 합은 " + sum + "입니다.");

 

for문

for문은 일정한 패턴으로 증가 또는 감소하면서 지정된 횟수만큼 반복 수행하는 형태에 적합한 반복문이다. for문은 초기식, 조건식, 증감식으로 구성되며 각각의 식은 다음과 같은 기능을 담당한다.

  • 초기식 : 주로 반복 변수의 초기화를 위해 사용. 초기식은 처음 한 번만 수행
  • 조건식 : 조건을 나타내며, 조건식이 참일 동안 반복 부분 수행
  • 증감식 : 반복 부분을 수행한 후에 반드시 수행되는 문장. 주로 조건식에 변화를 주는 수식으로 구성
int sum=0;
for(int i=1; i<=10; i++) // 초기식에서 변수 선언 가능
    sum = sum + i;

int a,b;
for(a=1, b=10; a<b; a++,b--){ // 초기식과 증감식에 하나 이상의 문장 사용 가능.
    System.out.println("a=" + a);
    System.out.println("b=" + b);
}

boolean flag=false;
int i=1;
for(;!flag;){ // 초기식과 증감식 생략 가능.
    System.out.println("i의 값은 " + i + "입니다.");
    if(i==10) flag=true;
    i++;
}

for(; ;) // 모두 생략 가능. 무한 반복.

 

제어의 이동

제어를 이동한다는 말은 프로그램의 실행 순서를 인위적으로 변경할 수 있다는 의미이다. 자바 언어는 프로그램에서 제어를 이동하기 위해 제한된 형태의 명령어인 break, continue, return문을 제공한다.

 

레이블 블록

자바는 프로그램의 특정 부분을 레이블 블록으로 지정할 수 있다. break문과 continue문은 단독으로 사용될 수도 있고, 레이블 블록과 같이 사용 될 수도 있다.

aa: {
    System.out.println("block aa");
}

bb: {
    System.out.println("block bb");
    cc: {
        System.out.println("block cc");
    }
}

dd: for(int j=1; j<10; j++){
    sum = sum+j;
}

ee: while(j<10){
    System.out.println(j + "block ee");
    ff: while(k<10){
    ......
    }
}
...

 

 

break문

반복문이나 레이블 블록문 내에서 break문이 사용되면, 프로그램의 실행은 반복문이나 레이블 블록문을 벗어나게 된다.

 

[1] 레이블이 없는 break문의 사용

레이블이 없는 break문의 사용은 반복문 안에서만 사용될 수 있다. 반복문 내에서 break문을 실행하면 break문을 내포하고 있는 반복문을 벗어나게 되며, 반복문이 아닌 레이블 블록에서 break문이 사용되면 오류가 발생한다.

for(int j=1; j<10; j++){
    for(int k=1; k<10; k++){
        if(k==5) break; // break를 내포하는 반복문 밖으로 제어 이동
            ...

 

[2] 레이블이 있는 break문의 사용

레이블이 있는 break문의 사용은 반복문과 레이블 블록 안에서 모두 사용될 수 있다. 중첩된 반복문 내에서 레이블을 이용한 break문을 사용하면 지정된 블록 밖으로 제어를 이동시킬 수 있다. 레이블 블록 안에서 break문이 사용될 경우에는 반드시 레이블명을 같이 사용해야 한다. 레이블명이 같이 사용되지 않으면 오류가 발생한다.

aa: for(int j=1; j<10; j++){
    bb: for(int k=1; k<10; k++){
        if(j==5 && k==5) break aa; // aa 블록 밖으로 제어 이동
            ...
        
        
cc:{
    ...
    if(a==10) break cc; // cc 블록 밖으로 제어 이동. 레이블 블록에서 사용될 경우에는 레이블명 지정
    ...

 

 

continue문

continue문은 프로그램의 제어를 반복 블록의 처음으로 이동시키는 역할을 수행한다. break문과 달리 continue문은 레이블과 상관없이 반드시 반복문 안에서만 사용되어야 한다.

 

[1] 레이블이 없는 continue문의 사용

레이블이 없는 continue문은 내포하고 있는 반복문 블록의 처음으로 제어를 이동시킨다.

while(true){
    if(j%2==0) continue; // 제어를 반복문의 처음으로 이동
    sum = sum + j;
    j++;
}

 

[2] 레이블이 있는 continue문의 사용

레이블이 있는 continue문은 중첩된 반복문에서 바깥쪽의 반복문 처음으로 제어의 이동이 가능하다. 중첩된 반복문에서 continue를 사용하려면 반복문 블럭을 레이블로 지정해야 한다.

aa: while(true){
    ...
    bb: while(true){
        ...
        if(j%2==0) continue;
        if(k==10) continue aa; // 제어를 aa 블록의 처음으로 이동
        ...
cc: {
    ...
    dd: {
        ...
        if(j%2==0) continue cc; // 반복문 블록이 아니므로 오류 발생
        ...

 

 

 

 

옵션 과제는 다음 포스트에서 다룬다!

 

 

 

 

 

참고 : 처음 시작하는 JAVA 프로그래밍

'Java Live Study' 카테고리의 다른 글

Live Study 8주차 : 인터페이스  (0) 2021.01.16
Live Study 7주차 : 패키지  (0) 2021.01.02
Live Study 6주차 : 상속  (0) 2020.12.26
Live Study 5주차 : 과제  (0) 2020.12.18
Live Study 5주차 : 클래스  (0) 2020.12.18