JAVA

JAVA의 for each문

Ambitions 2020. 3. 10. 11:25

학부에서 코딩을 하는게 아닌, 현업에서 개발을 하다보니 for문보다는 for-each문을 더 자주 사용하게 되었는데, 내가 for-each문에 대해 잘 알고쓰는게 아닌 것 같아서 간단하게나마 정리해보고자한다.

먼저 for-each문은 Java5에서 추가되었고, 기존 for문과는 다르게 반복문 안의 요소에 직관적으로 접근할 수 있게 되었다. 기존 for문과의 차이점을 코드로보자면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
//main.....
public void loop() {
    String []array = new String[]{"1""2""3""4"};
 
    for(int i = 0; i < array.length; i++) { //기존 반복문
        System.out.println(array[i]);
    }
 
    for(String item : array) { // 향상된 반복문(for-each)
        System.out.println(item);
    }
}
cs

array를 순회할 때는 차이를 별로 느끼지 못하겠지만, List<Object>일 경우에는 가독성면에서 차이를 느낄 수 있다, 이걸 코드로 정리하자면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
 * Member클래스는 Emp클래스를 참조하고있다
 * public class Member {
 *    String name;
 *     Integer age;
 *    Emp emp;
 *     .....
 * }
 */
public void objectLoop(List<Member> members) {
 
    for (int i = 0; i < members.size(); i++) { // 기존 for문
        System.out.println(members.get(i).getEmp().get(i).getName());
    }
    for (Member item : members) { // 향상된 for문(for-each)
        System.out.println(item.getEmp().getName());
    }
    members.foreach(data -> System.out.println(data.getEmp().getName()); // 람다식을 이용해 표현
}
cs

위 코드를 보면 알 수있듯이, List안의 원소가 객체일 경우에는 일반 for문의 경우 코드가 늘어지는 경향이 생긴다.

또 java 8에서 추가된 람다식을 이용하면 더 심플하게 표현할 수 있다. java 8에서 추갇된 재미있는 기능들이 많으니 공부를 해보면 좋을 것 같다.

 

for-each문을 사용하게 되면 index를 사용할 수 없는데, index가 필요한 경우에는 원시적으로 다음과 같이 사용하면 될 것 같다.

1
2
3
4
5
6
7
// .....
 
int index = 0;
for (Member item : members) { // 향상된 for문(for-each)
    System.out.println(item.getEmp().getName() + index);
    index++;
}
cs