향상된 for 문 (for - each)문이란

배열을 배우고 응용하다 보면 배열의 0번째 인덱스부터 끝까지 한번 돌리고 싶은데,

우리가 그럴 때마다 어떻게 했는가? 일단 아래 예시를 보자.

//기존 for 문 사용
public class BaboFor {
    public static void main(String[] args) {
        int[] numbers = {1,2,3,4,5}; // 배열 초기화

        for(int i = 0 ; i < numbers.length ; i++){
            System.out.println(numbers[i]);
        }
    }
}

단순히 배열을 순회하고 싶은데, 위 코드는 쓸데없이 귀찮은 작업들을 몇 가지 해줘야 한다.

  1. 인덱스 변수 i 선언 → 메모리 낭비
  2. i < numbers.length와 같이 조건문도 지정 해줘야한다
  3. i++을 통해 인덱스를 하나씩 증가 해줘야한다

 

이러한 귀찮은 작업들을 생략할 수 있는 아주 좋은 기능이 있는데, 이것이 바로 향상된 for문인 for-each문이다.

위 코드와 작업은 동일하게 하도록 코드를 리펙토링 해보자.

//for-each문 사용하여 리펙토링
public class ChunjaeFor {
		public static void main(String[] args) {
        int[] numbers = {1,2,3,4,5}; // 배열 초기화

        for(int number : numbers){
            System.out.println(number);
		    
        }
    }
}

딱봐도 코드가 훨씬 간결해지지 않았습니까..

위 코드를 설명하자면,

  1. 일반 for문과 동일하게 작동
  2. 배열의 인덱스와 종료조건을 설정할 필요가 없다
  3. : 기호를 기준으로 오른쪽에는 탐색할 배열(numbers)를 선택하고 왼쪽에는 반복할때마다 값을 저장해줄 변수(number)를 선언한다
  4. : for 문인만큼 배열의 값을 하나씩 꺼내서 변수에 저장하는 작업을 반복한다
  5. 배열을 탐색하며 마지막에 도달하였을 때, 더이상 꺼낼 원소가 없으면 for 문을 종료한다

→ 즉 귀찮게 인덱스나 조건문을 설정해주지 않아도 배열의 요소를 순회할 수 있기 때문에 코드가 간결하고 가독성이 올라간다.

 

단 이러한 for-each 문을 사용할 수 없는 상황이 한가지 존재하는데,

인덱스 값이 증가하는것을 표현하거나 하는 작업을 하기 위해 인덱스를 직접적으로 사용해야하는 경우에는 for-each문을 사용할 수 없다.

바로 코드로 알아보자.

for(int i = 0 ; i < numbers.length ; ++i){
            System.out.println("number" + i + "번 값은" + number);
        }

요딴식으로 i 값을 보여주기 위해 직접 표현해야하는 경우에는 사용할 수 없다.

항상 코드는 가독성이 좋고 간결하게 짜는게 좋다. 아무리 아는 문법이라도 더 열심히 공부하자

그럼 오늘도 20000!