향상된 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]);
}
}
}
단순히 배열을 순회하고 싶은데, 위 코드는 쓸데없이 귀찮은 작업들을 몇 가지 해줘야 한다.
- 인덱스 변수 i 선언 → 메모리 낭비
- i < numbers.length와 같이 조건문도 지정 해줘야한다
- 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);
}
}
}
딱봐도 코드가 훨씬 간결해지지 않았습니까..
위 코드를 설명하자면,
- 일반 for문과 동일하게 작동
- 배열의 인덱스와 종료조건을 설정할 필요가 없다
- : 기호를 기준으로 오른쪽에는 탐색할 배열(numbers)를 선택하고 왼쪽에는 반복할때마다 값을 저장해줄 변수(number)를 선언한다
- : for 문인만큼 배열의 값을 하나씩 꺼내서 변수에 저장하는 작업을 반복한다
- 배열을 탐색하며 마지막에 도달하였을 때, 더이상 꺼낼 원소가 없으면 for 문을 종료한다
→ 즉 귀찮게 인덱스나 조건문을 설정해주지 않아도 배열의 요소를 순회할 수 있기 때문에 코드가 간결하고 가독성이 올라간다.
단 이러한 for-each 문을 사용할 수 없는 상황이 한가지 존재하는데,
인덱스 값이 증가하는것을 표현하거나 하는 작업을 하기 위해 인덱스를 직접적으로 사용해야하는 경우에는 for-each문을 사용할 수 없다.
바로 코드로 알아보자.
for(int i = 0 ; i < numbers.length ; ++i){
System.out.println("number" + i + "번 값은" + number);
}
요딴식으로 i 값을 보여주기 위해 직접 표현해야하는 경우에는 사용할 수 없다.
항상 코드는 가독성이 좋고 간결하게 짜는게 좋다. 아무리 아는 문법이라도 더 열심히 공부하자
그럼 오늘도 20000!
'Java > Java' 카테고리의 다른 글
[Java] 다운 캐스팅 , instanceof (0) | 2024.09.21 |
---|---|
[Java] 절차 지향 프로그래밍(PP) VS 객체 지향 프로그래밍(OOP) (2) | 2024.09.08 |
[Java] Java에서의 스코프(Scope) (0) | 2024.08.31 |
[Java] 객체 지향 언어의 특성(OOP) (0) | 2024.08.19 |
[Java] 예외 처리 (Exception) 워밍업 (0) | 2024.08.15 |