Size, Length, Count: 차이점은 무엇인가?
Source: Dev.to

순수 Ruby에서
length는 가장 일반적입니다. 배열, 문자열 또는 해시 안에 메모리에 이미 존재하는 요소가 몇 개인지를 나타냅니다.
array = [1, 2, 3, 4, 5]
puts array.length # => 5
string = "Hello, World!"
puts string.length # => 13
size는 배열과 문자열에 대해 length와 동일한 동작을 합니다; 선택은 보통 선호도에 따라 달라집니다 (예: 문자열에는 length, 컬렉션에는 size).
count는 다릅니다. 인수나 블록을 전달하여 카운트할 대상을 필터링할 수 있기 때문입니다.
numeros = [1, 2, 3, 4, 5, 6]
# Quantos são pares?
numeros.count(&:even?) # => 3
# Quantas vezes aparece o número 2?
numeros.count(2) # => 1
Rails에서는 상황이 달라집니다
ActiveRecord 컨텍스트에서 이 메서드들 중 어떤 것을 선택하느냐에 따라 성능에 직접적인 영향을 미칩니다. 각각은 데이터베이스에 다른 쿼리를 생성하기 때문입니다.
- **
count**는 항상 데이터베이스에서SELECT COUNT(*)를 실행합니다. 객체에 아직 저장되지 않은 변경을 무시하고 데이터베이스에 존재하는 정확한 값을 얻을 때 유용합니다. 여러 번 호출하면 다중 쿼리를 발생시키므로 피해야 합니다. - **
length**는 모든 레코드를 메모리로 로드하고 Ruby 객체로 변환한 뒤 배열의 크기를 셉니다. 데이터가 이미 로드되었거나 곧 사용될 예정일 때 적합하지만, 큰 테이블에서는 병목이 될 수 있습니다. - **
size**는 두 동작을 결합합니다: 레코드가 이미 로드되어 있으면 메모리에서 카운트합니다(length와 같이); 그렇지 않으면SELECT COUNT(*)를 실행합니다(count와 같이).
실제로 size가 가장 효율적인 선택인 경우가 많으며, 데이터 상태에 따라 자동으로 적응합니다.