사용자 정의 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 사용자 정의 each 작성
- Enumerable 포함
- 지연 열거자
- 열거자 객체