본문 바로가기
개발/Java

[Java] Iterator 란? Iterator의 기본사용법과 응용법을 알아보자!!

by 쓸있쏜 2024. 11. 28.

Java의 Iterator, 다른 클래스와 함께 사용해보기!

안녕, 여러분! 오늘은 Java에서 정말 재밌는 Iterator를 가지고 노는 방법을 소개할게요. 아, 물론 그냥 반복문 쓰면 편하지! 근데, 우리 좀 더 "프로그래머다움"을 즐겨보는 거 어때요? 특히, 다른 클래스랑 엮어서 쓰면 Iterator가 얼마나 재밌는지 알게 될 거예요. 이제 커피 한 잔 준비하고 천천히 따라와요~ 😊


Iterator란?

Iterator는 말 그대로 "반복자"예요. "반복문 돌리는데 굳이 이걸 왜 써?"라고 묻는다면… 음, 좀 더 "객체지향"적이고 깔끔한 코드를 짜기 위해서랄까? 사실 Java에서는 컬렉션(List, Set, Map 등등) 안의 데이터를 순회하는 데 꼭 필요한 친구예요. 쉽게 말하면, 이 친구가 "다음 요소가 있어?" "있으면 가져올게!"를 계속 반복하며 데이터를 하나씩 꺼내주는 거죠.


Iterator 기본 사용법

Iterator를 사용하는 기본 코드, 먼저 보여줄게요. 아주 간단하니까 겁먹지 말고 구경해봐요!

import java.util.ArrayList;
import java.util.Iterator;

public class BasicIteratorExample {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");

        Iterator<String> iterator = fruits.iterator();

        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

"오, 그냥 for-each 쓰는 거랑 별 차이 없네?" 맞아요! 하지만 오늘의 주제는 다른 클래스와 함께 Iterator를 쓰는 방법이니까, 여기서 더 나아가 봅시다.


다른 클래스와 엮어서 사용하기

자, 이제 우리가 만든 클래스에서 Iterator를 활용하는 방법을 보여줄게요. 가령, 우리가 동화 속 마법의 주문을 관리하는 클래스가 있다고 상상해 봐요. (음, 너무 귀엽지 않나요?) 이 클래스에 들어있는 주문들을 순회하는 코드를 짜보는 거죠.

1단계: 주문 클래스 만들기

import java.util.ArrayList;
import java.util.Iterator;

class MagicBook implements Iterable<String> {
    private ArrayList<String> spells;

    public MagicBook() {
        spells = new ArrayList<>();
    }

    public void addSpell(String spell) {
        spells.add(spell);
    }

    @Override
    public Iterator<String> iterator() {
        return spells.iterator();
    }
}

2단계: 주문을 읽어보는 마법사

public class MagicBookExample {
    public static void main(String[] args) {
        MagicBook magicBook = new MagicBook();
        magicBook.addSpell("Abracadabra");
        magicBook.addSpell("Wingardium Leviosa");
        magicBook.addSpell("Expelliarmus");

        for (String spell : magicBook) {
            System.out.println("Casting spell: " + spell);
        }
    }
}

이렇게 응용해봐요!

Iterator를 이렇게 쓰면 진짜 응용할 수 있는 분야가 넓어요. 가령, 게임 개발을 한다고 가정하면 Player 클래스 안에 Inventory라는 리스트를 만들고, 그 리스트를 순회하면서 아이템을 사용하는 코드를 짤 수 있겠죠.

import java.util.ArrayList;
import java.util.Iterator;

class Inventory implements Iterable<String> {
    private ArrayList<String> items;

    public Inventory() {
        items = new ArrayList<>();
    }

    public void addItem(String item) {
        items.add(item);
    }

    @Override
    public Iterator<String> iterator() {
        return items.iterator();
    }
}

public class Player {
    public static void main(String[] args) {
        Inventory inventory = new Inventory();
        inventory.addItem("Sword");
        inventory.addItem("Shield");
        inventory.addItem("Potion");

        System.out.println("Player's Inventory:");
        for (String item : inventory) {
            System.out.println("- " + item);
        }
    }
}

중요한 건 뭐다? 창의력!

Iterator를 사용하면 그냥 데이터 순회하는 게 아니라, 클래스 설계를 조금 더 객체지향적으로 확장할 수 있어요. 예를 들어, Iterator를 커스터마이징해서 특정 조건에 맞는 요소만 반환하도록 만들 수도 있죠. 프로그래밍은 결국 문제를 해결하는 창의적인 도구니까, 재미있게 응용해 보세요. 😊

그럼 다음에 또 재미있는 주제로 만나요~! 여러분의 피드백이 저에겐 마법의 주문이니까, 꼭 댓글로 남겨줘요!

 

댓글