freeParksey
밥세공기
freeParksey
전체 방문자
오늘
어제
  • 분류 전체보기 (150)
    • JAVA (32)
      • 자바스터디 (21)
      • Java in action (6)
      • OOP (1)
      • test (2)
    • 알고리즘 문제 (51)
      • 백준 (49)
    • C (Atmega128) (7)
    • 인공지능 (11)
    • 운영체제 (8)
    • 디자인패턴 (5)
    • 잡다한것 (2)
    • 사용기 (3)
      • 도커 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 동작 파라미터화
  • Thread #JVM #자바스터디 #
  • 재귀기초
  • 백트랙킹
  • 딥러닝
  • Thread 동작
  • java
  • 3주차
  • generic
  • 그리드
  • 동적계획법
  • 알고리즘
  • 백준
  • 우아한테크코스
  • 자바스터디
  • 운영체제
  • 후기
  • dto 변환
  • 자바
  • 스트림
  • Python
  • 집합과 맵
  • 프리코스
  • dto 변환 위치
  • Collection
  • 분류
  • Iterator
  • 상속
  • 우테코
  • 백트래킹

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
freeParksey

밥세공기

JAVA/자바스터디

[자바 스터디] for vs foreach vs iterator

2023. 1. 28. 04:14

Collection에 대해 공부하다 for문도 있고 foreach문도 있는데 무슨 차이로 동작하고 iterator와의 차이는 무엇인가 궁금하여 공부한 내용을 정리합니다.

 

 

1. Loop문의 특징


 

Loop의 반복문


Java에서 반복문을 사용할 때 for문을 사용하였습니다.

int[] arr1 = new int[]{1,2,3,4,5};
for (int index = 0; index < arr1.length; index++) {
    System.out.println(arr1[index]); // 1 2 3 4 5
}

따라서 위와 같이 사용했는데, 더 다양하고 효율적으로 데이터를 관리할 수 있는 Collection이 나오면서 Collection사용을 지향하게 됐고 

List<Integer> arr = new ArrayList<>(Arrays.asList(1,2,3,4,5));
for (int index = 0; index < arr.size(); index++) {
    System.out.println(arr.get(index)); // 1 2 3 4 5
}

위와같이 사용하게 됐습니다.

 

 

Iterator


Java의 컬렉션 프레임워크를 구현한 List, Set, Map등에서 반복을 위해 사용되는 방법이고 값을 순차적으로 꺼내서 처리할 수 있다.

 List<Integer> arr = new ArrayList<>(Arrays.asList(1,2,3,4,5));
for (Iterator<Integer> it = arr.iterator(); it.hasNext(); ) {
    System.out.println(it.next()); // 1 2 3 4 5
}

따라서 아까와 같은 배열을 Collection의 iterator로 위와 같이 변경할 수 있습니다.

 

 

foreach


foreach문으로 for문의 반복을 간단히 작성하여 가독성이 높습니다.

List<Integer> arr = new ArrayList<>(Arrays.asList(1,2,3,4,5));
for(Integer data : arr) {
    System.out.println(data); // 1 2 3 4 5
}

 

 

2. 비교


for문과 foreach문 전부 for문이므로 순차적으로 데이터를 탐색할 것이다. 하지만 foreach문은 내부적으로 iterator를 통해 동작한다는 특징이 있다.  따라서 foreach문과 iterator문은 기본적으로 동작 원리는 비슷하다 생각하면 된다.

 

성능 및 기능


for문

기본적인 반복문으로 일반 배열이나, Collection의 List에서 특정 횟수를 반복할 때 사용, Set과 Map의 경우 순서가 있는것이 아니므로 index 접근이 불가능하다.

 

foreach문

컬렉션에서 요소를 순차적으로 꺼내서 처리할 때 사용, 단 오직 읽기 용으로 사용한다.

 

iterator문

foreach문과 동일하게 순차적으로 꺼내서 처리하지만, 컬렉션의 요소를 제거하거나 추가가 가능하다.

 

 

가독성 및 사용


for문

코드가 이해하기는 쉽지만, iterator를 사용하지 않으므로 컬렉션 중 Set이나 Map에 대해서 접근이 불가능하다 따라서 특정 횟수를 반복할 때나 인덱스 접근에 많이 사용한다.

 

foreach문

for문보다 훨신 간단하고 코드의 이해가 편하다 또한 컬렉션에서 요소를 순차적으로 꺼내서 사용할 때 사용한다.

 

iterator문

for문이나 while문과 함께 사용하며 순차적으로 컬렉션 요소에 접근할 때와 컬렉션의 요소를 추가 제거할 때 사용하지만 코드가 복잡하다.

 

단, iterator를 사용하여 요소를 제거할 때 remove()를 사용하게 되는데, 이때 next()와 함께 사용하지 않는다면 데이터의 삭제를 정상적으로 하지 못한다.

 

'JAVA > 자바스터디' 카테고리의 다른 글

[자바스터디] Generic vs Object  (0) 2023.01.28
[자바스터디] Generic  (0) 2023.01.28
[자바스터디] Collection - Collections  (0) 2023.01.22
[자바스터디] Collection - Iterator  (0) 2023.01.22
[자바스터디] Collection - List  (0) 2023.01.21
    'JAVA/자바스터디' 카테고리의 다른 글
    • [자바스터디] Generic vs Object
    • [자바스터디] Generic
    • [자바스터디] Collection - Collections
    • [자바스터디] Collection - Iterator
    freeParksey
    freeParksey
    Github: https://github.com/parksey

    티스토리툴바