1. 반복문?
1부터 10까지 더해서 그 합을 계산하려면 어떻게 해야할까.
지금까지 배운 것만으로 코드를 작성하면 다음과 같을 것이다.
package loopexample;
public class BasicLoop {
public static void main(String[] args) {
int num = 1;
num += 2;
num += 3;
num += 4;
num += 5;
num += 6;
num += 7;
num += 8;
num += 9;
num += 10;
System.out.println("1부터 10까지의 합은 " + num + "입니다.");
}
그냥 보더라도 효율적이지 않은 코드들이다.
이렇게 반복되는 일을 처리할 때 사용하는 것이 바로 '반복문'이다.
자바에서 사용하는 반복문의 종류에는 while문, do-while문, for문 이렇게 세 가지가 있다.
모두 반복 수행을 한다는 것은 동일하지만 사용 방법에 차이가 있다.
2. while문
while문은 조건식이 참인 동안 수행문을 반복해서 수행한다.
어떤 조건식을 만족하는 동안 중괄호 { } 안의 수행문을 반복해서 처리하는 것이다.문법은 아래와 같다.
while(조건식) {
수행문 1;
...
} // 조건식이 참인 동안 반복 수행이 된다.
수행문 2;
위에서 작성했었던 1부터 10까지의 수를 더하는 프로그램을 while문으로 만들어보려 한다.while 반복문을 사용하려면 '1부터 10까지 숫자가 커지는 동안'을 조건으로 하고 1씩 증가하는 숫자를 더하는 작업을 하는 것이다.이를 코드로 표현하면 아래와 같다.
package loopexample;
public class WhileExample1 {
public static void main(String[] args) {
int num = 1;
int sum = 0;
while(num <= 10) { // num 값이 10보다 작거나 같을 동안
sum += num; // 합계를 뜻하는 sum에 num을 더하고
num++; // num에 1씩 더해간다
}
System.out.println("1부터 10까지의 합은 " + sum + "입니다.");
}
}
위의 while문은 num 변수와 sum 변수를 선언하면서 동시에 초깃값을 저장했다.
변수를 항상 초기화해야 하는 것은 아니지만, 이 예제에서는 반드시 초기화를 해야 한다.
* while문이 무한히 반복되는 경우
while문은 특정 조건을 만족하는 동안 반복되는 명령을 수행하고, 그렇지 않으면 수행을 중단한 후 while문을 빠져 나온다.
그런데 어떤 일을 수행할 때 무한 반복이 필요할 때가 있다.
예를 들어 인터넷 쇼핑몰이 24시간 서비스 하기 위해서는 쇼핑몰의 웹 서버가 끊임없이 돌아가야 하는 것처럼 말이다.
이럴 때 while문의 조건을 참으로 두면 무한 반복을 구현할 수 있다.
while(true) {
수행문 1;
...
} // 조건식이 무한히 반복 수행이 된다.
3. do-while문
while문은 조건을 먼저 검사하기 때문에 조건식에 맞지 않으면 반복 수행이 한 번도 일어나지 않는다.
하지만 do-while문은 { } 안의 문장을 무조건 한 번 수행한 후에 조건식을 검사한다.
즉 조건이 만족하는지 여부를 마지막에 검사하는 것이다.
do-while문의 구조는 다음과 같다.
do {
수행문 1;
...
} while(조건식);
수행문 2;
...
이제 위에서 만들었던 프로그램을 do-while문으로 바꿔보자.
package loopexample;
public class DoWhileExample {
public static void main(String[] args) {
int num = 1;
int sum = 0;
do {
sum += num;
num++;
} while(num <= 10);
System.out.println("1부터 10까지의 합은 " + sum + "입니다.");
}
}
4. for문
반복문 중에서 가장 많이 사용하는 반복문이 for문이다.
for문은 while문이나 do-while문보다 구조가 조금 더 복잡하다.
왜냐하면 반복문을 구현하는 데 필요한 여러 요소(변수의 초기화식, 조건식, 증감식)를 함께 작성하기 때문이다.
처음에는 낯설 수 있어도 익숙해지면 한 눈에 어떤 조건부터 어떤 조건까지 반복 수행하는지 알아볼 수 있어 편리하다.
1) for문의 기본 구조
for문의 구조를 살펴보며 반복문의 요소도 함께 알아보자.
for(초기화식; 조건식; 증감식) {
수행문;
}
초기화식은 for문이 시작할 때 딱 한 번만 수행하며 사용할 변수를 초기화한다.
조건식에서 언제까지 반복 수행할 것인지 구현한다.
증감식에서 반복 횟수나 for문에서 사용하는 변수 값을 1만큼 늘리거나 줄인다.
1부터 10까지 더하는 과정을 for문으로 구현한 전체 프로그램은 아래와 같다.
package loopexample;
public class ForExample1 {
public static void main(String[] args) {
int i;
int sum;
for(i = 1, sum = 0; i <=10; i++) {
sum += i;
}
System.out.println("1부터 10까지의 합은 " + sum + "입니다.");
}
}
2) for문을 자주 사용하는 이유
for문을 가장 많이 사용하는 이유는 반복 횟수를 관리할 수 있기 때문이다.
물론 while문에서도 반복 횟수에 따라 구현할 수 있다. 하지만 while문은 변수의 초기화와 조건 비교, 증감식을 따로 구현해야 하고 for문은 한 줄에 변수의 초기화, 조건 비교, 증감식을 쓸 수 있어서 가독성이 좋다.
* for문은 배열과 함께 자주 사용한다(배열이 무엇인지는 이후에 공부할 예정이라고 한다, 일단 그렇게만 알아두쟈).
3) for문 요소 생략하기
for문을 구성하는 요소는 코드가 중복되거나 논리 흐름상 사용할 필요가 없을 때 생략할 수 있다.
- 초기화식 생략
이미 이전에 다른 곳에서 변수가 초기화되어 중복으로 초기화할 필요가 없을 때 초기화 부분을 생략한다.
int i = 0;
for( ; i < 5; i++) { // 초기화식 생략
...
}
- 조건식 생략
어떤 연산 결과 값이 나왔을 때 바로 for문의 수행을 멈추려면 조건식을 생략하고 for문 안에 if문을 사용한다.
예를 들어 1부터 시작해 수를 더해 나갈 때 더한 결과 값이 200을 넘는지 검사하려면 for문 안에 if문을 사용한다.
for(i = 0 ; ; i++) { // 조건식 생략
sum += i:
if(sum > 200) break;
}
- 증감식 생략
증감식의 연산이 복잡하거나 다른 변수의 연산 결과 값에 좌우된다면 증감식을 생략하고 for문 안에 쓸 수 있다.
for(i = 0; i < 5; ) { // 증감식 생략
...
i = (++i) % 10;
}
- 요소 모두 생략
모든 요소를 생략하고 무한 반복하는 경우에 사용한다.
for( ; ; ) {
...
}
5. 중첩된 반복문
반복문 안에 또 다른 반복문을 중첩해서 사용하는 경우가 종종 있다.구구단을 한번 출력해보자.
package loopexample;
public class NestedLoop {
public static void main(String[] args) {
int dan;
int times;
for(dan = 2; dan <=9; dan++) {
for(times = 1; times <=9; times++) {
System.out.println(dan + "X" + times + "=" + dan * times);
}
System.out.println( );
}
}
}
반복문을 중첩해서 사용할 때 가장 중요한 것은 어떤 반복문을 먼저 수행해야 하는지, 그리고 내부 반복문을 수행하기 전에 초기화해야 할 값을 잘 초기화했는지를 살펴야 한다.for문 외의 다른 반복문도 중첩해서 사용할 수 있다.
이렇게 세 종류의 반복문을 살펴보았다.각 반복문은 언제, 어떤 경우에 사용하는 것이 좋을까?- for문 : 반복 횟수가 정해진 경우- do-while문 : 수행문을 반드시 한 번 이상 수행해야 하는 경우
- while문 : 위의 두 경우 외 참, 거짓에 따라 반복문이 수행하는 경우
에 사용하는 것이 가장 좋다 ^_^
6. continue문
countinue문은 반복문과 함께 쓰인다.
반복문 안에서 continue문을 만나면 이후의 문장은 수행하지 않고 for문의 처음으로 돌아가 증감식을 수행한다.
1부터 100까지의 수를 더할 때 홀수일 때만 더하고 짝수일 때는 더하지 않는 프로그램을 coutinue문으로 작성해보자.
package loopexample;
public class ContinueExample {
public static void main(String[] args) {
int total = 0;
int num;
for(num = 1; num <= 100; num++) {
if(num % 2 == 0)
continue; // num을 2로 나눴을 때 나머지가 0인 경우 수행을 생략하고 다시 num++를 실행
total += num;
}
System.out.println("1부터 100까지의 홀수의 합은 : " + total + "입니다.");
}
}
이처럼 continue문은 반복문을 계속 수행하는데 특정 조건에서는 수행하지 않고 건너뛰어야 할 때 사용한다.
7. break문
switch-case문에서 break문을 사용할 때 조건을 만족하면 다른 조건을 더 이상 비교하지 않았듯 반복문에서도 마찬가지다.
반복문에서 break문을 사용하면 그 지점에서 더 이상 수행문을 반복하지 않고 반복문을 빠져나온다.
만약 0부터 숫자가 1씩 늘어나면서 합을 계산할 때 숫자를 몇까지 더하면 100이 넘는지 알고 싶다.
이를 위해 프로그램을 만들면 아래와 같다.
package loopexample;
public class BreakExample {
public static void main(String[] args) {
int sum = 0;
int num = 0;
for(num = 0; sum < 100; num++) {
sum += num;
}
System.out.println("num : " + num);
System.out.println("sum : " + sum);
}
}
이 프로그램의 결과는 num : 15 , sum : 105가 나온다.
그렇다면 1부터 15까지 더했을 때 100이 넘는 것일까?
아니다, 합이 105가 되는 순간 num 값은 14였다. 하지만 for문의 조건식에서 sum이 100을 넘는 것을 확인한 순간 num++의 증감식도 함께 적용이 되기 때문에 num은 15가 된 것이다.
그렇기에 아래와 같이 break문을 사용하여 증감이 이루어지기 전에 반복문을 끝내야 하는 것이다.
package loopexample;
public class BreakExample2 {
public static void main(String[] args) {
int sum = 0;
int num = 0;
for(num = 0; ; num++) {
sum += num;
if(sum >= 100)
break;
}
System.out.println("num : " + num);
System.out.println("sum : " + sum);
}
}
이러면 num : 14, sum : 105의 값을 얻을 수 있다.
이처럼
break문을 사용하면 반복문을 중단시켜서 정확한 결과 값을 얻을 수 있다.
* break문의 위치
앞의 예제에서 봤듯 반복문이 중첩된 경우가 있다.
이 경우에 break문을 사용하면 모든 반복문을 빠져나오는 것이 아니라 break문을 감싸고 있는 반복문만 빠져 나온다.
정리하자면!!
coutinue문은 반복문을 계속 수행하지만 특정 조건에서 수행문을 생략하는 경우에 사용한다.
break문은 반복문을 더 이상 수행하지 않고 빠져나올 때 사용한다.
'⁂ Java > : 독학으로 공부하기(과거)' 카테고리의 다른 글
[java] #4-2 메서드와 함수 (0) | 2022.07.04 |
---|---|
[java] #4-1 객체, 클래스, 패키지 (0) | 2022.07.04 |
[java] #3-1 조건문 : 제어 흐름 이해하기 (0) | 2022.07.01 |
[java] #2-2 비트 연산자 (0) | 2022.07.01 |
[java] #2-1 자바의 기본 연산자 (0) | 2022.06.30 |