Enumerable은 컬렉션을 순회·검색·조작하기 위한 풍부한 메서드 집합을 제공하는 module입니다 — map, select, reduce, , 외 다수. 배열, 해시, 범위, 그리고 를 정의하는 모든 클래스가 이 모든 메서드를 얻습니다. Ruby의 우아하고 함수형적인 데이터 처리의 중심입니다.
findgroup_byeach[1, 2, 3, 4, 5]
.select { |n| n.even? } # 필터 → [2, 4]
.map { |n| n * 10 } # 변환 → [20, 40]
[1, 2, 3, 4].reduce(0) { |sum, n| sum + n } # 10 — 누적/접기 (.sum도 가능)
[1, 2, 3, 4].find { |n| n > 2 } # 3 — 첫 일치
[1, 2, 3, 4].all? { |n| n > 0 } # true
[1, 2, 3, 4].any? { |n| n > 3 } # true
[1, 2, 3, 4].count { |n| n.even? } # 2
[3, 1, 2].sort; [3, 1, 2].min; [3, 1, 2].max
[1, 2, 3].each_with_index { |val, i| ... }
words.group_by { |w| w.length } # 키로 해시에 그룹화
[1, 2, 3, 4].partition { |n| n.even? } # [[2,4], [1,3]] — 조건으로 분리
[1, 2, 3].each_slice(2).to_a # [[1,2],[3]] — 청크로 나눔
Enumerable은 필터링·변환·집계·검색·그룹화·청크화를 위한 수십 개의 표현력 있는 메서드를 제공하여 — 거의 모든 컬렉션 연산을 다루며, 깔끔한 데이터 파이프라인을 위해 체이닝할 수 있습니다.
{ a: 1, b: 2 }.select { |k, v| v > 1 } # 해시도 Enumerable → { b: 2 }
(1..100).map { |n| n * 2 } # 범위도 Enumerable
class TodoList
include Enumerable # Enumerable을 mixin하고...
def initialize = @items = []
def each(&block) # ...`each`만 정의하면...
@items.each(&block)
end
# ...map, select, reduce, find, sort 등을 공짜로 얻음!
end
list = TodoList.new
list.select { |item| item.done? } # 동작함! — Enumerable이 여러분의 each를 통해 제공
우아한 부분: include Enumerable하고 **each**만 정의하면, 클래스가 Enumerable의 모든 메서드(map, select, reduce 등)를 자동으로 얻습니다.
Enumerable 모듈은 Ruby의 우아하고 표현력 있는 데이터 처리 스타일의 중심이며, 이를 이해하는 것은 생산적이고 관용적인 Ruby에 필수적입니다.
이는 컬렉션 작업을 위한 풍부하고 포괄적인 메서드 집합(map, select, reduce, find, group_by, partition, all?, any? 외 다수)을 제공하며 — 배열, 해시, 범위에서 끊임없이 사용하는 이 메서드들이 바로 Ruby의 데이터 조작을 그토록 간결하고 읽기 쉽게 만드는 것입니다(장황한 루프를 작성하는 대신 표현력 있는 연산을 체이닝).
Enumerable의 메서드를 숙달하는 것은 유려하고 함수형 스타일의 Ruby를 작성하는 핵심입니다 — 데이터를 우아하게 필터링·변환·집계·검색·그룹화하는 방식입니다.
내장 컬렉션에서 이 메서드들을 사용하는 것을 넘어, 중요하고 Ruby에 특화된 기능은 여러분의 클래스를 Enumerable로 만들 수 있다는 점입니다: include Enumerable하고 each 메서드만 정의하면, 클래스가 Enumerable의 모든 메서드(map, select, reduce 등)를 자동으로 얻습니다 — Ruby의 mixin 설계를 강력하게 보여주며 배열처럼 동작하는 커스텀 컬렉션 형태의 클래스를 만드는 실용적 도구입니다.
Enumerable을 이해하는 것 — 그 풍부한 메서드(Ruby의 표현력 있는 데이터 처리의 기반), 배열/해시/범위가 모두 이를 포함한다는 점, 그리고 each를 정의하여 커스텀 클래스를 Enumerable로 만드는 법 — 은 관용적인 Ruby를 작성하는 데 중심이 되는 중요하고 자주 적용되는 지식입니다.
Enumerable 메서드를 통한 데이터 처리는 Ruby(그리고 Rails)에 어디에나 있고, include Enumerable + each 패턴은 Ruby의 mixin 위력의 우아한 예시이므로, Enumerable을 숙달하는 것은 효과적이고 관용적인 Ruby 개발의 기초이며 이 언어의 표현력 있는 컬렉션 처리에 대한 능숙함을 반영하는 흔한 주제입니다.