반복문이란?
프로그래밍 언어에서 반복문이란 말 그대로 반복하는 과정을 수행할 수 있는 문법을 뜻한다.
반복문에는 잘 알려진 for문과 while문이 존재한다.
추가로 do while문도 존재하는데 아직 까지는 특별한 경우를 제외하고는 사용을 하지 않았다.
for문
for문은 기본적인 문법으로 대부분의 사람이 잘 알고 있다.
하지만, 생각보다 헷갈려하는 포인트들이 있어서 그것을 짚기 위해서 가져왔다.
우선, 웬만한 책에서 설명하는 for문의 기본 구성은 아래와 같다.
for (int i = 0; i < 10; i++) {}
대부분 여기서 int i = 0 을 초기값, i < 10을 조건식, i++을 증감식이라고 표현합니다.
for (초기값; 조건식; 증감식)
근데 저는 헷갈리던 부분이 좀 있었습니다.
맨 처음 for문을 접했을 때, 조건식이 ' i < 10 ' 이면 i < 10 일 때까지? 인가? 라는 생각 때문에 조금 헤맸었습니다.
for문의 뜻
그래서 저는 제가 이해하기 쉬운 방식으로 접근 했습니다.
for라는 뜻은 ~ 동안 이라는 뜻이 있습니다.
이 뜻 그대로 for 문은 '조건식' 동안 수행하겠다. 이 뜻으로 해석해야 합니다.
즉, 조건식이 i < 10 이면 변수 i가 10보다 작을 때, 계속 수행한다는 말입니다.
for문의 수행 순서
for (int i = 10, j = 20, cnt = 1; i < j; i++, j-=2, cnt++) {
System.out.printf("for %d번 째 : i = %d, j = %d\n", cnt, i, j);
}
위와 같은 코드를 실행해보겠습니다.
첫 번째 수행 (초기값),
먼저, '초기값'에 들어가는 내용은 0개 이상 작성하면 됩니다.
초기값을 설정하지 않아도 수행되는 것이죠.
저는 3개의 변수 i, j, cnt를 초기값으로 특정 값을 할당 했습니다.
두 번째 수행 (조건식),
조건동안 for문을 수행할 수 있는지 확인합니다.
조건은 i < j 이므로, (i : 10) < (j : 20) 를 만족합니다.
두 번째 수행에서 조건을 만족하는 경우 세 번째 수행으로 넘어가고,
조건을 만족하지 않는 경우 여기서 for문은 종료됩니다.
※ 조건식은 boolean 값만 됩니다. C++은 다름.
세 번째 수행 (문법),
두 번째 수행에서 만족한 경우 세 번째 수행을 합니다.
세 번째 수행은 for 문의 중괄호 { } 로 묶여 있는 문법을 수행하는 것 입니다.
우리가 수행할 문법은 for문의 각 수행 횟수에 대한 i와 j를 출력합니다.
모든 문법이 끝나면 네 번째 수행을 시작합니다.
네 번째 수행 (증감식),
사람들이 말을 증감식으로 표현한 것이지 사실은 다음 수행할 명령입니다.
즉 문법에서 마지막 줄에 추가하는 것과 같습니다.
우선 위 코드에서 해당하는 네 번째 수행은 cnt와 i를 1씩 증가하고 j를 2씩 감소하는 것입니다.
다섯 번째 수행 (반복),
조건식에 따라 종료 될 때까지 반복합니다.
for문은 이렇게 위 5가지 연산으로 이루어지는 문법입니다.
for문을 다양하게 정의하는 방법
앞 서, 네 번째 수행에서 증감식이 문법 마지막에 붙어도 된다는 것을 보았을 때
그럼 있으나 없으나 마찬가지가 아닌가? 라는 생각이 들면 정말 잘 접근했습니다.
실제로 초기값, 조건식, 문법, 증감식 모두 비워도 됩니다.
필요에 따라 적절하게 사용하는 방법도 있고 가장 보편적으로 사용하는 방법도 있습니다.
// 초기값을 비웠을 때
int i = 0;
for (; i < 10; i++) {}
// 조건식을 비웠을 때 (무한 루프)
for (int i = 0; ;i++) {}
// 문법을 비웠을 때
for (int i = 0; i < 5; i++, System.out.println("%d", i));
// 증감식을 비웠을 때
for (int i = 0; i < 5; ) {
System.out.println("%d", i++));
}
// 모두 비웠을 때 (무한 루프)
for ( ; ; );
위와 같이 다양하게 사용하는 방법이 있으니 참고하면 좋겠습니다.
대신, 중요한 점은 '조건식'을 비우는 경우 컴퓨터가 얼마 동안 반복을 수행할 것인지 알 수 없습니다.
그래서 그냥 계속 반복을 수행하게 되므로 무한 루프에 빠지게 됩니다.
break, continue
이런 무한 루프에서 빠져나오는 방법으로는 break 문법이 있습니다.
break는 현재 반복을 종료하겠다는 의미가 됩니다.
continue 문법은 세 번째 수행을 하지 않겠다는 의미를 가진 문법입니다.
여기서 네 번째 수행에 대한 필요성이 나옵니다.
continue 문법으로 세 번째 수행을 하지 않더라도 그 외 수행은 하게 됩니다.
네 번째 수행(증감식)을 문법의 마지막에 추가 했을 때, 문법에서 continue 문법이 포함되어 있다면
문법 마지막에 추가된 네 번째 수행이 실행되지 않아 또 다시 무한반복에 빠지게 됩니다.
// break를 사용한 경우
for (int i = 1; i <= 3; i++) {
System.out.printf("%d번 째 for문 수행 됨.", i);
break;
}
/*
==== 출력 결과 ====
1번 째 for문 수행 됨.
*/
// continue를 사용한 경우
for (int i = 1; i <= 3; i++) {
System.out.printf("%d번 째 for문 수행 됨.", i);
continue;
System.out.printf("%d번 째 for문 수행 됨.", i++);
}
/*
==== 출력 결과 ====
1번 째 for문 수행 됨.
2번 째 for문 수행 됨.
3번 째 for문 수행 됨.
*/
// continue를 사용한 경우, 네 번째 수행이 없는 경우
for (int i = 1; i <= 3; ) {
System.out.printf("%d번 째 for문 수행 됨.", i);
continue;
System.out.printf("%d번 째 for문 수행 됨.", i++);
}
/*
==== 출력 결과 ====
System.out.printf("%d번 째 for문 수행 됨.", i);
무한 루프
*/
보통 무시하거나 종료 하는 경우는 특정 조건에서만 수행되므로 if문과 같이 수행됩니다.
for문을 어떻게 사용하나요?
주로 for문은 array, 수열 등 특정한 규칙이 존재하는 경우 사용합니다.
Array에서 for문 사용 (향상된 for 문)
배열은 인덱스가 0번째부터 배열의 크기 - 1 까지 각 인덱스마다 1의 차이의 규칙을 갖습니다.
배열을 접근 할 때는 인덱스로 접근합니다.
배열의 모든 원소에 접근을 하려면 for문을 사용하면 쉽게 접근할 수 있습니다.
// 1부터 10까지의 수열 생성
int[] arr = new int[10];
for (int i = 0; i < arr.length(); i++) {
arr[i] = (i+1);
}
for (int i: arr) {
System.sout.print(i + " ");
}
그 외에도 다양한 규칙이 사용되는 곳에서는 필수로 사용되며,
코딩은 for문과 if문으로 모든 코드를 작성할 수 있다는 말이 있을만큼 중요한 내용입니다.
for문을 이해하기 위해 추천하는 문제
구구단 프로그램을 작성해보기
예제 출력
1단 : 1 2 3 4 5 6 7 8 9
2단 : 2 4 6 8 10 12 14 16 18
...
9단 : 9 18 27 36 45 54 63 72 81
public class MultiplicationTable
{
public static void main(String[] args) {
for(int i = 1; i <= 9; i++) {
System.out.printf("%d단 = ", i);
for(int j = 1; j <= 9; j++) {
System.out.printf("%2d ", i * j);
}
System.out.println();
}
}
}
수열 [1, 2, 3, 4, 5]을 뒤집어서 출력하기
예제 출력
5, 4, 3, 2, 1
public class PrintReverseArray
{
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
for (int i = arr.length - 1; i > 0; i--) {
System.out.printf("%d, ", arr[i]);
}
System.out.printf("%d", arr[0]);
}
}
노션 정리 URL
https://www.notion.so/24jihwan/019643d1ca304dd684ceaa73c34cf08e
'JAVA > 기본 이론' 카테고리의 다른 글
4. 입/출력 (Input/Output, I/O) (0) | 2024.02.24 |
---|---|
9. 반복문 - while 문, do while 문 (1) | 2024.02.10 |
7. 다차원 배열 (Multi Dimensional Array) (1) | 2024.02.10 |
6. 배열 (Array) (1) | 2024.02.10 |
5. 연산자(Operator)와 연산 순위 (1) | 2024.02.10 |