
자바에서는 코드를 반복적으로 실행하기 위해 여러 종류의 반복문을 사용합니다.
- 반복문을 사용할 때는 초기화, 조건 설정, 증감식을 적절히 활용하여 원하는 반복 동작을 구현할 수 있습니다.
- 또한 무한 루프를 만들 때는 반드시 종료 조건을 포함해야 합니다.
- 무한루프로 사용되는 경우도 있습니다. (예 : 모바일게임, 키오스크 등)
1. for
반복 횟수를 알고 있을 때 주로 사용합니다.
1) 기본 구문
for (초기화; 조건식; 증감식) { // 실행 코드 } |
2) 예시
(1) 1을 100번 반복하는 반복문

for ( int i = 0 ; i < 5 ; i = i + 1){ System.out.println( i + 1 ); } for ( int i = 0 ; i < 5 ; i = i + +){ System.out.println( i + 1 ); } // i+1 과 i++ 은 같은 형태 입니다. |

(2) 1에서 +1로 반복하는 반복문


(3) 1에서 +2로 반복하는 반복문

위의 i와 아래의 i는 동일하지 않습니다.

(3) 1부터 100까지 더하는( 반복하는) 반복문


(3) 1부터 100까지 수 중 홀수만 더하는( 반복하는) 반복문

int total = 0; for ( int i = 1 ; i <= 100 ; i = i + 2 ) { total = total + i; } System.out.println( total ); |

(4) 1부터100까지 수 중3의 배수에는 짝!이라고 출력, 나머지는 숫자 출력하는 반복문 ( with 조건문 )

for ( int i = 1; i <= 100; i ++ ) { if ( i % 3 == 0 ) { System.out.println( "짝" ); } else { System.out.println( i ); } |
// 종적으로 i가 100까지 증가하므로, if (i % 3 == 0) 조건문은 i를 3으로 나눈 나머지가 0인 경우를 확인합니다. 이는 3의 배수를 식별하는 방법입니다. 즉, 이 조건문은 1부터 100까지의 숫자 중에서 3의 배수를 찾아내는 역할을 합니다.
이 방식은 나눗셈의 나머지를 이용하여 특정 패턴을 가진 숫자를 효율적으로 식별할 수 있게 해 줍니다. 3으로 나누어 떨어지는 숫자들(3, 6, 9, 12,...)을 순차적으로 처리할 수 있어, 역으로 계산하지 않고도 원하는 결과를 얻을 수 있습니다.
// if (i % 3 == 0) 조건문이 역으로 계산되는 이유는?
'if (i % 3 == 0) '조건문이 역으로 계산되는 이유는, 이 조건이 i를 3으로 나눈 나머지가 0인지 확인하기 때문입니다. 즉, 이 조건문은 i가 3의 배수인지 여부를 판단합니다.
설명:
나머지 연산자 (%): 이 연산자는 두 수를 나누고 그 나머지를 반환합니다. 예를 들어, 'i % 3'의 결과가 0이면, i는 3으로 나누어 떨어진다는 의미입니다.
조건문의 역할: 'if (i % 3 == 0) '는 i가 3의 배수일 때 특정 코드를 실행하게 만듭니다. 즉, i가 0, 3, 6, 9 등과 같은 값을 가질 때 이 조건이 참이 됩니다.
역으로 계산:
이 조건문을 사용함으로써, 직접적으로 i를 3으로 나누는 것이 아니라, 나머지를 통해 i의 값을 간접적으로 판단하게 됩니다. 이는 특정 패턴(여기서는 3의 배수)을 찾는 효율적인 방법입니다.
결론적으로, 'if (i % 3 == 0) ' 조건문은 i의 값이 특정 숫자(여기서는 3)의 배수인지 확인하는 데 사용되며, 이를 통해 원하는 로직을 구현할 수 있습니다.

2. for-each
for 루프에서 향상된 반복문입니다. 배열이나 컬렉션의 모든 요소를 순회할 때 사용합니다.
1) 구문 예시
String[] names = {"Han", "Kim", "Lee"}; for (String name : names) { System.out.println(name); } |
2) 장점
1) 간결성과 가독성: 일반 for 루프에 비해 코드가 더 간결하고 읽기 쉽습니다.
2) 안전성: 인덱스를 사용하지 않기 때문에 배열 범위를 벗어나는 오류(Out of range)가 발생할 가능성이 없습니다.
3) 편의성: 컬렉션이나 배열의 모든 요소에 쉽게 접근할 수 있습니다.
4) LinkedList 순회 성능: LinkedList를 순회할 때 일반 for 루프보다 성능이 좋습니다.
5) 직관성: 데이터 요소에 직접 접근하므로 코드의 의도를 더 명확하게 표현할 수 있습니다.
6) 오류 감소: 인덱스 조작이 필요 없어 관련 오류 발생 가능성이 줄어듭니다.
7) 유연성: 배열뿐만 아니라 Iterable 인터페이스를 구현한 모든 컬렉션에서 사용할 수 있습니다.
3) 단점
1) 반복문 내에서 배열이나 리스트의 값을 변경하거나 추가할 수 없습니다. For-each 루프는 읽기 전용으로 동작하기 때문입니다.
2) 배열을 역순으로 탐색할 수 없습니다. For-each 루프는 순차적으로만 요소에 접근합니다.
3) 인덱스를 직접 사용할 수 없습니다. 특정 인덱스의 요소에 접근하거나 인덱스 값이 필요한 경우에는 일반 for 루프를 사용해야 합니다.
4) 반복 횟수를 명시적으로 지정할 수 없습니다. For-each 루프는 항상 모든 요소를 순회합니다.
5) ArrayList나 배열의 경우, 일반 for 루프에 비해 약간의 성능 저하가 있을 수 있습니다.
이러한 제약사항들로 인해 특정 상황에서는 일반 for 루프를 사용해야 할 수 있습니다.
3. while
조건에 따라 반복할 때 주로 사용합니다.
1) 기본 구문
while (조건식) { // 실행 코드 } |
2) 예시
(1) 1부터 6까지 더하는( 반복하는) 반복문

int i = 1; while ( i < 6 ){ System.out.println( i ); i = i + 1; //이렇게 하지 않으면 무한 루프로 생성됨 } |

4. do-while
조건을 나중에 검사하며, 블록 내부 실행문을 우선 실행한 후 반복 여부를 결정합니다.
1) 기본 구문
do { // 실행 코드 } while (조건식); |
5. 반복문 제어
1) break
- 자신이 포함된 가장 가까운 반복문을 벗어납니다.
- 주로 if문과 함께 사용되어 특정 조건을 만족하면 반복문을 벗어나도록 함\합니다.
- 무한 반복문에는 조건문과 break문이 항상 같이 사용. 그렇지 않으면 무한히 반복되기 때문에 프로그램이 종료되지 않습니다.
2) continue
- 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어갑니다.
- for문의 경우 증감식으로 이동합니다.
- while, do-while문의 경우 조건식으로 이동합니다.
- 반복문 전체를 벗어나지 않고 다음 반복을 계속 수행한다는 점이 break문과의 차이점입니다.
- if문과 함께 사용되어 특정 조건을 만족하는 경우에 continue문 이후의 문장들을 수행하지 않고 다음 반복으로 넘어가서 계속 진행하도록 합니다.
- 전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용합니다.
3) 이름 붙은 반복문
break문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에, 여러 개의 반복문이 중 첨 된 경우에는 break문으로 중첩 반복문을 완전히 벗어날 수 없습니다.
중첩 반복문 앞에 이름을 붙이고 break와 continue문에 이름을 지정해 줌으로써 하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있습니다.
'JAVA > 이론' 카테고리의 다른 글
21. [ JAVA ] 함수 (fanction) (1) | 2024.12.10 |
---|---|
20. [ JAVA ] 배열(array) (1) | 2024.12.09 |
18. [ JAVA ] 조건문(Conditional Statements) (0) | 2024.12.09 |
17. [ JAVA ] 연산자(Operator) (0) | 2024.12.08 |
16. [ JAVA ] 규칙과 변수(variable) (0) | 2024.12.06 |