Ruby의 이터레이터

2020-12-16 hit count image

Ruby에서 배열을 좀 더 편하게 다루기 위해 이터레이터를 사용하는 방법에 대해서 알아봅시다.

개요

이번 블로그에서는 Ruby에서 이터레이터란 무엇이며, 배열을 좀 더 쉽게 다루기 위해 이터레이터를 사용하는 방법에 대해서 설명합니다.

이터레이터

이터레이터(iterator)란 배열과 같이 여러 개의 요소가 있는 오브젝트의 각 요소를 반복 처리할 때 사용하는 메서드를 말합니다. 이번 블로그에서는 자주 사용되는 이터레이터를 소개합니다.

each 메서드

배열의 각 요소가 |변수|에 대입되어 반복을 실행합니다.

배열.each { |변수|
  반복하려는 처리
}

다음과 같이 each를 사용할 수 있습니다.

fruits = ['apple', 'banana', 'orange']
fruits.each {|fruit|
  puts fruit
}

times 메서드

반복할 횟수가 정해져 있는 경우, times 메서드를 사용합니다.

4.times {
  puts 'Hello world'
}

Ruby에서는 수치도 오브젝트임으로 위와 같이 times 메서드를 사용할 수 있습니다.

loop 메서드

loop 메서드는 종료 없이 반복을 수행합니다.

i = 0
loop {
  i += 1
  puts 'Hello world'
  if i == 4
    break
  end
}

위에 예제와 같이 break를 사용하여 loop 메서드를 종료시키지 않는다면, 무한 루프에 빠지므로 주의해야 합니다.

이터레이터의 활용

배열을 처리할 때 이터레이터를 사용하면 좀 더 편리하게 사용할 수 있습니다.

each_with_index 메서드

배열의 요소 이외에도 인덱스가 필요한 경우, each_with_index 메서드를 활용할 수 있습니다.

fruits = ['apple', 'banana', 'orange']
fruits.each_with_index {|fruit, i|
  puts "#{i}: #{fruit}"
}

해시

배열과 마찬가지로 해시에서도 이터레이터를 사용할 수 있습니다.

fruits = {:Apple => 'apple', :Banana => 'banana', :Orange => 'orange'}
fruits.each {|key, value|
  puts "#{key}: #{value}"
}

파일

File 클래스에서도 이터레이터를 사용할 수 있습니다. 파일에서 이터레이터를 사용하면 텍스트 파일의 한 줄을 요소로 가져올 수 있습니다.

file = File.open("test.txt")
file.each {|line|
  puts line
}
file.close

이터레이터 정의하기

메서드를 정의할 때, yield를 사용하면 이터레이터를 정의할 수 있습니다.

def temp
  yield 10
  yield 'Hello'
end

temp {|value|
  puts value * 2
}
# 20
# HelloHello

완료

이것으로 Ruby에서 이터레이터가 무엇이며, 이터레이터를 어떻게 사용하는지에 대해서 살펴보았습니다. 또한 필요하다면, 이터레이터를 만들 수 있음도 확인하였습니다. 이제 배열, 해시등과 함께 반복적인 처리를 할 때, 이터레이터를 활용하여 좀 더 효율적으로 작업해 보시기 바랍니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts