본문 바로가기

개발자노트

반복문 for / for each + 컬렉션 [Iterator]

for문과 for each문의 차이

		ArrayList<Integer> al =new ArrayList<Integer>();
		al.add(1);
		al.add(2);
		al.add(3);
		al.add(4);
		al.add(5);

Integer 값만 받는 ArrayList al을 생성하여  {1,2,3,4,5} 를 배열에 넣어줬다.

이 때 배열 안에 인자값 들을 보기 위해서는 다음과 같이 for문을 사용했는데,

 

 

		for (int i = 0; i < al.size(); i++) {
			System.out.println(i);
		}

이 때 일반 for문 , for(초기식 ; 조건식 ; 증감식){

반복 수행할 작업

}

을 사용하여도 상관이 없지만

1. 가독성이 떨어질 수 있고

2. ArrayIndexOutOfBoundException을 만날 수도 있다.

 

이러한 경우 for each 문을 사용하는데 다음과 같다.

for(int v :al) {
			System.out.println(v);
		}

 

for(타입변수 : 배열이나 컨테이너값) 

for(int v : al) --> int v = al 배열의 각 요소 값을 순차적으로 v에게 전달한다.

                    --> al : al은 iterator 즉 배열이나 컨테이너 등 여러 데이터가 담겨져 있는 변수명.

 

코드가 한결 편안해져서 가독성이 좋아진 걸 볼 수 있다. 하지만 단점이 없는 것은 아니다.

단점으로는 종료 조건과 증감식이 없는 만큼 1씩 증가하는 값과 끝까지 수행하는 것을 조작할 수 없는 단점이 있다.



그리고 한가지 더 배열의 요소를 볼 수 있는 컬렉션이 있는데 그건 바로 [이터레이터] 이다.

		Iterator itr= al.iterator(); // 복사제 역할을 담당하는 컬렉션 ( 원본을 훼손시키지 않는 장점이 있다.)
		while(itr.hasNext()) { // 다음 데이터 가지고 있니?
			System.out.println(itr.next());

[iterator] 는 모든 집합에서 사용이 가능하기 때문에 앞서 말한 [컬렉션] 을 잘 활용하면 개발자들의 실력이 상향평준화되는데 도움이 되고, 통일적인 사용이 가능해져 유지보수에도 도움이 된다.