카테고리 없음

[JAVA의 정석] Ch 4. 조건문과 반복문

-minari- 2025. 3. 15. 12:17

1. 조건문 - if, switch


1) if 문

if 문은 가장 기본적인 조건문이다. 

만일(if) 조건식이 참(true)이면 괄호{} 안의 문장들을 수행하라는 의미로 이해하면 된다.

if(조건식){
	// 조건식이 참(true)일 때 수행될 문장들을 적는다.
}

 

- if 문에 사용되는 조건식은 일반적으로 비교 연산자와 논리 연산자로 구성된다

- 자바에서는 조건식의 결과는 반드시 true 또는 false이어야 한다

 

- 괄호{}를 이용해서 여러 문장을 하나의 단위로 묶을 수 있는데, 이것을 블럭(block)이라고 한다. 

- 블럭 내 문장이 하나 뿐인 경우 괄호를 생략할 수 있지만 가능하면 생략하지 않고 사용하는 것이 바람직하다

 

2) if - else 문

if 문에 else 블럭이 더 추가되었다

else의 뜻이 '그 밖의 다른'이므로 조건식의 결과가 참이 아닐 떄, 즉 거짓일 때 else 블럭의 문장을 수행하라는 뜻이다.

if(조건식){
	// 조건식이 참(true)일 때 수행될 문장들을 적는다.
} else {
	// 조건식이 거짓(false)일 때 수행될 문장들을 적는다.
}

 

3) if - else if 문

if - else 문은 두 가지 경우 중 하나가 수행되는 구조인데, 처리해야 할 경우의 수가 셋 이상인 경우에는 다른 방법이 필요하다. 첫 번째 조건식부터 순서대로 평가해서 결과가 참인 조건식을 만나면, 해당 블럭 {}만 수행하고 'if - else if'문 전체를 벗어난다. 만일 결과가 참인 조건식이 하나도 없으면, 마지막에 있는 else 블럭의 문장들이 수행된다.

if(조건식1){
	// 조건식1이 참(true)일 때 수행될 문장들을 적는다.
} else if(조건식2){
	// 조건식2이 연산 결과가 참(true)일 때 수행될 문장을 적는다.
} else if(조건식3){    // 여러 개의 else if문을 사용할 수 있다.
	// 조건식3이 연산 결과가 참(true)일 때 수행될 문장을 적는다.
} else {    // 마지막에는 보통 else 블럭으로 끝나며, else 블럭은 생략 가능하다
	// 위의 어느 조건식도 만족하지 않을 떄 수행될 문장들을 적는다.
}

 

4) 중첩 if 문

if 문의 블럭 내에 또 다른 if 문을 포함시키는 것이 가능한데 이것을 중첩 if 문이라고 부르며 중첩의 횟수에는 거의 제한이 없다.

if (조건식1) {
	// 조건식1의 연산 결과가 true일 때 수행될 문장들을 적는다.
    if (조건식2) {
    	// 조건식1과 조건식2가 모두 true일 때 수행될 문장들
    } else {
    	// 조건식1이 true이고, 조건식2가 false일 때 수행되는 문장들
    }
} else {
	// 조건식1이 false일 때 수행되는 문장들
}

 

-내부의 if 문은 외부의 if 문보다 안쪽으로 들여쓰기를 해서 두 if 문의 범위가 명확히 구분될 수 있도록 작성해야 한다.

 

5) switch 문

switch 문은 조건식을 먼저 계산한 다음, 그 결과와 일치하는 case 문으로 이동한다. 이동한 case 문 아래에 있는 문장들을 수행하며, break 문을 만나면 전체 switch 문을 빠져나가게 된다.

switch (조건식){
	case1 : 
    	// 조건식의 결과가 값1과 같을 경우 수행될 문잗들
        // ...
        break;
	case2 : 
    	// 조건식의 결과가 값2과 같을 경우 수행될 문잗들
        // ...
        break;
    // ...
    default :
    	// 조건식의 결과와 일치하는 case가 없는 경우 수행될 문장들
}

 

- switch 문에서 break 문은 각 case문의 영역을 구분하는 역할을 하는데, 만일 break 문을 생략하면 case 문 사이의 구분이 없어지므로 다른 break 문을 만나거나 switch 문 블럭{}의 끝을 만날 때까지 나오는 모든 문장들을 수행한다.

 

- switch 문의 조건식은 결과값이반드시 정수 또는 문자열이어야 한다

- case 문의 값은 정수 상수만 가능하며 중복되지 않아야 한다

int num, result;
final int ONE = 1;

switch(result){
    case '1':      // OK. 문자 리터럴 (49와 동일)
    case ONE:      // OK. 정수 상수
    case "YES":    // OK. 문자열 리터럴
    case num:      // 에러. 변수는 불가
    case 1.0:      // 에러. 실수는 불가
}

  

- case 문은 한 줄에 하나씩 또는 한 줄에 여러개를 붙여쓰기도 가능하다

case 3: case 4: case 5:
	System.out.println("현재 계절은 봄입니다");

 

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


1) for 문

for 문은 '초기화'. '조건식', '증감식', '블럭 {}' 모두 44부분으로 이루어져 있으며, 조건식이 참인 동안 블럭 {} 내의 문장들을 반복하다 거짓이 되면 반복문을 벗어난다.

for (초기화; 조건식; 증감식){
	// 조건식이 참일 때 수행될 문장들을 적는다
}

 

- 제일 먼저 '초기화'가 수행되고 그 이후부터는 조건식이 참이 동안 '조건식 -> 수행될 문장 -> 증감식'의 순서로 계속 반복된다. 그러다가 조건식이 거짓이 되면, for 문 전체를 빠져나가게 된다

 

초기화

반복문에 사용될 변수를 초기화하는 부분이며 처음에 한 번만 수행된다.

 

보통은 하나의 변수로 for문을 제어하지만, 둘 이상의 변수가 필요할 때는 콤마를 구분자로 변수를 초기화하면 된다.

단, 두 변수의 타입은 같아야 한다

for(int i=0; i<10; i++)

for(int i=0, j=4; i<10; i++)

 

조건식

조건식의 값이 참이면 반복을 계속하고, 거짓이면 반복을 중단하고 for문을 벗어난다.

 

증감식

반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식이다.

 

 

- 초기화식, 조건식, 증감식 모두 필요하지 않으면, 생략 가능하다.

- for문에 사용되는 변수의 수가 적은 것이 더 효율적이고 간단하므로 변수들의 관계를 잘 파악하여 불필요한 변수의 사용을 줄이는 것이 좋다

 

중첩 for 문

if 문 안에 또 다른 if 문을 넣을 수 있는 것처럼, for 문 안에 또 다른 for 문을 포함시키는 것도 가능하다. 그리고 중첩의 횟수는 거의 제한이 없다.

for(int i=0; i<10; i++){
    for(int j=0; j<10; j++){
    // ...
    }
}

 

향상된 for 문

배열과 컬렉션에 저장된 요소에 접근할 때 기존보다 편리한 방법으로 처리할 수 있다.

for ( 타입 변수명 : 배열 또는 컬렉션) {
	// 반복될 문장
}

 

2) while 문

while 문은 조건식이 '참인 동안', 즉 조건식이 거짓이 될 때까지 블럭 {} 내의 문장을 반복한다.

 

while 문은 먼저 조건식을 평가해서 조건식이 거짓이면 문장 전체를 벗어나고, 참이면 블럭 {} 내의 문장을 수행하고 다시 조건식으로 돌아간다. 조건식이 거짓이 될 때까지 이 과정이 반복된다

while (조건식) {
	// 조건식의 연산 결과가 참인 동안, 반복될 문장들을 적는다
}

 

- .while 문은 조건식을 생략할 수 없다. while 문의 조건식이 항상 참이 되도록 하려면 반드시 true를 넣어야 한다.

 

 

3) do - while 문

do - while 문은 while 문의 변형으로 기본적인 구조는 while 문과 같으나 조건식과 블럭 {}의 순서를 바꿔 놓은 것이다. 그래서 while 문과 반대로 블럭 {}을 먼저 수행한 후에 조건식을 평가한다. 따라서 do - while 문은 최소한 한 번은 수행될 것을 보장한다

do {
	// 조건식의 연산 결과가 참일 때 수행될 문장들을 적는다
} while (조건식);

 

4) break 문

break 문은 자신이 포함된 가장 가까운 반복문을 벗어난다.

 

 

5) continue 문

continue 문은 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue 문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.

 

 

6) 이름 붙은 반복문

break 문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에, 여러 개의 반복문이 중첩된 경우에는 break 문으로 중첩 반복문을 완전히 벗어날 수 없다. 이 때는 중첩 반복문 앞에 이름을 붙이고 break 문과 continue 문에 이름을 지정해 줌으로써 하나 이상의 반복문을 벗어나거나 반ㄴ복을 건너뛸 수 있다.

Loop1 : for(int i=0; i<10; i++){
        for(int j=0; j<10; j++){
            if(j == 5)
            	break Loop1;
         }
}