0Pricing
Ruby Academy · 강의

열거자 객체

외부 반복을 알아봅니다

열거자 객체은(는) CoddyKit의 무료 Ruby Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Ruby Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

외부 반복

열거자는 반복을 나타내는 객체입니다. 외부 반복을 지원하므로 each에 블록을 전달하는 대신 next를 사용해 값을 한 번에 하나씩 가져옵니다.

enum = [10, 20, 30].each
puts enum.next
puts enum.next

열거자 얻기

each와 같은 반복 메서드를 블록 없이 호출하면 실행되지 않고 열거자가 반환됩니다.

enum = [1, 2, 3].each
puts enum.class

다음 값 가져오기

next는 호출할 때마다 다음 요소를 반환합니다. 열거자는 현재 위치를 기억합니다.

letters = ["a", "b", "c"].each
puts letters.next
puts letters.next
puts letters.next

끝에서 StopIteration 발생

값이 모두 소진되면 next가 StopIteration을 발생시킵니다. 이를 처리하여 반복을 깔끔하게 끝낼 수 있습니다.

enum = [1, 2].each
begin
  loop { puts enum.next }
rescue StopIteration
  puts "done"
end

다음 값 살펴보기와 처음으로 되돌리기

peek는 위치를 이동하지 않고 다음 값을 확인하며, rewind는 시작 위치로 되돌립니다.

enum = [5, 6, 7].each
puts enum.peek
puts enum.next
enum.rewind
puts enum.next

사용자 정의 열거자 만들기

Enumerator.new로 직접 만들 수 있습니다. 블록은 값을 생성하는 객체 y를 전달받으며, y << 또는 y.yield로 값을 전달합니다.

evens = Enumerator.new do |y|
  n = 0
  loop do
    y << n
    n += 2
  end
end
puts evens.next
puts evens.next
puts evens.next

무한 열거자

사용자 정의 열거자는 값을 가져오는 방식으로 작동하므로 무한하게 만들 수 있습니다. 필요한 만큼만 가져오면 됩니다.

counter = Enumerator.new do |y|
  i = 1
  loop { y << i; i += 1 }
end
p counter.first(5)

열거자는 열거 기능을 제공함

열거자는 Enumerable을 포함하므로 일반적인 메서드인 map, select, take도 사용할 수 있습니다. 따라서 내부 반복과 외부 반복을 함께 활용할 수 있습니다.

fib = Enumerator.new do |y|
  a, b = 0, 1
  loop do
    y << a
    a, b = b, a + b
  end
end
p fib.take(8)

with_index

with_index는 모든 열거자에 인덱스를 연결하며, 원하는 숫자부터 시작하도록 지정할 수도 있습니다.

["x", "y", "z"].each.with_index(1) do |item, i|
  puts "#{i}: #{item}"
end

each에서 열거자 반환하기

직접 만든 클래스에서는 블록이 주어지지 않을 때 to_enum(:each)(또는 enum_for)를 반환하면 호출자가 외부에서 반복할 수 있습니다.

class Trio
  def each
    return to_enum(:each) unless block_given?
    yield 1; yield 2; yield 3
  end
end
e = Trio.new.each
puts e.next
puts e.next

모아서 활용하기

열거자는 세밀하게 제어할 수 있습니다:

  • next로 값을 가져오고, 미리 확인하거나 되감을 수 있습니다.
  • Enumerator.new와 값 전달기를 사용하여 사용자 지정 열거자를 만들 수 있습니다.
  • 열거 가능한 객체이므로 매핑, 선택, 가져오기 연산을 모두 사용할 수 있습니다.
odds = Enumerator.new do |y|
  n = 1
  loop { y << n; n += 2 }
end
p odds.first(4)

빠른 확인

Enumerator 객체에 대한 이해도를 확인해 보세요.

복습

Enumerator 객체에 대해 다음을 배웠습니다:

  • next, peek, rewind를 사용한 외부 반복
  • StopIteration은 끝에 도달했음을 나타냅니다.
  • Enumerator.new { |y| ... }를 사용하여 사용자 지정 열거자를 만들 수 있습니다.
  • 열거 가능한 객체이며 무한할 수도 있습니다.
nums = Enumerator.new { |y| 1.upto(3) { |n| y << n } }
puts nums.next
puts nums.next

자주 묻는 질문

“열거자 객체” 강의는 무료인가요?

네 — “열거자 객체” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Ruby Academy 강의 전체를 잠금 해제할 수 있습니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“열거자 객체”에서 뭘 배우나요?

외부 반복을 알아봅니다 브라우저에서 직접 실행하는 실습 코드로 Ruby Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Ruby Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Ruby Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“열거자 객체” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Ruby Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Ruby Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 사용자 정의 each 작성
  2. Enumerable 포함
  3. 지연 열거자
  4. 열거자 객체
← Ruby Academy(으)로 돌아가기