for

while

이 둘은 반복 실행문(이하 반복문)이라고 부른다.

 

사용 양식은 다음과 같다

for(  ;  ;  ){ 
//반복시킬 명령
}

 

괄호(  )안에 반복의 횟수를 조절할수 있는 문구들를 ';' 으로 구분해서 입력하고
그리고 그 조절된 횟수만큼 {  }안의 내용을 반복 실행한다.

 

위의 예제처럼 아무런 조건도 넣지 않을 경우 무한 루프가 발생한다.

 

1부터 10까지의 숫자를 곱하는 행위를 for문으로 표현해본다면

 

int i, a=1;
for(i = 1; i <= 10; i++){
	a *= i;
}

이런 식으로 표현할 수 있겠다 (이 코드가 정답은 아니고 그냥 예제일 뿐입니다.)

 

그렇다면 이 코드를 볼 때

i와 a라는 변수가 존재하고, i가 1에서부터 10까지 무엇인가를 하는 명령이겠구나

라는 생각을 할 수 있다.

 

이는 for문을 선언할 때나 코드를 해석할 때 구조적인 파악을 좀 더 쉽고 빠르게 할 수 있다는 장점으로 작용한다.

 

그러면 1부터 10까지의 숫자를 곱하는 행위를 while문으로 표현해보자.

 

int i = 1, a = 1;

while( i<=10 ) {
    a *= i;
    i++;
}

줄 수는 더 길어진 것처럼 보이지만

while문은 for문에 비하여 선언할 때는 조건만 확실히 하면 돼서 그 점은 더 간편하다고 할 수 있다.

while문은 확실히 i<=10 이라는 조건이 잘 보인다.

조건만 참이라면 계속해서 반복을 하기 때문에 for문에 비하여 더 간편한 점도 존재한다.

이는 while의 장점으로 작용한다.

 

while에 넣는 조건으로 true 혹은 1을 넣으면 무한히 반복하게 된다.

// 입력 받은 정수의 구구단을 출력하는 문구 
int a;
Scanner sc = new Scanner(System.in);
while(true) { // true 대신에 1을 넣어도 된다.
    System.out.printf("출력할 단을 입력하세요(끝내려면 0 입력) : ");
    dan = sc.nextInt();
    if(a == 0) break; // 0을 입력하면 반복이 끝나지만, 
    int i = 1;		//0을 입력하지 않으면 계속 위로 돌아가서 단 입력부터 반복하게 됩니다.
    while(i<=9) {
        System.out.printf(" %d x %d = %d\n", a, i, a*i);
        i++;
    }
}
System.out.println("프로그램이 종료됩니다");

 

하지만 동시에 생기는 단점으로는

적절한 시기, 혹은 적절한 데이터를 정확하게 사용해야한다는 점이 있다.

 

 

1. for와 while의 장단점

(1) for의 장점과 단점

장점 : 선언시 혹은 코드 읽을 때 그 구조를 좀 더 확실하게 구상할 수 있다.

단점 : while에 비해 코드가 길어지고 더러워질 가능성이 높다.

 

(2) while의 장점과 단점

장점: for에 비해 구문이 간결하고 조건 중심으로 코드를 짤때에는 강력하다.

단점: 좀 더 정교하고 정확하게 시기와 데이터를 파악해서 사용해야만한다.

 

 

 

 

 

 

반복문에 사용되는 break나 continue 등은 둘다 공통적으로 사용할 수 있다.

 

break나 continue는 

 

"특정한 조건을 만나면 반복을 끝내라"는 뜻이라고 보면 된다.

 

 

1부터 특정한 정수까지 짝수의 합을 출력하는 과정을 예제로 그 둘을 비교해보려고 한다.

 

// i가 1부터 10까지 늘어나면서 i가 홀수일 경우에는 밑에 실행해야하는 조건들을 실행하지 않고 
// 바로 i에 +1을 한 다음 조건으로 들어갑니다.
sum = 0;
for(i=1; i<=10; i++) {
    if( i%2 == 1)
        continue;   // 반복실행안에서 남아있는 아래 명령들을 실행하지 않고 다음 반복으로 이어지는 명령
    sum = sum + i;
    System.out.println("1부터 " + i + "까지의 합 : " + sum);
}


// i가 100까지 반복하게 되어 있지만 특정한 조건을 만족하면 100이 되어버리기 전에 반복이 종료됩니다.
sum = 0;
for(i=0; i<=100; i+=2) {
    if( i == 12)
        break;   // 특정 조건이 되었을 때 가장 가까운 반복문을 종료해버리는 명령
    sum = sum + i;
    System.out.println("1부터 " + i + "까지의 합 : " + sum);
}

둘 모두 1부터 10까지의 합은 30으로 정상출력되는 모습을 볼 수 있다.

 

추가적으로 주의해야할게 있다면

 

이중 for문으로 반복을 실행할 경우 break를 사용했을 때

반복문 전체가 끝나는게 아니라,

 

break를 중괄호로 감싸고 있는 반복만 종료된다는 점이다.

 

for( ; ; ){
	for( ; ; ){
    break; // 여기에 break를 사용할 경우 가장 가까운 for문만 종료되며
    }
    // 바깥의 for문은 계속 돌아가게 됩니다.
}

 

+ Recent posts