๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์ž๋ฐ”

์ž๋ฐ” iterators๋ž€?

by moon101 2024. 2. 11.

๐Ÿฃ Java Iteration ๐Ÿฃ

 

Java์—์„œ Map ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด๋ฉด for๋ฌธ์„ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•๊ณผ iterator๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ• 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. 

๊ทธ๋Ÿฐ๋ฐ iterator๋กœ Map์„ ์ˆœํšŒํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์ธํ…”๋ฆฌ์ œ์ด์—์„œ๋Š” ํ–ฅ์ƒ๋œ for๋ฌธ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. 

์ธํ…”๋ฆฌ์ œ์ด์—์„œ ๋ฐ‘์ค„์„ ํ™•์ธํ•˜๋ฉด 'while' loop can be replaced with enhanced 'for'๋ผ๊ณ  ๋‚˜์˜จ๋‹ค

 

์ธํ…”๋ฆฌ์ œ์ด์—์„œ ์ถ”์ฒœํ•˜๋Š”๋Œ€๋กœ enhanced 'for' loop์œผ๋กœ ๋ฐ”๊ฟ”๋ณด๋ฉด ๊ธฐ์กด์— ์ž‘์„ฑํ•œ for๋ฌธ์„ ํ™œ์šฉํ•œ Map ์ˆœํšŒ๋ฐฉ๋ฒ•๊ณผ ๋˜‘๊ฐ™์ด ๋ณ€๊ฒฝ๋˜๋Š”๋ฐ ํ–ฅ์ƒ๋œ for๋ฌธ์€ ์‚ฌ์‹ค iterator object๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ˆœํšŒํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ์˜ˆ์˜๊ฒŒ ๋ฐ”๊ฟ”๋†“์€ ๊ฒƒ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. (๋ฌผ๋ก , iterator๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ˆœํšŒํ•˜๋Š” ๋„์ค‘์— ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํ–ฅ์ƒ๋œ for๋ฌธ์€ ConcurrentModificationException์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœํšŒ ๋„์ค‘ ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค.)

iterator๋ฅผ ํ™œ์šฉํ•œ ์ฝ”๋“œ์™€ enhanced for๋ฌธ ๋ชจ๋‘ 123์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค

 

 

๊ทธ๋ž˜์„œ ํ–ฅ์ƒ๋œ for๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” 

1. ํ•ด๋‹น ํด๋ž˜์Šค์— iterator ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”  iterator() ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€

2. iterator ์ธํ„ฐํŽ˜์ด์Šค์— hasNext(), next() ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. 

 

Set/List Collection์—์„œ ํ–ฅ์ƒ๋œ for๋ฌธ์„  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” Set/List์ธํ„ฐํŽ˜์ด์Šค๋Š” Collection์„ ์ƒ์†ํ•˜๊ณ  Collection์€ Iterable์„ ์ƒ์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋งŒ์•ฝ ์‚ฌ์šฉ์ž ์ƒ์„ฑ ํด๋ž˜์Šค์— ํ–ฅ์ƒ๋œ for๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, Set/List์™€ ๊ฐ™์ด Iterable์„ ์ƒ์†๋ฐ›์•„์•ผ ํ•œ๋‹ค. 

Set ์ธํ„ฐํŽ˜์ด์Šค๋Š” Collection์„ ์ƒ์†๋ฐ›๊ณ 

 

Collection์ธํ„ฐํŽ˜์ด์Šค๋Š” Iterable์„ ์ƒ์†๋ฐ›๋Š”๋‹ค.

 

 

Iterables๋Š” iterators๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•˜๋ฉฐ, iterable interface๋ฅผ ์ƒ์†ํ•œ ํด๋ž˜์Šค๋Š” iterator๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” iterator() ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค. 

public interface Iterable<T> {
	Iterator<T> iterator();
}

 

Iterators๋Š” ์ˆœํšŒ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค. Iterator๋ฅผ ์ƒ์†ํ•˜๋ฉด hasNext()์™€ next() ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. 

public interface Iterator<T> {
	boolean hasNext();
	T next();
}

 

 

์˜ˆ์ œ 1

Iterable์„ ์ƒ์† ๋ฐ›๋Š” Books ํด๋ž˜์Šค ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค. Books ํด๋ž˜์Šค๋Š” Book ๊ฐ์ฒด๋ฅผ list๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ List๊ฐ€ ์ด๋ฏธ iterator ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— books.iterator()๋กœ list๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” iterator๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.  

Books ํด๋ž˜์Šค
Book ํด๋ž˜์Šค

 

ํ–ฅ์ƒ๋œ for๋ฌธ์„ iterable์„ ์ƒ์†ํ•œ Books ํด๋ž˜์Šค์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

ํ•˜์ง€๋งŒ Books ํด๋ž˜์Šค๋Š” List๋กœ  Book์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ๊ตฌํ˜„์ด ์‰ฌ์› ์ง€๋งŒ iterator() ๋ฉ”์†Œ๋“œ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ๋  ๋•Œ๋Š” hasNext()์™€ next() ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

 

 

 

์˜ˆ์ œ 2

Book ํด๋ž˜์Šค๋ฅผ ์กฐ๊ธˆ ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ ๋‹ค์Œ Book ๊ฐ์ฒด์˜ reference๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ next ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

Book ํด๋ž˜์Šค

 

Books ํด๋ž˜์Šค๋Š” ๊ธฐ์กด๊ณผ ๋™์ผํ•˜์ง€๋งŒ ์ƒ์„ฑ์ž๋กœ Book ๊ฐ์ฒด๋ฅผ ๋ฐ›๊ณ  ์ƒˆ๋กœ ๋งŒ๋“  BookIterator๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

 

 

Iterator๋ฅผ ์ƒ์†๋ฐ›์€ custom BookIterator๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ง์ ‘ hasNext()์™€ next() ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์ฃผ๊ณ  ๋‚˜๋ฉด

BookIterator ํด๋ž˜์Šค

 

 

ํ–ฅ์ƒ๋œ for ๋ฌธ์„ ์˜ˆ์ œ 1๊ณผ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

 

 

์ฐธ๊ณ ์ž๋ฃŒ 

1. https://cs61b-2.gitbook.io/cs61b-textbook/12.-inheritance-iv-iterators-object-methods/12.3-iteration

 

 
 
 
 

๋Œ“๊ธ€