Study

[JAVA/자바] 제어문 - 조건문 / 반복문 / 분기문

_유니 2022. 10. 26. 09:03

 

조건문

프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 조건에 따라 다른 문장이 수행되도록 함

* 선택적으로 실행시키고자 할 때 사용

* "조건식"을 통해 참이냐 거짓이냐를 판단해서 참일 경우 그에 해당하는 코드 실행

* 조건식의 결과 true / false 여야 한다

* 조건문은 크게 if문과 switch문으로 나뉨!

* 보통 조건식에서는 비교 연산자 (대소, 동등), 논리 연산자 (&&, ||)를 주로 사용

* 기본자료형들끼리 동등 비교 시에는 ==, != 사용 가능 (정상적으로 비교됨)
단, 참조자료형은 동등 비교 시 ==, != 사용 시 정상적으로 비교가 안됨 (ex. String)
=> equals() 메소드를 이용해서 비교해야 됨
[표현법] 문자열.equals(문자열);


- if문

if(조건식1) {
	수행될 문장;
} else if(조건식2) {
	수행될 문장;
}else if(조건식3) {
	수행될 문장;
} else {
	수행될 문장;
}

 

- if


[표현법]

if(조건식) {
		a
}

조건식의 결과 값이 true면 a의 내용 실행
false면 실행하지 않음

> 예시

if(num > 0) {
          System.out.println("양수입니다.");
}

 

- if ~ else

 

[표현법]

if(조건식) {
		a
} else {
		b
}

조건식의 결과 값이 true면 a의 내용 실행
false면 b의 내용 실행

> 예시

if(num % 2 == 0) {
           System.out.println("짝수");
} else {
          System.out.println("홀수");
}

 

- if ~ else if ~ else

(같은 비교 대상으로 여러 개의 조건을 제시해야 될 경우)

[표현법]

if(조건식1) {
			a
} else if(조건식2) {
			b
} else {
			c
}

조건식1의 결과 값이 true면 a의 내용 실행
조건식2의 결과 값이 true면 b의 내용 실행
모두 false면 c의 내용 실행

* if는 true, false와 상관없이 조건절 실행,
if ~ else if ~ else는 조건문이 true면 이후 조건은 실행하지 않음
* else 생략 가능

> 예시

if(month ==1 || month == 2 || month == 12) {
            season = "겨울";
} else if(month >= 3 && month <= 5) {
            season = "봄";
} else if(month >= 6 && month <= 8) {
            season = "여름";
} else if(month >= 9 && month <= 11) {
            season = "가을";
} else {
           season = "해당하는 계절이 없습니다.";
}

 

- 중첩 if

 

[표현법]

if(조건식1) {
   if(조건식2) {
     if(조건식3) {
       수행될 문장;
     } else if(조건식4) {
      수행될 문장;
     } else {
      수행될 문장;
 } else {
   수행될 문장;
 }
} else if(조건식5) {
   수행될 문장;
} else {
  수행될 문장;
}


> 예시

if(month ==1 || month == 2 || month == 12) {
            season = "겨울";
            if(temperature <= -15) {
                              season += "한파 경보";
            } else if(temperature <= -12) {
                              season += "한파 주의보";
            }
} else if(month >= 3 && month <= 5) {
            season = "봄";
} else if(month >= 6 && month <= 8) {
            season = "여름";
            if(temperature >= 35) {
                              season += "폭염 경보";
            } else if(temperature >= 33) {
                              season += "폭염 주의보";
            }
} else if(month >= 9 && month <= 11) {
            season = "가을";
} else {
           season = "해당하는 계절이 없습니다.";
}

 

- switch문

switch(조건식) {
case 값1:
	수행될 문장;
	break;
case 값2:
	수행될 문장;
	break;
default:
	수행될 문장;
}

조건식 하나로 많은 경우의 수를 처리할 때 사용하며
이때 조건식의 결과는 정수 또는 문자, 문자열

조건식의 결과 값과 일치하는 case문으로 이동
default문은 일치하는 case문이 없을 때 수행 (= else)

switch문은 동등 비교로 밖에 수행되지 않음

실행할 구문만 실행하고 자동으로 빠져나오지 못함!
=> 직접 break;문 작성해야 됨

*default : 위에 값들과 모두 일치하지 않을 경우 실행할 코드 (생략 가능)

> 예시

switch(num % 5) {
case 1 : 
		team = "1조";
        break;
case 2 : 
		team = "2조";
        break;
case 3 : 
		team = "3조";
        break;
case 4 : 
		team = "4조";
        break;
default : 
		team = "다시";
}

 

반복문

프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 특정 문장들을 반복해서 수행하도록 함

* 반복문은 크게 for문과 while문으로 나뉨!

- for문

- for

 

[표현법]

for (초기식; 조건식; 증감식) {
			수행될 문장;
}

1회전 : 초기식 확인 후 조건식 확인
조건식이 true면 문장 수행
조건식이 false면 수행하지 않음
2회전 : 증감식 연산 후 조건식 확인
조건식이 true면 문장 수행
조건식이 false면 수행하지 않음

* 2회전 이상부터는 모두 2회전과 동일하고
조건식이 false가 나올 때까지 문장 수행

- 초기식 : 반복문이 수행될 때 "처음에 단 한 번만 실행되는 구문"
(보통 반복문 안에서 사용될 변수를 선언 및 초기화하는 구문)

- 조건식 : "반복문이 수행될 조건"을 작성하는 구문
(보통 초기식에 제시된 변수를 가지고 조건식을 작성함)

- 증감식 : 반복문을 제어하는 변수 값을 증감시키는 구문
(보통 초기식에 제시된 변수를 가지고 증감 연산자(++, --)를 사용함)

* for문 안에 초기식, 조건식, 증감식 각각 생략 가능하긴 함 ( 단, ; ; 은 반드시 필수)
=> for (; ;) => 무한 수행

> 예시

for (int i = 1; i <= 5; i++) {
	System.out.println(i + "출력");
}

> 실행 결과

1 출력
2 출력
3 출력
4 출력
5 출력

 

 

- 중첩 fol문

 

[표현식]

for (초기값1; 조건식1; 증감식1) {
		수행될 문장1;
        for (초기값2; 조건식2; 증감식2) {
        		수행될 문장2;
        }
        수행될 문장3;
}

for문에 진입하면 수행될 문장1을 먼저 수행하고 두 번째 for문에 진입하면

조건식2가 false가 될 때까지 수행될 문장2를 수행 후 나오면

수행될 문장3을 수행하고 조건식1로 돌아와 true면 다시 반복

 

for (초기값1; 조건식1; 증감식1) {
		수행될 문장1;
        for (초기값2; 조건식2; 증감식2) {
        		수행될 문장2;
                break;
        }
        수행될 문장3;
        [break;]
}

두 번째 for문에 break를 만날 경우 반복문을 나가 수행될 문장3을 수행 후

다시 첫 번째 for문을 실행하지만

마지막 break가 있다면 수행될 문장3을 수행 후 for문을 완전히 빠져나감

 

 

- while문

 

- while

 

[표현법]

초기식; (생략가능)
while (조건식) {
		수행될 문장;
        증감식; (생략가능)
}

조건식이 true일 때 문장 수행

문장 수행이 끝나면 조건식

다시 확인 후 true면 수행,

조건식이 false가 될 때까지 수행

조건식이 false가 되면 반복문 종료

 

* { } 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요

 

* for문과 다른 점

  초기식 값을 출력할 수 있다

 

> 예시

int i = 1;
while (i <= 5) {
	System.out.println(i + " 출력");
    i++;
}

> 실행 결과

1 출력
2 출력
3 출력
4 출력
5 출력

 

 

- do ~ while

 

[표현법]

do {
		수행될 문장;
        [증감식 or 분기문];
} while (조건식);

do 안의 내용 먼저 실행

조건식 확인 후 true면 문장 수행,

false면 종료

while 뒤에 ; 꼭 필요

 

* while과 do ~ while의 차이점 

  do ~ while은 조건문이 true가 아니더라도 무조건 한 번 이상 수행

 

* { } 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요

 

> 예시

int i = 1;
do {
	System.out.println(i + "출력");
    i++
} while (i <= 5);

> 실행 결과

1 출력
2 출력
3 출력
4 출력
5 출력

 

 

분기문

 

- break

반복문에서는 break문 자신이 포함된 가장 가까운 반복문을 빠져나가는 구문

 

*  switch문의 break;와의 차이점

   switch문의 break;는 switch문만을 빠져나가는 구문

 

> 예시

for (int i = 1;; i++) {
		System.out.println(i + " 출력");
        
        if (i >= 5) {
        		break;
        }
}

 

 

- continue

반복문 내에서만 사용 가능하며 반복문 실행 시 continue  아래 부분은 실행하지 않고 반복문 다시 실행

 

* for문의 경우 증감식으로 이동,

  while (do ~ while)문의 경우 조건식으로 이동

 

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

 

> 예시

for (int i = 1; i <= 5; i++) {
		if (i % 2 == 0) {
        		continue;
        }
        System.out.println(i + " 출력");
}