루프란 무엇인가?
프로그래밍에서 루프(loop)는 여러 번 반복해야 하는 유사한 작업을 자동화하기 위해 사용되는 제어 구조입니다. 예를 들어, 식당의 점심 메뉴 전체에 대해 이름과 가격을 합쳐서 출력하는 프로그램을 만든다면, 일일이 코드를 반복해서 작성하는 대신 루프를 활용해 작업을 자동화할 수 있습니다.
자바에는 다양한 루프가 있으며, 그중 for 루프는 코드 블록을 정해진 횟수만큼 반복 실행할 때 사용합니다. 조건이 거짓(false)이 될 때까지 실행되는 while 루프와 달리, for 루프는 미리 정의된 반복 횟수만큼만 실행된다는 점이 특징입니다.
이 글에서는 자바에서 for 루프와 for-each 루프를 사용하는 방법을 실제 예제와 함께 단계별로 살펴보겠습니다.
자바 for 루프 기본 문법
100개의 요소를 담은 배열의 내용을 콘솔에 출력하고 싶거나, 매장에 있는 모든 상품의 가격을 5센트씩 올리고 싶다고 가정해 보세요. 이런 작업을 하나하나 손으로 처리하기보다는 루프를 사용하는 것이 훨씬 효율적입니다.
자바에서 for 루프는 특정 작업을 여러 번 반복 실행할 때 사용되며, 기본 문법은 다음과 같습니다.
for (initialization; expression; updateCounter) {
// 실행할 코드
}
for 루프는 세 가지 구성 요소로 이루어져 있습니다.
- initialization(초기화): 루프가 몇 번 실행되었는지 추적하는 변수를 초기화하는 문장입니다.
- expression(조건식): 루프가 계속 실행될지 판단하는 조건입니다. 반드시 참(true) 또는 거짓(false)으로 평가되는 불리언(boolean) 표현식이어야 합니다.
- updateCounter(증감식): 코드 블록이 한 번 실행된 후 초기화 변수를 갱신하는 역할을 합니다.
세 구성 요소는 모두 필수입니다.
for 루프 예제: 구구단 출력하기
예제를 통해 for 루프가 어떻게 동작하는지 살펴보겠습니다. 초등학교 3학년 학생이 곧 있을 수학 시험을 대비해 10단(10의 배수)을 외울 수 있도록 도와주는 프로그램을 만든다고 가정해 봅시다.
1×10, 2×10처럼 각각의 곱셈을 개별적으로 계산하는 대신, for 루프를 사용하면 10단의 모든 값을 한 번에 계산할 수 있습니다. 다음은 1부터 10까지의 10단 값을 계산하는 코드입니다.
public class TimesTable {
public static void main(String[] args) {
for (int i = 1; i <= 10; ++i) {
int answer = i * 10;
System.out.println(i + " x 10 is " + answer);
}
}
}
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
1 x 10 is 10 2 x 10 is 20 3 x 10 is 30 4 x 10 is 40 5 x 10 is 50 6 x 10 is 60 7 x 10 is 70 8 x 10 is 80 9 x 10 is 90 10 x 10 is 100
프로그램이 10 × 10까지의 모든 값을 정확히 계산했습니다. 이제 코드가 어떻게 동작하는지 단계별로 분석해 보겠습니다.
먼저 프로그램 코드를 담고 있는 TimesTable 클래스를 선언합니다. 그다음 내부 코드를 10번 반복 실행하는 for 루프를 생성하는데, 이 루프의 세 가지 구성 요소는 다음과 같습니다.
int i = 1: 카운터 변수i를 1부터 시작하도록 초기화합니다.i <= 10:i의 값이 10 이하일 때만 루프를 실행하라는 조건입니다.++i: 루프가 한 번 실행될 때마다i의 값을 1씩 증가시킵니다. 이를 증가 카운터(increment counter)라고 부릅니다.
그다음 곱셈 문제와 그 답을 함께 출력합니다. 출력 형식은 "[카운터 값] x 10 is [답]" 형태로 구성됩니다.
자바 for-each 루프
배열(array)이나 컬렉션(collection)을 다룰 때는 해당 요소들을 순회(iterate)하기 위한 또 다른 종류의 for 루프를 사용할 수 있습니다. 바로 for-each 루프, 즉 향상된 for 루프(enhanced for loop)입니다.
for-each 루프의 문법은 다음과 같습니다.
for (dataType item : collection) {
// 실행할 코드
}
for-each 루프 역시 세 가지 구성 요소로 이루어져 있습니다.
- dataType(데이터 타입): 컬렉션에 담긴 요소의 데이터 타입입니다.
- item(요소): 컬렉션에서 순차적으로 꺼낸 개별 항목을 저장하는 변수입니다.
- collection(컬렉션): 루프가 순회할 배열 또는 컬렉션 변수입니다.
for-each 루프는 컬렉션의 각 항목을 차례대로 꺼내 item 변수에 저장한 뒤, 루프 본문에 작성된 코드를 실행합니다. 예제를 통해 자세히 알아보겠습니다.
for-each 루프 예제: 커피 가격 할인하기
커피숍을 운영하고 있다고 가정해 보겠습니다. 플래시 세일을 위해 모든 커피의 가격을 25센트씩 인하하고 싶습니다. 각 커피의 가격이 담긴 목록이 있고, 이 목록의 모든 가격에서 25센트를 빼야 한다면 다음과 같은 코드를 사용할 수 있습니다.
public class ReducePrices {
public static void main(String[] args) {
double[] prices = {2.50, 2.75, 3.00, 2.75, 2.75, 2.30, 3.00, 2.60};
for (double i : prices) {
double new_price = i - 0.25;
System.out.println("The new price is " + new_price);
}
}
}
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
The new price is 2.25 The new price is 2.5 The new price is 2.75 The new price is 2.5 The new price is 2.5 The new price is 2.05 The new price is 2.75 The new price is 2.35
모든 커피의 가격이 25센트씩 인하되었습니다. 이제 플래시 세일에 맞춰 가격을 변경하는 데 필요한 데이터를 확보했습니다.
코드를 단계별로 살펴보겠습니다. 먼저 예제 코드를 담는 ReducePrices 클래스를 선언합니다. 그다음 커피 가격을 저장하는 prices 배열을 선언하는데, 이 배열은 소수점 숫자를 다루는 double 타입의 배열로 선언됩니다.
이후 prices 배열의 각 항목을 순회하는 for-each 루프를 생성합니다. 배열의 각 항목에 대해 프로그램은 커피 가격에서 25센트를 빼고, 인하된 가격을 new_price 변수에 할당합니다. 마지막으로 "The new price is"라는 문구와 함께 새로운 가격을 출력합니다.
마무리
정리하면, for 루프는 코드 블록을 정해진 횟수만큼 반복 실행할 때 사용하고, for-each 루프는 배열이나 컬렉션에 담긴 각 항목마다 코드 블록을 실행할 때 사용합니다.
이 글에서는 자바에서 for 루프와 for-each 루프를 사용하는 방법을 살펴보고, 각 루프의 실제 예제와 함께 코드가 동작하는 원리를 단계별로 분석했습니다.
이제 여러분도 자바의 for 루프와 for-each 루프를 전문가처럼 활용할 준비가 되었습니다!