Java - for each문

2025. 4. 24. 03:50·Java
반응형

 

 

알고리즘 공부를 하다가 for each문이 나와서 글을 작성해 본다.

학부에서 Java를 공부할 때 for each문을 접해본 적이 없었는데

NHN 아카데미 자바 백엔드 과정을 수료하면서 처음 배웠던 기억이 있다....


 

for each문이란?

for-each 문은 컬렉션(Collection)이나 배열(Array)에 저장된 요소들을 하나씩 순차적으로 반복(iterate) 할 때 사용하는

간편한 반복문이다...

라고 하는데 향상된 for문이라고 부르기도 한다.

for (자료형 변수 : 컬렉션 또는 배열) {
    // 반복할 코드
}

 

예시로 코드를 작성해 본다면 이런 식으로 사용할 수 있겠다.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

for (String name : names) {
    System.out.println(name);
}

 

 

사실 for문으로 작성해도 아무 이상이 없는 코드인데 

왜 for each문을 사용하는 걸까?라는 생각이 들 수 있는데... 

그 이유는 아래와 같다.


  • 가독성: 코드가 간결하고 읽기 쉬움
  • 코드량 감소: 인덱스를 따로 관리할 필요 없음
  • 오류 감소: 반복 범위 실수나 인덱스 오류(IndexOutOfBoundsException) 가능성 줄어듦

 

그렇다면 사용할 때 주의할 점은 뭐가 있을까?

for each문은 Iterable 인터페이스를 상속하는 자료구조에만 사용할 수 있다!@

이게 무슨 말이냐면 

List 인터페이스
SequencedCollection 인터페이스
Collection 인터페이스

 

이렇게 쭉쭉 타고 들어가다 보면 결국 Iterable을 상속하는 걸 볼 수 있다.

아니 그럼 그건 또 뭐야... 라고 할 텐데!

Iterable은 Java에서 iteration이라 하는 즉 반복을 할 수 있게 만들어주는 최상위 인터페이스다

이 인터페이스를 구현한 클래스가 for each문을 사용할 수 있는 것이다 


그렇다면 어떤 상황에 사용해야 하나?

 

​기존의 for문 방식은 list의 원소를 접근할 때 get()을 사용해 접근한다. 그렇다면 ArrayList와 LinkedList의 get() 메서드 시간 복잡도는 어떻게 될까?

 

​ArrayList는 해당 인덱스로 바로 접근이 가능하기 때문에 O(1)의 시간 복잡도를 가지지만

LinkedList는 매번 첫 번째의 Head에서 해당 인덱스까지 이동하기 때문에 O(N)의 시간 복잡도를 가진다.

​즉, 다음과 같은 상황에서 List가 LinkedList라면 O(N)이 아닌 O(N^2)의 시간 복잡도를 가지게 된다.

 

하지만 for each문 같은 경우는 Iterator를 사용하기 때문에 cursor변수를 가지고 자신이 순환하는 위치를 알고 있으므로

매번 처음부터 순환할 필요가 없다

LikedList에서 for each문을 사용한다면 O(N)의 시간 복잡도 나오는 것이다.

 

​하지만 반대로 ArrayList인 경우는 평균적으로 기존의 for 문 방식이 더 빠르다. for-each문 방식은 Iterator라는 객체를 만들기 때문에 get()보다 next() 비용이 더 크기 때문이다. 하지만 사실 큰 차이는 없다고 한다.

 

index를 사용하지 않는다면 for each문을 사용하는 걸 추천한다.


참고 : https://sorjfkrh5078.tistory.com/98

반응형

'Java' 카테고리의 다른 글

[Java] 제네릭 (Generic) 완전 정복 T와 와일드 카드  (0) 2026.06.17
[Java] HashMap 은 뭐고 어떻게 동작 하는 걸까?  (0) 2026.04.03
Java - Collection Framework란?  (0) 2025.04.24
Java - 면접 질문으로 다시 보는 Java의 List와 구현체(ArrayList 등)와 관계  (2) 2025.04.24
Java - for each문 직접 구현해보기  (0) 2025.04.24
'Java' 카테고리의 다른 글
  • [Java] HashMap 은 뭐고 어떻게 동작 하는 걸까?
  • Java - Collection Framework란?
  • Java - 면접 질문으로 다시 보는 Java의 List와 구현체(ArrayList 등)와 관계
  • Java - for each문 직접 구현해보기
fkqlaus
fkqlaus
안녕하세요 Java, Spring boot 공부하는 주니어 개발자입니다
  • fkqlaus
    개발자가 끄적끄적 블로그
    fkqlaus
  • 전체
    오늘
    어제
    • 분류 전체보기 (24)
      • Spring boot (3)
      • 프레임워크 (3)
      • Java (6)
      • DevOps (3)
      • DB (1)
      • CS (1)
      • GIS (1)
      • 알고리즘 문제풀이 (9)
      • 알고리즘 (0)
  • 인기 글

  • 태그

    서버
    개발자
    cs
    Java
    알고리즘
    spring
    프로그래머스
    SWEA
    collection
    개발
    컴퓨터
    db
    list
    DevOps
    D2
    코딩테스트
    완전탐색
    데이터베이스
    docker
    iterator
  • hELLO· Designed By정상우.v4.10.3
fkqlaus
Java - for each문
상단으로

티스토리툴바