Home > Java > Live-Study > 제어문

제어문
java 백기선 Live Study

목적

자바가 제공하는 제어문을 학습하세요

학습할 것

  1. 선택문
  2. 반복문

1. 선택문


Switch

if 같은 조건문은 참, 거짓밖에 없기 때문에 경우가 많아질 수록 else if를 계속 추가해야하며 else if 에 있는 조건식들을 일일히 다 계산하며 내려가야 하므로 처리 시간이 늘어난다. 이를 해결하기 위해 switch(선택)문이 있고 하나의 조건식으로 많은 수를 처리할 수 있으며 표현도 간결해 가독성이 높다.

switch문은 조건식을 먼저 계산한 다음, 결과랑 일치하는 case 문으로 이동한다. 그리고 case 문의 내용을 수행하며 break를 만났을 때 switch문을 빠져나오게 된다.

또한 조건식의 결과와 일치하는 case 문이 없는 경우, default 로 지정한 문을 찾아가 내용을 수행한다. 그렇기 때문에 default를 기마지막에 놓는다. (이렇게 하면 break문이 필요 없음)

책에서는 break문을 사용해 권한 주는 코드로도 활용할 수 있다 한다. (ex )

swich (level){
	case 3 :
		grantDelete();
	case 2 :
		grantWrite();
	case 1 :
		grantRead();
		break;
}

간단히 말해서 case에 break를 주지 않음으로 아래 권한 부여 함수들을 다 실행시킬 수 있다는 것이다.

switch 제약조건

  1. 조건식의 결과값은 반드시 정수 또는 문자열여야 한다.
  2. 중복되지 않아야 한다.
  3. case문의 값은 반드시 상수이어야 한다.

※ tip switch 안에 switch로 중첩이 가능한다.-> break문 으로 탈출 조심!

2. 반복문


반복문은 반복적으로 수행될 때 사용되며, for, while, do - while이 있다.

1. for

for문은 반복 횟수를 알고 있을 때 정확한다. 구조가 복잡하지만, 직관적이라 오히려 이해하기 쉽다.

for문의 구조와 수행순서

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

① 초기화 -> ② 조건식 -> ③ 증감식 -> ④ 수행될 문장 순서대로 진행한다.

초기화

변수 초기화 하는 부분이며 처음 한번만 수행한다. ‘,’ 를 통해서 두 개 이상의 변수를 초기화 가능하다.(단 변수 타입은 같아야 한다.)

조건식

참이면 반복하고 거짓이면 반복 멈춘다. (무한루프에 빠지지않게 조건식을 잘 세워야 한다.)

증감식

반복문 제어 변수를 증감시키는 식이다. ex) i++, i==, i+=2, i* = 3

쉼표를 이용해서 두 문장 이상을 하나로 연결해 쓸 수 있다. ex) for( ~~; ~~; i++, j– )

for문에서는 for(;;){} 을 사용하면 계속 참으로 간주되어 무한 루프로 돌릴 수 있다. (break로 탈출)

항상된 for문

JDK 1.5부터 배열과 컬렉션에 저장된 요소에 접근할 때 편리한 방법의 문법이 추가되었다.

for( 타입 변수명, 배열 또는 컬렉션) {
	수행문장
}

위 for문을 사용할 때는 배열, 컬렉션 만 가능하고 안에 저장된 값들을 하나씩 읽어와 변수에 저장해 반복문이 돌아간다.

예시

for (int i=0; i < arr.length; i++) -> for(int tmp : arr)

2. while

while은 for문과 다르게 구조가 간단하며 참인동안 반복될 문장들을 적어놓는다.

while(조건식){
    반복될 문장
}

for문과 while문 비교

for문은 초기화, 조건식, 증감식을 한 곳에 모아놓은 것일 뿐 while문과 다르지 않아 항상 서로 형변환이 가능하다. 초기화나 증감식이 필요하지 않는 경우면 while문이 더 적합하다.

while문의 조건식은 생략 불가

때문에 while문의 조건식이 항상 참이 되도록 하려면 안에 true를 넣어주면 된다.

3. do - while

while문의 변형으로 조건식과 불럭의 순서를 바꿔놓은 것이다. 따라서 블럭이 먼저 수행한 후에 조건식을 평가한다.

do {
	수행될 문장
}while(조건식);

따라서 최소한 한번은 수행될 것을 보장한다.

4. 부가적

1.break 문

break문은 switch에서 설명 했는데 일단은 실질적인 의미로 break문은 자신이 포함된 가장 가까운 반복문을 벗어나는 문이다. 주로 if문과 함께 사용되어 특정 조건을 만족하면 반복문을 벗어나도록 한다.

2.continue 문

반복문 내에서만 사용될 수 있으며, 반복 중 continue를 만나게 되면 가장 가까운 반복문의 끝으로 이동하여 다음 반복문으로 넘어간다.

3.이름 붙은 반복문

break와 continue 같이 가장 가까운 반복문 외에 중첩되어 있는 반복문들 중에서 지정된 위치로 탈출하고 싶다 하면 break, continue문에 이름을 지정해 반복을 옮겨다닐 수 있다.

ex)

outer :
while (true) {
	...
	for(;;) {
		...
		if(num == 0)
			break;
		if(num == 99)
			break outer;
		...
	} // for(;;)

} // while(true)

num에 0을 입력하면 break;가 실행되면서 다시 for문 안의 문장들을 실행할 수 있고, num에 99를 입력했을 때는 for문에서 break outer;를 통해 for문과 while문 모두를 벗어날 수 있게 된다.

Reference

남궁성. Java의 정석