반응형

for each문 , 개선된 for문 , 향상된 for문 다양하게 부르지만 본문에선 개선된 for문이라 명칭 하겠습니다.

 

개선된 for 문

 

조건


1.JDK 1.5 이상

2.사용할 변수는 지역변수로 인식된다. (For문 안에서 사용되기 때문)
3. 대상은 배열 or 여러 원소를 포함한 자료형이어야 한다.

 

 

장점


1.간편한,가독성 좋은 코드
2. 배열 인덱스 문제 해결 (ArrayIndexOutOfBoundsException 예외를 피할 수 있다.)

 

 

단점


1.인덱스를 사용하지 못한다.(일반 for문의 (int i=0;) 할 때 i 같은 인덱스를 말하는 것) 하지만 방법이 있다.
★ 중요 ★
2.배열이나 ArrayList 값을 사용할 순 있지만 절대 수정할 수는 없다.

 

 

사용 이유


배열처럼 여러 원소로 이루어진 집합의 모든 원소에 대해 특정 작업을 반복하기 위해 사용

 

자주 사용되는 상황

1.ArrayList 원소 출력
2.배열 원소 출력

 

 

속도


일반 for문이 더 빠르다는 소문이 있어서 테스트해봤는데, 제가 해본 결과는 일단 같았습니다.

일반 for문 == 개선된 for문

이 부분에 있어서 정확하게 아시는 분은 덧글좀 남겨주세요.

 

문법


for(자료형 변수명 : 배열명){
	문장
}

 

쉽게 설명하면

for(자료형 한 단계 아래의 자료형의 변수명 : 배열명){

}

정확히 말하면 아래의 자료형이 아니지만 이렇게 생각하면 이해가 쉽더라고요.

 

실전 예제 - 일반 배열 원소 추출

String[] arr = {"1-1","1-2","1-3","1-4","1-5"};
 		
for(String s : arr) {
		  
 System.out.println(s);
		  
}

결과

 

 

실전 예제 2 - 이차원 배열 원소 추출

String[][] arr = {{"1-1","1-2","1-3","1-4","1-5"},{"2-1","2-2","2-3","2-4","2-5"}};
 		
for(String[] arrs : arr) {
	for(String s : arrs) {
		System.out.println(s);
	}
}

결과

 

 

실전 예제 3 - 삼차원 배열 원소 추출

String[][][] arr = {{{"1-1","1-2","1-3","1-4","1-5"},{"2-1","2-2","2-3","2-4","2-5"}},
					{{"3-1","3-2","3-3","3-4","3-5"},{"4-1","4-2","4-3","4-4","4-5"}}};
 		
for(String[][] arrtop : arr) {
	for(String[] arrs : arrtop) {
		for(String s : arrs) {
			System.out.println(s);
		}
	}
}

결과

 

 

실전 예제 4 - ArrayList<String> 원소 추출

ArrayList<String> arrlist = new ArrayList<String>();
arrlist.add("1-1");
arrlist.add("1-2");
arrlist.add("1-3");
		
for(String s : arrlist) {
			  
  System.out.println(s);
			  
}

결과

 

 

실전 예제 5 - ArrayList<Class> 원소 추출

public class Ex001 {

	private String a;
	private int b;
	private int c;
	
	public String getA() {
		return a;
	}
	public void setA(String a) {
		this.a = a;
	}
	public int getB() {
		return b;
	}
	public void setB(int b) {
		this.b = b;
	}
	public int getC() {
		return c;
	}
	public void setC(int c) {
		this.c = c;
	}
}
ArrayList<Ex001> arrlist = new ArrayList<Ex001>();

Ex001 ex01 = new Ex001();
ex01.setA("a");
ex01.setB(1);
ex01.setC(2);
arrlist.add(ex01);
		
 for(Ex001 s : arrlist) {
			  
 System.out.println(s.getA());
 System.out.println(s.getB());
 System.out.println(s.getC());
			  
}

결과


 

반응형
  1. 42421 2021.05.10 15:30

    개선된 for문이 더 느리다는 말은 들어본적이 없지만, 그런 소문이 나온 이유를 대강 추측해본다면,

    아마 일반 for문은 미리 컴파일된 조건이나 수식같은 것이 있어서 그것대로만 하면 되지만,
    개선된for문은 실행할 때마다 배열/list 객체의 사이즈를 재고 그것대로 일반 for문에 적용한 다음,
    매번 반복할 때 마다 새로운 변수/객체를 만들어주니까 차이가 생긴다는 것이 아닐까라고 생각합니다.

+ Recent posts