0Pricing
Ruby Academy · 강의

사용자 정의 each 작성

반복을 구현합니다

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

반복 구현하기

Ruby의 반복은 하나의 메서드인 each를 중심으로 이루어집니다. 직접 each를 작성하면 컬렉션을 순회하는 방식을 정할 수 있고, 반복과 관련된 모든 기능을 사용할 수 있습니다.

class Trio
  def each
    yield 1
    yield 2
    yield 3
  end
end
Trio.new.each { |n| puts n }

each로 값 전달하기

each 내부에서 요소마다 한 번씩 yield를 호출합니다. 호출자가 제공한 블록은 각 값을 차례로 전달받습니다.

class Days
  NAMES = ["Mon", "Tue", "Wed"]
  def each
    NAMES.each { |d| yield d }
  end
end
Days.new.each { |day| puts day }

내부 데이터 저장하기

일반적으로 each는 인스턴스 변수에 저장된 데이터를 순회합니다.

class Stack
  def initialize
    @items = []
  end
  def push(x); @items << x; self; end
  def each
    @items.each { |i| yield i }
  end
end
s = Stack.new
s.push(10).push(20)
s.each { |x| puts x }

사용자 정의 순회 순서

사용자 정의 each는 원하는 순서로 반복할 수 있습니다. 예를 들어 역순으로 반복할 수 있습니다.

class Reversed
  def initialize(arr); @arr = arr; end
  def each
    i = @arr.length - 1
    while i >= 0
      yield @arr[i]
      i -= 1
    end
  end
end
Reversed.new([1, 2, 3]).each { |x| puts x }

여러 값 전달하기

yield는 두 개 이상의 값을 전달할 수 있으며, 블록은 해시의 키와 값처럼 여러 매개변수로 이를 받습니다.

class Pairs
  def each
    yield :a, 1
    yield :b, 2
  end
end
Pairs.new.each { |key, value| puts "#{key}=#{value}" }

each는 컬렉션 자체를 반환

일반적으로 each는 호출을 연결할 수 있도록 컬렉션 자체를 반환합니다. each에서 self를 반환하면 내장 동작과 일치합니다.

class Box
  def initialize(*x); @x = x; end
  def each
    @x.each { |i| yield i }
    self
  end
end
result = Box.new(1, 2).each { |i| }
puts result.class

블록 유무 확인하기

블록이 없는 경우를 처리하여 블록 없이 each를 호출해도 오류가 발생하지 않도록 하세요. 보통은 열거자를 반환하며, 이 내용은 뒤에서 다룹니다.

class List
  def initialize(*x); @x = x; end
  def each
    return @x.to_enum unless block_given?
    @x.each { |i| yield i }
  end
end
puts List.new(5, 6).each.class

다른 메서드 구동하기

each가 있으면 같은 클래스 안에서 이를 기반으로 다른 메서드를 만들 수 있습니다.

class Numbers
  def initialize(*n); @n = n; end
  def each; @n.each { |i| yield i }; end
  def total
    sum = 0
    each { |i| sum += i }
    sum
  end
end
puts Numbers.new(1, 2, 3, 4).total

계산된 시퀀스

each는 데이터를 저장할 필요가 없습니다. 실행 중에 값을 생성할 수도 있습니다.

class Evens
  def initialize(limit); @limit = limit; end
  def each
    n = 0
    while n <= @limit
      yield n
      n += 2
    end
  end
end
Evens.new(8).each { |x| puts x }

열거 기능의 기반

사용자 정의 each는 Enumerable에 필요한 유일한 기본 구성 요소입니다. 다음 수업에서는 이를 포함하여 수십 가지 메서드를 무료로 얻습니다.

class Range3
  def each
    (1..3).each { |n| yield n }
  end
end
Range3.new.each { |n| print n }
puts

한데 모아 보기

사용자 정의 each를 사용하면 반복을 완전히 제어할 수 있습니다.

  • 요소마다 한 번씩 yield를 호출합니다.
  • 원하는 순서로 순회하고, 값을 생성하거나, 쌍을 전달할 수 있습니다.
  • 일반적인 규칙에 따라 컬렉션 자체를 반환합니다.
class Countdown
  def initialize(from); @from = from; end
  def each
    @from.downto(1) { |n| yield n }
  end
end
Countdown.new(3).each { |n| puts n }

확인 문제

사용자 정의 each를 제대로 이해했는지 확인해 보세요.

복습

사용자 정의 each를 작성하는 방법을 배웠습니다.

  • yield는 호출자의 블록에 요소를 전달합니다.
  • 순회 순서를 제어하고 값을 생성할 수 있습니다.
  • 일반적인 규칙에 따라 컬렉션 자체를 반환합니다.
  • each는 Enumerable의 기반입니다.
class Squares
  def initialize(n); @n = n; end
  def each
    (1..@n).each { |i| yield i * i }
  end
end
Squares.new(4).each { |sq| puts sq }

자주 묻는 질문

“사용자 정의 each 작성” 강의는 무료인가요?

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

“사용자 정의 each 작성”에서 뭘 배우나요?

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

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

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

“사용자 정의 each 작성” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

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