Java

자바(Java) - 조건문과 반복문(if, switch, for, statement)

신동편 2023. 3. 8. 23:22
728x90

코드의 실행 흐름은 무조건 위에서 아래로 한 문장씩 순차적으로 진행된다.

하지만 조건에 따라 문장을 건너뛰고, 같은 문장을 반복해서 수행해야 할 때가 있다.

 

프로그램의 흐름을 바꾸는 역할을 하는 문장들을 제어문(control statement)이라고 한다.

제어문에는 조건문과 반복문이 있는데, 조건문은 조건에 따라 다른 문장이 수행되도록 하고,

반복문은 특정 문자들을 반복해서 수행한다.

 


조건문

if문

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

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

if의 뜻은 '만일~이라면 { }안에 문장들을 수행하라'이다.

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

 


 

블럭{}

 

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

'{'로 시작해서 '}'로 끝난다. '}'의 다음에 문장을 끝을 의미하는 ';'를 붙이지 않는다.

 

블럭 안에는 보통 여러 문장을 넣지만 한 문장만 넣거나 아무런 문장도 넣지 않을 수 있다.

만일 블럭 내에  문장이 하나일때는 아래와 같이 괄호를 생략할 수 있다.

if (조건식)
	//문장
//또는
if (조건식) //문장

if(조건식)
	//문장1
    //문장2      //문장1은 조건문에 포함되지만 문장2는 조건문에 포함되지 않는다.

 


 

if - else

 

if - else문은 if문의 변형이다.

if문에 else블럭이 더 추가된 것이다.

else의 뜻은 '그 밖의 다른'으로 조건식의 결과가 참이 아닐 때,

즉 참이 아닐 때 else블럭 안에 있는 문장들이 실행하라는 뜻이다.

if (조건문){
	//조건이 참일 때 수행
}else {
	//조건이 거짓일 때 수행
}

 


 

 if - else if문

 

if - else if문은 처리해야할 경우의 수가 3개 이상일 때 사용할 수 있다.

if (조건식1) {
	//조건식1이 참일 때 실행
} else if (조건식2) {
	//조건식2가 참일 때 실행
} else if (조건식3) {
	//조건식3이 참일 때 실행
} else (조건식) {
	//어느 조건도 만족하지 못할 때 실행
}

 


 

중첩 if문

 

if문의 블럭 내에 또 다른 if문을 포함시키는 것도 가능하다.

이것을 중첩 if문이라고 한다. 중첩의 횟수에는 제한이 없다.

if (조건식1) {
		//조건식1이 참일 때 수행될 문장 
		if (조건식2) {
        	//조건식2가 참일 때 수행될 문장
        } else {
        	//조건식2가 거짓일 때 수행될 문장
        }
} else {
	//조건식 1이 거짓일 때 수행될 문장
}

중첩되는 if문의 범위가 명확히 구별될 수 있도록 작성해야 한다.

 


 

switch문

 

switch문은 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하므로 알아보기 쉽다.

그래서 처리해야할 경우의 수가 많을 경우에는 if문보다 switch문으로 작성하는 것이 좋다.

하지만, switch문은 제약이 많기 때문에 경우의 수가 많아도 if문으로 작성해야 하는 경우도 있다.

 

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

switch (조건식) {
		case 값1:
        	//조건식의 결과가 값1과 동일할 경우 실행
        
        	break;
        case 값2:
        	//조건식의 결과가 값2과 동일할 경우 실행
        
        	break;
       	case 값3:
        	//조건식의 결과가 값3과 동일할 경우 실행
            
            break;
        default:
        	//조건식에 일치하는 값이 없을 경우 실행
}

 

조건식의 결과와 일치하는 case문이 하나도 없을 경우 default문으로 이동한다. 

default문은 if문의 else와 같은 역할을 수행하는데, 위치는 어디라도 상관 없으나 보통 마지막에 놓기 때문에 break문을 쓰지 않아도 된다.

 

switch문에서 break문은 각 case문의 영역을 구분하는 역할을 한다.

만일 break문을 적지 않으면 case문 사이의 구분이 사라지므로 다른 break문을 만나거나 switch문 블럭{}의 끝을 만날 때까지 나오는 모든 문장들을 수행하게 된다.

 

switch문의 제약조건

1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다.

2. case문의 값은 정수 상수(문자 포함), 문자열만 가능하며, 중복되지 않아야 한다.

 


 

Math.random()

 

난수를 얻기 위해 사용한다. 이 메서드는 0과 1사이의 속하는 하나의 double값을 반환한다.

0.0은 포함되지만 0.1은 포함되지 않는다.

0.0 <= Math.random() < 1.0

1과 n 사이에 정수를 구하기

//각 변에 정수 n을 곱한다.
0.0 * n <= Math.random() * n < 1.0 * n 

//각 변을 int형으로 변환한다.
(int)0.0 <= (int)(Math.random() * n) < (int)n.0

//각 변에 1을 더한다.
0 + 1 <= (int)(Math.random() * n) + 1 < n + 1


1 <= (int)(Math.random() * n) + 1 < n + 1 
//1과 n사이에 정수 중 하나를 얻을 수 있다.

 


반복문

for문

for (초기화; 조건식; 증감식) {
		//조건식이 참인 동안 수행
}

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

제일먼저 초기화가 수행되고, 그 이후부터는 조건식이 참인동안 조건식 > 수행될 문장 > 증감식 순서대로 계속 반복된다.

그러다가 조건식이 거짓이 되면 for문 자체를 빠져나가게 된다.

 

초기화

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

보통 변수 하나로 for문을 제어하지만, 둘 이상의 변수가 필요할 때는 ','를 구분자로 초기화한다.(두 변수의 타입은 같아야 한다.)

 

 

조건식

 

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

조건식의 문장이 잘못 작성하면 블럭{} 내의 문장이 한번도 수행 되지 않거나 무한 반복에 빠지기 쉽다.

 

 

증감식

 

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

증감식에 의해서 변수의 값이 변하다가 조건식이 거짓이 되면 for문을 벗어나게 된다.

 

조건식이 생략된 경우 참으로 간주되어 무한 반복문이 된다. 

이 경우 블럭{}안에 if문을 넣어서 특정 조건을 만족하면 for문을 빠져나오게 해야한다.

 


 

중첩 for문

 

for문 안에 또 다른 for문을 포함시키는 것이 가능하다.

중첩 횟수에는 거의 제한이 없다. 

 


 

while문

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

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


 

for문과 while 문 비교

while문보다 for문이 더 간결하고 알아보기 쉽다. 

초기화나 증감식이 필요하지 않다면 while문이 더 적합할 것이다.

 


 

do - while문 

 

while문의 변형으로, 기본 구조는 같으나 조건식과 블럭{}의 순서를 바꿔놓은 것이다.

그래서 블럭{}을 먼저 수행한 후 조건식을 평가한다. while문은 조건식에 따라서 블럭{}안에 내용이 한번도 수행되지 않을 수 있지만 do - while문은 최소한 한번은 수행할 것을 보장한다.

do {
	//조건식의 연산결과가 참일 때 수행될 문장(처음 한번은 무조건 실행)
} while (조건식);

break문

 

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

주로 if문과 함께 사용되어 특정 조건을 만족할 때 반복문을 벗어나게 한다.

 


continue문

 

continue문은 반복문 내에서만 쓸 수 있으며,

반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.

for문의 경우 증감식으로 이동하며, while문과 do-while문의 경우 조건식으로 이동한다.

 

주로 if문과 함께 사용되어 특정 조건을 만족하는 경우에 continue문 이후의 문장들을 수행하지 않고 다음 반복으로 넘어가서 계속 진행하도록 한다.

전체 반복중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용하다.

 


이름 붙은 반복문

 

break문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에, 여러 개의 반복문이 중첩된 경우에는 break문으로 중첩 반복문을 완전히 벗어날 수 없다.

이 때 중첩 반복문 앞에 이름을 붙이고 break문과 continue문에 이름을 지정해서 하나 이상의 반복문을 벗어나거나 반복을 건너 뛸 수 있다.

 


Eli - Sad

 

728x90