Skip to content
This repository was archived by the owner on Jan 13, 2021. It is now read-only.

Latest commit

ย 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 

README.md

๊ฐœ์š”

๋ฐ˜๋ณต์ž(Iterator) ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ฐฐ์—ด์ด๋‚˜ ๊ทธ์™€ ์œ ์‚ฌํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ๋‚ด๋ถ€์˜ ์š”์†Œ๋ฅผ ์ˆœํšŒ(traversing)ํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.

๋‹ค๋ฅธ์ด๋ฆ„

Cursor

๋™๊ธฐ

List ๋“ฑ ์ง‘ํ•ฉ ๊ฐ์ฒด(aggregate object)๋“ค์€ ์ด ๋‚ด๋ถ€ ํ‘œํ˜„ ๊ตฌ์กฐ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ ๋„ ์ž์‹ ์˜ ์›์†Œ๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ, ์ด๋ฏธ ์ •์˜๋œ ๋ฐฉ๋ฒ•๊ณผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์›์†Œ๋“ค์„ ์ˆœํšŒํ•˜๊ณ ์ž ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆœํšŒ ๋ฐฉ๋ฒ•์ด ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  List Class์˜ Interface๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์„๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด ๋ฐ˜๋ณต์ž ํŒจํ„ด ์ด๋‹ค. ์ด ํŒจํ„ด์˜ ํ•ต์‹ฌ์€ List ๊ฐ์ฒด์— ์ ‘๊ทผํ•ด์„œ ์ƒˆ๋กœ์šด ๋‚ด์šฉ์€ ์‚ฝ์ž…, ์‚ญ์ œ ํ˜น์€ ์ˆœํšŒํ•˜๋Š” ๋‚ด์šฉ์„ ๋ฐ˜๋ณต์ž ๊ฐ์ฒด์— ์ •์˜ํ•˜๋Š” ๊ฒƒ. ์ฆ‰ ๋ฐ˜๋ณต์ž ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Iterator Class๋Š” ์›์†Œ๋“ค์— ์ ‘๊ทผํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ interface๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๋ฐ˜๋ณต์ž ๊ฐ์ฒด๋Š” ํ˜„์žฌ ์›์†Œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ด€๋ฆฌํ•˜๊ณ , ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ์›์†Œ๋“ค์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ์žˆ๋‹ค.

ํ™œ์šฉ์„ฑ

๋ฐ˜๋ณต์ž ํŒจํ„ด์€ ์ด๋Ÿฐ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ ๋ฉ๋‹ˆ๋‹ค.

  • ๊ฐ์ฒด ๋‚ด๋ถ€ ํ‘œํ˜„ ๋ฐฉ์‹์„ ๋ชจ๋ฅด๊ณ ๋„ ์ง‘ํ•ฉ ๊ฐ์ฒด์˜ ๊ฐ ์›์†Œ๋“ค์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • ์ง‘ํ•ฉ ๊ฐ์ฒด๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์ง€์›ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆœํšŒํ•˜๊ณ  ์‹ถ์„ ๋•Œ

์˜ˆ์ œ์ฝ”๋“œ

class LinkedList<T> {
    private data class Node<T>(val nodeValue: T, var next: Node<T>? = null)
    private var head: Node<T>? = null

    fun insert(item: T) {
        if (head == null) head = Node(item)

        var cursor = head

        while (cursor?.next != null) {
            cursor = cursor.next
        }

        cursor?.next = Node(item)
    }

    fun forEach(action: (T) -> Unit) {
        var cursor = head
        while (cursor != null) {
            action(cursor.nodeValue)
            cursor = cursor.next
        }
    }
}

fun main() {
    val linkedList = LinkedList<Int>()
    linkedList.insert(1)
    linkedList.insert(2)
    linkedList.insert(3)
    linkedList.insert(4)
    linkedList.insert(5)

    linkedList.forEach {
        println(it)
    }
}