[Java] CH_04 조건문과 반복문

한지혜·2025년 1월 20일

자바 프로그램의 실행 흐름

main()메소드의 시작 중괄호{에서 끝 중괄호 }까지 위에서부터 아래로 실행하는 흐름을 가지고 있다.


제어문

  • 흐름 제어문은 이러한 실행 흐름을 개발자가 원하는 방향으로 바꿀 수 있도록 해준다.
  • 제어문은 다양한 실행 흐름을 생성한다.
  • 구성: 조건식, 중괄호 {} 블록
    • 조건식의 연산 결과에 따라 블록 내부의 실행 여부가 결정된다.

제어문의 종류

조건문반복문
if문, switch문for문, while문, do-while문

제어문 블록이 실행 완료된 후,

  • 조건문: 제어문 블록을 빠져나와 정상 흐름으로 돌아옴
  • 반복문: 제어문 처음으로 다시 되돌아가 반복 실행한다.(루핑looping)

제어문 블록 내부에 또 다른 제어문을 사용할 수 있다.


if 문

if (조건식) {
	// 조건식이 true일 경우 실행되는 블록
    // 실행문이 하나일 경우 중괄호 생략 가능
}

조건식의 결과에 따라 블록 실행 여부가 결정된다.

  • 조건식: true/false가 산출되는 연산식, boolean 변수

중괄호 { } 블록을 생략하지 않고 작성하는 것을 추천한다.

  • 가독성이 좋지 않고, 버그 발생의 원인이 될 수 있기 때문

if 문 + else 블록

if (조건식) {
	// 조건식이 true일 경우 실행
} else {
	// 조건식이 false일 경우 실행
}


조건문이 여러 개인 if문

else if

  • else if는 상위 조건식이 false일 경우 평가된다.
  • else if의 수는 제한이 없다.
  • 여러 개의 조건식 중 true가 되는 else if 블록만 실행하고 전체 if문을 벗어난다.
  • 모든 조건식이 false일 경우 else 블록을 실행하고 if문을 벗어난다.
if (조건식 1) {
	// 조건식1이 true일 경우 실행
} else if (조건식 2) {
	// 조건식1이 false && 조건식2가 true
} else {
	// 조건식 1 및 2가 false
}


중첩 if 문

if 문 블록 내부에 또다른 if 문 사용

중첩의 단계는 제한이 없다.

if (조건식1) {
	// 조건식1이 true
	if (조건식2) {
		// 조건식1 및 2가 true    
    } else {
    	// 조건식1이 true, 조건식2는 false
    }
} else {
	// 조건식1이 false
}

switch 문

변수의 값에 따라서 실행문이 결정된다.
defalut는 생략 가능하다.
switch문의 괄호에는 정수타입(byte, char, short, int, long)과 문자열 타입(String) 변수를 사용할 수 있다.

  • Java 11 이전 문법
char grade = 'B';

int score = 0;
switch (grade) {
	case 'A':
    case 'a':
    	score = 100;
        break;
    case 'B':
    case 'b':
    	score = 100 - 20;
    	break;
    default:
    	score = 60;
}
  • Java 12 이후부터
    • switch문에 Expressions(표현식)을 사용할 수 있다.
char grade = 'B';

int score = 0;
switch (grade) {
	case 'A','a' -> score = 100;
    case 'B','b' -> score = 100 - 20;
    default -> score = 60;
}
char grade = 'B';

int score = switch (grade) {
		case 'A','a' -> 100;
    	case 'B','b' -> { 
        	int result = 100 - 20;
            // java 13부터 가능
            yield result;
        }
    	default -> 60;
}

for 문

똑같은 실행문을 반복적으로 실행해야 할 경우에 사용한다.
정해진 횟수만큼 반복한다.

int sum = 0;
for (int i=0; i<=100; i++) {
	sum += i;
}

다음은 for문의 실행 흐름을 도식화한 것이다.

조건식, 실행문, 증감식, 조건식 ...을 반복하다가 조건식이 false이면 for문을 종료한다.

초기화식에서 선언된 변수는 for문 블록 안에서만 사용되는 로컬 변수이다.

  • for문 작성 시 주의점
    초기화식에서 부동 소수점을 쓰는 float타입을 사용하지 말아야 한다.

중첩 for 문

for문 안에 또 다른 for문을 내포할 수 있다.
이를 중첩된 for문이라고 한다.
바깥 for문이 한번 실행될 때마다 중첩된 for문은 지정된 횟수만큼 반복하고 다시 바깥 for문으로 돌아간다.

// 구구단 출력
for (int i=2; i<10; i++) {
	System.out.println("***" + i + "단***");
	for (int j=1; j<10; j++) {
    	System.out.println(i + " X " + j + " = " + i*j);
    }
}

while 문

  • 조건이 true일 경우에 계속해서 반복하고, false가 되면 반복을 멈추고 while문을 종료한다.
  • 다음은 while문의 실행 흐름을 보여준다.
int i = 1;
while (i <= 10) {
	System.out.println(i + " ");
	i++;
}

do-while 문

  • while문은 시작할 때부터 조건식을 평가하여 블록 내부를 실행할지 결정하지만, do-while문은 블록 내부를 먼저 실행시키고 실행 결과에 따라 반복 실행을 계속할지 결정한다.
  • 다음은 do-while문의 실행 흐름을 보여준다.
Scanner sc = new Scanner(System.in);

System.out.println("메시지를 입력하세요.");
System.out.println("종료하려면 q를 입력하세요.");

String inputStr;
do {
	System.out.print(">");
    inputStr = sc.nextLine();
    System.out.println(inputStr);
} while (!inputStr.equals("q"));

break 문

  • 반복문(for, while, do-whille)을 실행 중지하거나 조건문인 switch문을 종료할 때 사용한다.
  • 이는 대개 if문과 같이 사용되어 조건식에 따라 for문과 while문을 종료한다.

    반복문이 중첩되어 있을 경우
    break문은 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료시키지 않는다.

중첩 반복문에서 바깥쪽 반복문까지 종료시키려면 바깥쪽 반복문에 이름(Lable)을 붙이고, break Label;을 사용하면 된다.

Outter: for (int i=1; i<10; i++) {
	for(int j=1; j<10; j++) {
    	System.out.println(i + " X " + j + " = " + i*j);
        if (j==4) {
        	break Outter;
      	}
    }
}

continue 문

  • 반복문(for, while, do-while)에서만 사용된다.
  • 블록 내부에서 continue 문을 만나면, 블록의 다음 내용은 건너뛰고 증감식(for) 또는 조건식(while, do-while)으로 바로 이동한다.
  • 대개 if문과 같이 사용된다.
    • 특정 조건을 만족하는 경우 continue문을 실행해서 그 이후의 문장을 실행하지 않고 다음 반복으로 넘어간다.
// 홀수만 출력
for (int i=1; i<10; i++) {
	if (i%2 == 0) {
		continue;
	}
	System.out.print(i + " ");
}

profile
공부

0개의 댓글