프로그래밍 언어 활용/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-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. 웹 서버처럼 끊임없이 돌아가는 시스템. ex) 인터넷 쇼핑몰 [본문으로]