프로그래밍 언어 활용/JAVA

04. 제어 흐름 이해하기

프린이8549 2024. 1. 17. 17:29

* 들어가기에 앞서

 

기본적으로 프로그램의 진행은 순차적으로 이루어진다.

단, 이런 순차적인 흐름을 바꾸고자 할 때 제어문을 사용해서 직접 제어할 수 있다.

 

제어문의 종류에는

 

1. 선택적으로 실행시키고자 한다면 => 조건문

2. 반복적으로 실행시키고자 한다면 => 반복문

3. 그 외의 흐름 제어에는 => 분기문

 

이 있으며 본 4장에서는 해당 제어문들을 다뤄볼 예정이다.

 


1. 조건문

 

1-1. 조건문

  • 의미
    • 주어진 조건(조건식)에 따라 다른 문장을 선택할 수 있도록 프로그래밍하는 것
      • 조건식의 결과는 true/false 값이어야 함.
      • 보통 비교 연산자(대조, 동등), 논리 연산자(&&, ||) 주로 사용
  • 종류
    • f문
    • if-else문
    • if-else if-else문
    • switch-case문 등 

 

1-2. if문과 if-else문

  • if문
    • 형식
if (조건식) {
	...실행문 } 
    //=> 조건식이 true 일 경우, 중괄호 블럭 내의 코드 실행 
    //=> 조건식이 false 일 경우, 중괄호 블럭 내의 코드 무시하고 넘어감
//​​============================================================ 

int age = 10; 
if (age >= 8) {
	System.out.println("학교에 다닙니다."); 
}​​
  • if-else문
    • 형식
if - else문
if (조건식) {
	... 실행문 1
} else {
	... 실행문 2
} 
==> 조건식의 결과가 참일 경우, 실행 코드 1을 수행 후 if - else 문 빠져나감
	단, 결과가 거짓일 경우, 무조건 실행 코드 2를 수행.​
    • 예시
      • "만약 나이가 8살 이상이면 학교에 다닌다. 그렇지 않으면 학교에 다니지 않는다"
public class Main {
	public static void main(String[] args){
    	if ( age >= 8 ) {
        	System.out.println("학교에 다닙니다.");
        } else {
        	System.out.println("학교에 다니지 않습니다.");
        }
    }
}​
  • if-else if-else문
    • 하나의 상황에 조건이 여러 개인 경우 사용
    • 형식
public class Main{
	public static void main(String[] args){
    	if (조건식 1) {
        	수행문 1 // 조건식 1 참일 경우 실행
        } else if (조건식 2) {
        	수행문 2 // 조건식 2 참일 경우 실행 ...
        } else if (조건식 3) {
        	수행문 4
        } else {
        	수행문 5 // 위의 조건이 모두 해당하지 않을 경우 실행
        }
        수행문 6 // if-else if-else문 빠져나온 뒤 실행
    }
}​
  • if-else if 문과 if-if문의 차이
    • if-else if문은 하나의 조건을 만족하면 나머지 조건을 비교하지 않고 다음 수행문으로 넘어감
    • if-if문은 조건마다 각각 비교

 

 

1-3. switch-case문

  • 형식
public class Main{
	public static void main(String[] args){
    	switch(조건) {
        case 값 1 : 수행문 1;
        	break; // break; 가 없을 경우, 해당하는 케이스 및 그 아래 있는 모든 수행문들이 실행됨
        case 값 2 : 수행문 2;
        	break;
        case 값 3 : 수행문 3;
        	break; 
         default : 수행문 4; // 일치하는 case가 없을 시 default 코드가 수행됨
        }
    }
}​
  • switch문을 사용하는 이유
    • 조건식의 결과가 정수 또는 문자열 값이고 그 값에 따라 수행되는 경우가 각각 다른 경우에 if문보다 가독성 좋음
    • 조건이 하나의 변수 값이나 상수 값으로 구분되는 경우 사용
    • 조건이 복잡한 식으로 이루어진다면 switch문은 적합하지 않음.
  • 순위에 따라 매달을 주는 코드 작성 시 if문 과 switch문 비교
public class Main{
	public static void main(String[] args){
    	char medalColor;
        int rank;
        
    	if (rank == 1) {
        	medalColor = 'G';
        }
        else if ( rank == 2 ) {
        	medalColor = 'S';
        }
        else if ( rank == 3) {
        	medalColor = 'B';
        }
        else {
        	medalColor = 'A';
        }
    }
}
public class Main{
	public static void main(String[] args){
    	char medalColor;
        int rank;
        
        switch(rank) {
       	case 1 : medalColor = 'G' ;
        	break;
        case 2 : medalColor = 'S' ;
        	break;
        case 3 : medalColor = 'B' ;
        	break;
        default : medalColor = 'A' ;    
        }
	}
}
  • case문 동시에 사용하기
    • 여러 경우를 동시에 처리할 때 사용.
    • 예시
//각 달의 날짜를 출력하는 예제
case 1 : day = 31;
	break;
case 2 : day = 28;
	break;
case 3 : day = 31;
	break;
case 4 : day = 30;
	break;
case 5 : day = 31;
	break;
...
case 12 : day = 31;
	break;
// 일일이 처리해야하기에 불편함
============================
// 수행문이 같은 경우 case문을 동시에 사용할 수 있음
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;
case 2 : day 28;
	break;​
  • case문에 문자열 사용하기
    • 문자열 변수명.equals("(비교할)문자열") 메서드 통해 문자열 비교 가능
if(medal.equals.("Gold")){
...
}​

 

  • JAVA 7 부터는 문자열을 직접 case문에 사용 가능
switch(medal){
case "Gold" : 
	System.out.println("금메달입니다");
    break;
...
default :
	System.out.println("메달이 없습니다");
}​

 

 

2. 반복문(Loop)

2-1. 반복문

  • 의미
    • 특정 문장들을 반복해서 수행하도록 함
      • 일일이 입력하는 것보다 훨씬 효율적
  • 특징
    • 조건을 벗어나게 할 연산(증감식 또는 분기문) 필요로 함
      • 부재시 조건을 빠져나가지 못하고 코드를 반복 수행함에 따라 무한반복됨
  • 종류
    • while문
    • do-while문
    • for문

 

2-2. while문

  • 형식 
while(조건식) { 
	수행될 문장; // 조건식이 참인 동안 수행문 반복 처리 
    [증감식 or 분기문];
}​​
  • 용도
    • 조건의 참, 거짓에 따라 반복문이 수행하는 경우에 적합
  • while문 사용해 1 ~ 10 까지 더하기
public class Main{
	public static void main(String[] args){
    	int num, sum = 0; 
        // while문 내에서 num 값이 정해져 있지 않으면 sum에 무엇을 넣을지 알 수 없어서 오류 발생
        // 따라서 먼저 초기화해야 함
        while(num < 11){ //num값이 11보다 작은 동안
        	sum += num; // sum에 num을 더하고
            num++; // num에 1씩 더해 나감
        }
        System.out.println("1부터 10까지의 합은 " + sum + "입니다.");
    }
}​
  • while문이 무한히 반복되는 경우
while(true){ // 조건이 항상 참이 되어 무한 반복
	...
}​

 

 

2-3. do-while문

  • 특징(while문과의 차이)
    • do-while문은 중괄호 내의 수행문을 무조건 한 번 수행한 후 조건식을 검사. 따라서 수행문을 반드시 한 번 이상 실행해야 하는 경우 적합
      • while문은 조건을 먼저 검사하기 때문에 조건식에 맞지 않으면 반복 수행이 한 번도 일어나지 않음.
  • 형식
do {
	수행문1; // 일단 수행문 1 실행
    ...
} while(조건식); // 조건식이 참이면 반복 실행
	수행문2; // 조건식이 거짓이되면 탈출 후 수행문 2 실행
    ...​

 

2-4. for문

  • 형식
for (초기화식 ; 조건식 ; 증감식) {
	수행문;
}​​

 

  • while 문과의 비교
    • for문 사용시 초기화, 조건 비교, 증감식을 한 줄에 쓸 수 있으며 가독성도 좋음
    • 반복 횟수를 관리할 때 더 편리함(반복 횟수가 정해져있을 때)

 

2-5. 중첩된 반복문

  • 반복문 안에 또 다른 반복문을 중첩해서 사용하는 경우
    • for문, while문 모두 가능
  • 구구단 출력 문제 

 

2-6. 분기문(break문, continue문)

  • 반복문과 함께 쓰임
  • 종류
    • break문
    • continue문
  • break문
    • 특징
      • 반복문을 더 이상 수행하지 않고 빠져나올 때 사용.
      • 해당 break문을 감싸고 있는 반복문만 빠져나옴
    • 예시
      • 1부터 100까지의 합계 구하는 프로그램
public class Main{ 
	public static void main(String[] args){ 
    	int total = 0; 
        int num; 
        for(num = 1 ; ; num++){ //for문의 조건식을 생략하는 대신 break문 사용 
        	total += num; 
            if(num >= 100){ //종료 조건 
            break; // break문을 감싸고 있는 반복문 탈출 
            } 
        } 
        System.out.println("num : " + num);
        System.out.println("sum : " + sum); 
    } 
}​​

 

  •  continue문
    • 특징
      • 반복문 내에서 continue문 만나면 이후 문장을 수행하지 않고 for문의 처음으로 돌아가 증감식 수행
      • 반복문을 계속 수행하지만 특정 조건에서는 수행문을 실행하지 않고 생략하는 경우에 사용
    • 예제
      • 1부터 100까지의 홀수만 더하는 프로그램
public class Main{
	public static void main(String[] args){
    	int total = 0;
        int num;
        
        for(num = 1 ; num <= 100 ; num++){
        	if(num % 2 ==0){ // num이 짝수인 경우
            continue; // 아래 수행문을 실행하지 않고 for문 증감식으로 올라감
            }
            total += num; // 따라서 홀수인 경우에만 수행문 실행
        }
    }
}​

 

 

  1. 1. 웹 서버처럼 끊임없이 돌아가는 시스템. ex) 인터넷 쇼핑몰 [본문으로]