Lua - 이터레이터: 초보자 가이드

안녕하세요, 미래의 Lua 프로그래머 여러분! 오늘 우리는 Lua 이터레이터의 세상으로 흥미로운 여정을 떠납니다. 프로그래밍에 처음 도전하신다면 걱정 마세요 - 저는 여러분의 친절한 안내자가 되겠습니다. 우리는 한 단계씩 함께 나아갈 것입니다. 이 튜토리얼이 끝나면, 여러분은 프로처럼 이터레이션을 할 수 있을 것입니다!

Lua - Iterators

이터레이터는 무엇인가요?

먼저, 이터레이터가 무엇인지 이해해 보겠습니다. 사과가 담긴 바구니가 있다고 상상해 보세요. 그리고 각 사과를 하나씩 검사하고 싶습니다. 이터레이터는 마법의 손처럼, 바구니에 몇 개의 사과가 있는지, 어떻게 정렬되어 있는지 신경 쓰지 않고 각 사과를 차례대로 집어주는 역할을 합니다.

프로그래밍 용어로는, 이터레이터는 컬렉션(예: Lua의 배열이나 테이블)의 모든 요소를 거쳐갈 수 있도록 도와주는 객체입니다.

이제 Lua에서 다양한 종류의 이터레이터를 탐구해 보겠습니다!

일반 이터레이터

일반 이터레이션 루프는 Lua에서 이터레이터를 사용하는 가장 일반적인 방법입니다. 이는 간단하며, 우아하고 강력합니다. 기본 예제를 보겠습니다:

local fruits = {"apple", "banana", "orange", "grape"}

for i, fruit in ipairs(fruits) do
print(i .. ": " .. fruit)
end

이 코드를 실행하면 다음과 같은 출력을 보게 됩니다:

1: apple
2: banana
3: orange
4: grape

이를 해부해 보겠습니다:

  • 테이블(배열)을 생성합니다.
  • for 루프를 사용하여 ipairs 내장 이터레이션 함수를 사용합니다.
  • i는 인덱스이고, fruit는 해당 인덱스의 값입니다.
  • 루프는 테이블의 끝에 도달할 때 자동으로 중지됩니다.

이렇게 멋진 것은 아닙니까? 마법의 손이 각 과일을 집어주고, 바구니에서의 위치를 알려주는 것 같아요!

다른 예제: 사전을 이터레이션

다른 것을 시도해 보겠습니다:

local person = {name = "Alice", age = 30, job = "Developer"}

for key, value in pairs(person) do
print(key .. " = " .. value)
end

이는 다음과 같은 출력을 생성합니다:

name = Alice
age = 30
job = Developer

여기서 우리는 pairsipairs 대신 사용하고 있습니다. pairs는 단순한 목록이 아닌 테이블에 매우 유용합니다.

상태 없는 이터레이터

이제 조금 더 수준 높은 내용으로 넘어가겠습니다. 상태 없는 이터레이터는 호출 간에 상태를 유지하지 않는 함수입니다. 이는 간단하며 효율적입니다. 예제를 보겠습니다:

function square(max, current)
current = current or 0
if current >= max then
return nil
end
return current + 1, (current + 1)^2
end

for i, squared in square, 5 do
print(i .. " squared is " .. squared)
end

이는 다음과 같은 출력을 생성합니다:

1 squared is 1
2 squared is 4
3 squared is 9
4 squared is 16
5 squared is 25

이를 해부해 보겠습니다:

  • 우리는 max 값과 current 값을 받는 square 함수를 정의합니다.
  • 함수는 다음 숫자와 그 제곱을 반환하거나, 완료되면 nil을 반환합니다.
  • for 루프에서는 이 함수를 직접 이터레이터로 사용합니다.

마치 계산기를 누르면 다음 제곱 수를 주는 것 같아요!

상태 있는 이터레이터

마지막으로 상태 있는 이터레이터에 대해 이야기해 보겠습니다. 이는 더 복잡하지만 더 강력합니다. 호출 간에 상태를 기억합니다. 예제를 보겠습니다:

function fibonacci(n)
local count = 0
local a, b = 0, 1
return function()
if count < n then
count = count + 1
a, b = b, a + b
return count, a
end
end
end

for i, fib in fibonacci(10) do
print("The " .. i .. "th Fibonacci number is " .. fib)
end

이는 첫 10개의 피보나치 수를 출력합니다:

The 1th Fibonacci number is 1
The 2th Fibonacci number is 1
The 3th Fibonacci number is 2
The 4th Fibonacci number is 3
The 5th Fibonacci number is 5
The 6th Fibonacci number is 8
The 7th Fibonacci number is 13
The 8th Fibonacci number is 21
The 9th Fibonacci number is 34
The 10th Fibonacci number is 55

이 이터레이터는 작은 피보나치 수 공장입니다. 각 번호를 호출할 때마다, 그는 어디서 멈춘 것인지 기억하고 다음 수를 반환합니다.

결론

그렇습니다! Lua 이터레이터의 세상을 탐구했습니다. 간단한 일반 루프에서 복잡한 상태 있는 이터레이터까지. 연습이 완벽을 이루는 열쇠입니다. 다양한 시퀀스나 데이터 구조에 자신의 이터레이터를 만들어 보세요.

이제 사용한 이터레이션 함수의 빠른 참조 표를 제공합니다:

함수 설명 사용 사례
ipairs() 배열과 같은 테이블을 이터레이션 번호된 목록에 대해
pairs() 모든 테이블 요소를 이터레이션 사전이나 혼합된 테이블에 대해
커스텀 함수 상태 없는 또는 상태 있는 특별한 시퀀스나 복잡한 이터레이션에 대해

행복하게 코딩하세요, 여러분의 이터레이션이 항상 풍성하길 바랍니다!

Credits: Image by storyset