프로그래밍에서 반복문은 동일한 코드 블록을 여러 번 실행할 때 사용되는 제어 구조입니다. Java에서는 주로 for, while, do-while 등의 반복문이 사용되며, 각 반복문은 다양한 상황에서 유용하게 쓰입니다. 이번 글에서는 Java에서 사용할 수 있는 다양한 반복문의 사용 방법과 그 특징을 살펴보겠습니다.
1. 반복문이란?
반복문은 동일한 코드를 여러 번 실행하고 싶을 때 사용하는 구문입니다. 프로그래밍에서 반복문은 데이터를 처리하거나 특정 조건을 만족할 때까지 연산을 반복해야 하는 상황에서 매우 유용하게 사용됩니다. Java에서 제공하는 기본적인 반복문은 for, while, do-while이 있으며, 이 외에도 for-each와 Iterator를 사용한 반복도 가능합니다.
2. for 문
for 문은 반복 횟수가 정해져 있는 경우에 주로 사용됩니다. 초기화, 조건식, 증감식을 한 라인에 모두 포함할 수 있어서 코드가 간결해집니다.
2.1. 일반적인 for 문
for 문을 사용하여 0부터 9까지 숫자를 출력하는 예제를 보겠습니다.
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
- 초기값 (int i = 0): for 문이 처음 실행될 때 딱 한 번 실행됩니다.
- 조건식 (i < 10): 매 반복마다 검사하는 조건입니다. 조건이 true인 동안 반복문이 실행됩니다.
- 증감식 (i++): 각 반복이 끝날 때마다 실행되며, 변수를 증가시키는 역할을 합니다.
2.2. 중첩된 for 문
for 문은 다른 반복문과 중첩해서 사용할 수 있습니다. 아래는 2차원 배열을 출력하는 예제입니다.
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
이 코드는 3x3 행렬의 요소를 출력합니다. 중첩된 for 문을 사용하여 각 행과 열에 접근하고 있습니다.
3. while 문
while 문은 조건이 true인 동안 반복해서 실행됩니다. 반복 횟수가 정해져 있지 않거나 조건에 따라 반복을 계속해야 할 때 적합합니다.
int i = 0;
while (i < 5) {
System.out.println(i);
i++;
}
위 코드는 0부터 4까지 출력하는 예제입니다. i < 5 조건이 만족되는 동안 i 값을 출력한 후 i를 증가시킵니다.
3.1. 무한 반복을 주의하라
while 문을 사용할 때는 무한 반복을 조심해야 합니다. 아래와 같이 조건이 잘못 설정되면 프로그램이 끝나지 않는 무한 반복에 빠질 수 있습니다.
int i = 0;
while (i < 5) {
System.out.println(i);
// i++을 잊어버림
}
이 경우 i++를 생략했기 때문에 i가 계속 0으로 남아있어, i < 5 조건이 항상 참(true)이 됩니다.
4. do-while 문
do-while 문은 while 문과 비슷하지만, 반복문을 한 번은 무조건 실행한 후에 조건을 검사합니다. 즉, 조건이 거짓(false)이더라도 한 번은 실행됩니다.
int i = 0;
do {
System.out.println(i);
i++;
} while (i < 5);
위 코드는 while 문과 동일하게 0부터 4까지 출력하지만, 조건을 나중에 검사한다는 점에서 차이가 있습니다. 만약 처음부터 조건이 false라면 while 문은 한 번도 실행되지 않지만, do-while 문은 한 번은 실행됩니다.
5. for-each 문
for-each 문은 주로 배열이나 컬렉션(Collection)에서 각 요소에 대해 순차적으로 접근할 때 사용됩니다. for-each 문은 for 문보다 더 간결하며, 인덱스 관리를 할 필요가 없기 때문에 코드가 직관적입니다.
5.1. 배열에서의 for-each 문
배열에서 for-each 문을 사용하는 예제입니다.
String[] animals = {"Tiger", "Lion", "Bear"};
for (String animal : animals) {
System.out.println(animal);
}
이 코드는 배열 animals의 각 요소에 대해 for-each 문을 사용하여 순차적으로 접근하고 출력합니다.
5.2. Collection에서의 for-each 문
Java의 Collection 프레임워크를 사용한 예제입니다. List는 대표적인 Collection의 일종입니다.
import java.util.List;
public class CollectionExample {
public static void main(String[] args) {
List<String> fruits = List.of("Apple", "Banana", "Orange", "Grapes");
// 전통적인 for 문을 사용한 반복
for (int i = 0; i < fruits.size(); i++) {
System.out.println(fruits.get(i));
}
// for-each 문을 사용한 반복
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
위 두 반복문은 모두 fruits 리스트의 모든 요소를 출력하지만, for-each 문이 더 간결하고 가독성이 높습니다.
6. Iterator를 이용한 반복문
Iterator는 Collection의 요소를 순회하며 하나씩 처리할 때 사용되는 인터페이스입니다. Iterator는 컬렉션의 모든 요소에 대해 일관된 방법으로 접근할 수 있도록 합니다.
import java.util.Iterator;
import java.util.List;
public class CollectionExample {
public static void main(String[] args) {
List<String> fruits = List.of("Apple", "Banana", "Orange", "Grapes");
// Iterator를 사용한 반복
Iterator<String> iterator = fruits.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
Iterator는 hasNext() 메서드를 통해 다음 요소가 있는지 확인하고, next() 메서드를 사용하여 다음 요소에 접근합니다. 주로 컬렉션의 구조가 변경될 가능성이 있거나, 특정 컬렉션 타입을 명시적으로 다룰 때 Iterator를 사용합니다.
7. 반복문 활용 시 주의사항 및 최적화
반복문을 사용할 때는 성능과 가독성 측면을 고려하는 것이 중요합니다. 특히 대규모 데이터를 다룰 때는 적절한 반복문 선택과 최적화를 통해 성능을 높일 수 있습니다.
7.1. 성능 최적화
- 컬렉션 크기 미리 계산: for 문에서 컬렉션의 크기를 계속해서 호출하는 것은 성능 저하를 일으킬 수 있습니다. 크기를 미리 변수에 저장해 반복문에서 재사용하는 것이 좋습니다.
List<String> items = //... int size = items.size(); for (int i = 0; i < size; i++) { // 반복 작업 }
- 배열 대신 ArrayList 사용 시 주의: 배열보다 ArrayList와 같은 동적 배열을 사용하는 경우, 인덱스로 요소에 접근하는 비용이 다소 클 수 있습니다. 이때 for-each 문이나 Iterator를 사용하는 것이 더 적합할 수 있습니다.7.2. 가독성 있는 코드 작성
- 복잡한 논리 피하기: 반복문 안에 너무 많은 조건문이나 복잡한 로직을 넣으면 가독성이 떨어질 수 있습니다. 가능하면 반복문 내부의 코드를 단순하게 유지하는 것이 좋습니다.
- 적절한 변수 명 사용: i, j와 같은 변수 대신, 의미를 담은 변수명을 사용하는 것이 가독성에 도움이 됩니다.
8. 결론
Java의 반복문은 프로그램에서 매우 중요한 제어 구조입니다. for, while, do-while, for-each와 같은 다양한 반복문은 각각의 상황에 맞게 사용할 수 있으며, 코드의 간결성과 효율성을 높여줍니다. 반복문을 적절하게 사용하면 복잡한 작업을 더 쉽게 처리할 수 있으며, 가독성 좋은 코드 작성을 통해 유지보수와 확장성 또한 향상시킬 수 있습니다.
각 반복문이 제공하는 특징을 이해하고, 적절한 상황에서 사용하는 것이 좋은 프로그래밍 습관이 될 것입니다.
'JAVA > JAVA 기초' 카테고리의 다른 글
Java 메서드(Method) (0) | 2024.09.29 |
---|---|
Java의 클래스(Class)와 객체(Object) (0) | 2024.09.28 |
Java에서 조건문(if, switch) 다루기 (0) | 2024.09.26 |
Java 연산자 기초와 사용법 (0) | 2024.09.25 |
Java에서 배열(Array) 사용하기 (0) | 2024.09.24 |