본문 바로가기

Java

[Java] 향상된 for문

향상된 for문을 이해하려면 배열을 먼저 알아야합니다.

혹시 배열을 아직 모르시거나 이해가 되지 않는 분들은 해당 포스팅을 참고하시기 바랍니다.

 

java 배열 이해가 안된다고? 일단 들어와봐!

배열이 필요한 이유에 대해서 알아보기 위해서 학생의 점수를 출력하는 간단한 프로그램을 작성해보겠습니다. 만약 학생을 몇 명 더 추가해야 한다면 변수를 선언하는 부분과 점수를 출력하는

madeprogame.tistory.com

 

향상된 for문(Enhanced For Loop)

각각의 요소를 탐색한다는 의미로 for-each문 이라고도 많이 불립니다.

향상된 for문은 배열을 사용할 때 기존 for문 보다 더 편리하게 사용할 수 있습니다.

for(변수 : 배열 또는 컬렉션) {
	// 배열 또는 컬렉션의 요소를 순화하면서 수행할 작업
}

 

코드로 확인해보겠습니다.

 

먼저 일반 for문은 배열에 있는 값을 순서대로 읽어서 number 변수에 넣고, 출력합니다.

배열은 처음부터 끝까지 순서대로 읽어서 사용하는 경우가 많습니다.

그런데 배열의 값을 읽으려면 int i 와 같은 인덱스를 탐색할 수 있는 변수를 선언해야 합니다.

그리고 i < numbers.length 와 같이 배열의 끝 조건을 지정해주어야 합니다.

마지막으로 배열의 값을 하나 읽을때 마다 인덱스를 하나씩 증가해야 합니다.

 

향상된 for문

 //향상된 for문, for-each문
for (int number : numbers){
     System.out.println(number);
}
  • 앞서 일반 for문과 동일하게 작동한다.
  • 향상된 for문은 배열의 인덱스를 사용하지 않고, 종료 조건을 주지 않아도 됩니다. 단순히 해당 배열을 처음부터 끝까지 탐색합니다.
  • ( : ) 의 오른쪽에 numbers 와 같이 탐색할 배열을 선택하고, ( : )의 왼쪽에 int number와 같이 반복할 때 마다 찾은 값을 저장할 변수를 선언합니다. 그러면 배열의 값을 하나씩 꺼내서 왼쪽에 있는 number에 담고 for문을 수행합니다. for문의 끝에 가면 다음 값을 꺼내서 number에 담고 for문을 수행합니다. numbers 배열의 끝에 도달해서 더 값이 없으면 for문이 완전히 종료됩니다.
  • 향상된 for문은 배열의 인덱스를 사용하지 않고도 배열의 요소를 순회할 수 있기 때문에 코드가 간결하고 가독성이 좋습니다.

향상된 for문을 사용하지 못하는 경우

 

향상된 for문을 사용하지 못하는 경우가 있습니다.

향상된 for문에는 증가하는 인덱스 값이 감추어져 있습니다. 따라서 int i 와 같은 증가하는 인덱스 값을 직접 사용해야 하는 경우에는 향상된 for문을 사용할 수 없습니다.

// for-each문을 사용할 수 없는 경우, 증가하는 index 값 필요
for(int i = 0; i < numbers.length; i++) {
	System.out.println("number" + i + "번의 결과는: " + numbers[i]);
}

 

위 예제에서는 증가하는 i값을 출력해야 하므로 향상된 for문 대신에 일반 for문을 사용해야 합니다.

 

물론 다음과 같이 억지스럽게 향상된 for문을 사용하는 것이 가능하지만,

이런 경우 일반 for문을 사용하는 것이 더 좋습니다.

int i = 1;

for (int number : numbers) {
	System.out.println("number" + i + "번의 결과는: " + number);
    	i++;
}