๐Ÿ“š Study/๋””์ž์ธ ํŒจํ„ด

[Java ์–ธ์–ด๋กœ ๋ฐฐ์šฐ๋Š” ๋””์ž์ธํŒจํ„ด ์ž…๋ฌธ] 1. Iterator

์ ์ด 2024. 3. 7. 09:10
๋ฐ˜์‘ํ˜•

Iterator

๋ฌด์—‡์ธ๊ฐ€ ๋งŽ์ด ๋ชจ์—ฌ ์žˆ์„ ๋•Œ ์ด๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ ์ „์ฒด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ

  • iterator: ๋ฐ˜๋ณต์ž

Iterable<E> Interface

์ฒ˜๋ฆฌ๋ฅผ ๋ฐ˜๋ณตํ•  ๋Œ€์ƒ์„ ๋‚˜ํƒ€๋ƒ„

  • ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋Š” ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋ญ”๊ฐ€ ๋งŽ์ด ๋ชจ์—ฌ์žˆ๋Š” ๊ฒƒ(=์ง‘ํ•ฉ์ฒด)๊ฐ€ ๋œ๋‹ค
package java.lang.*

public interface Iterable<E> {
	public abstract Iterator<E> iterator();
}
  • `iterator()`: ์ง‘ํ•ฉ์ฒด์— ํฌํ•จ๋œ ์š”์†Œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฒ˜๋ฆฌํ•ด ๋‚˜๊ฐ€๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

 

Iterator<E> Interface

  • ํ•˜๋‚˜ํ•˜๋‚˜์˜ ์š”์†Œ์ฒ˜๋ฆฌ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ → ๋ฃจํ”„ ๋ณ€์ˆ˜ ์—ญํ• 
package java.util.*

public interface Iterator<E> {
	public abstract boolean hasNext();
	public abstract E next();
}
  • `hasNext()`: ๋‹ค์Œ ์š”์†Œ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๋Š” ๋ฉ”์†Œ๋“œ
    • ๋ฃจํ”„ ์ข…๋ฃŒ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ
  • `next()`: ๋‹ค์Œ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์†Œ๋“œ
    • ๋‹ค์Œ `next()` ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ์ œ๋Œ€๋กœ ๋‹ค์Œ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๋‹ค์Œ์œผ๋กœ ์ง„ํ–‰์‹œ์ผœ ๋†“๋Š” ์—ญํ•  ํฌํ•จ
๐Ÿ’ก Java์˜ ํ™•์žฅ for๋ฌธ์€ Iterable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ Iterator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌ → Java์˜ ํ™•์žฅ for๋ฌธ์—๋Š” Iterator ํŒจํ„ด์ด ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ!

 

Iterator ํŒจํ„ด์˜ ๋“ฑ์žฅ์ธ๋ฌผ

  • `Iterator`(๋ฐ˜๋ณต์ž)
    • ์š”์†Œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค(API)๋ฅผ ๊ฒฐ์ •
    • hasNext() , next() ๋ฅผ ๊ฒฐ์ •(Iterator<E>)
  • `ConcreteIterator` (๊ตฌ์ฒด์ ์ธ ๋ฐ˜๋ณต์ž)
    • Iterator๊ฐ€ ๊ฒฐ์ •ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‹ค์ œ๋กœ ๊ตฌํ˜„
    • ๊ฒ€์ƒ‰์— ํ•„์š”ํ•œ ์ •๋ณด(index ๋“ฑ..)์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•จ
  • `Aggregate` (์ง‘ํ•ฉ์ฒด)
    • Iterator๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅด ๊ฒฐ์ •
    • Iterator ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฒฐ์ •(Iterable<E>)
  • `ConcreteAggregate`(๊ตฌ์ฒด์ ์ธ ์ง‘ํ•ฉ์ฒด)
    • Aggregate๊ฐ€ ๊ฒฐ์ •ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‹ค์ œ๋กœ ๊ตฌํ˜„
    • ๊ตฌ์ฒด์ ์ธ Iterator ์—ญํ•  → ConcreteIterator์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ƒ„

 

Iterator๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ด์œ 

  • Iterator๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๊ตฌํ˜„๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฐ˜๋ณต
Iterator<Book> it = bookShelf.iterator();
while (it.hasNext()) {
	Book book = it.next();
	System.out.println(boot.getName());
}
  • BookShelf๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝํ•˜๋“  iterator ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์˜ฌ๋ฐ”๋ฅธ Iterator<Book>์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด while ๋ฃจํ”„๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋™์ž‘ํ•œ๋‹ค. → while ๋ฃจํ”„๊ฐ€ ConcreteAggregate ๊ตฌํ˜„์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์žฌ์‚ฌ์šฉ์„ฑ ์ด‰์ง„!

https://m.yes24.com/Goods/Detail/115576266

 

JAVA ์–ธ์–ด๋กœ ๋ฐฐ์šฐ๋Š” ๋””์ž์ธ ํŒจํ„ด ์ž…๋ฌธ - ์˜ˆ์Šค24

๊ฐ์ฒด์ง€ํ–ฅ ์ดˆ์‹ฌ์ž๋„ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋””์ž์ธ ํŒจํ„ด ์ž…๋ฌธ์„œํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์˜ˆ์ „๊ณผ ๊ฐ™์€ ์ผ์„ ๋ฐ˜๋ณตํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋Š๋‚„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๊ฒฝํ—˜์ด ๋Š˜์–ด ๊ฐˆ์ˆ˜๋ก ์ด๋Ÿฌํ•œ ‘ํŒจํ„ด’์ด ์ž์‹ ์˜ ๋จธ๋ฆฟ์†์— ๋งŽ์ด

m.yes24.com

 

๋ฐ˜์‘ํ˜•