window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster가 이미 존재합니다') } else { w.LeadBooster = { q: [], on: 함수 (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 함수 (n) { this.q.push({ t: 't', n: n }) }, } } })() 해시: 사용 또는 사용 안 함 - The Codest
The Codest
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 산업 분야
    • 핀테크 및 뱅킹
    • E-commerce
    • 애드테크
    • 헬스 테크
    • 제조
    • 물류
    • 자동차
    • IOT
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
뒤로 화살표 뒤로 가기
2022-07-12
소프트웨어 개발

해시: 사용 또는 사용 안 함

The Codest

크지슈토프 부제비츠

시니어 Software Engineer

루비 전문가가 작성한 글을 읽고 해시를 항상 사용할 필요가 없는 이유를 알아보세요.

소개

어떤 자료를 집계하고 싶을 때 우리는 종종 #each_with_object 또는 일반 loop 사용 #with_object. 하지만 대부분의 경우 루비 개발자 가 일반 해시를 애그리게이터로 사용하고 있다면 괜찮을 수도 있지만, 이 글에서는 항상 해시일 필요는 없다는 것을 보여드리고자 합니다.

케이스

모든 파일이 하나의 디렉터리에 배치되어 있다고 가정합니다(사람들).

다음과 같은 상황이 있다고 가정해 보겠습니다. 사람들/사람들.csv file:

이름, 성, 나이
 John,Doe,24
 Jane,Dee,45
 조쉬,비,55
 안드레아,보야,34
 앤드류,무어,54

총 행 수와 평균 연령을 구하려면 다음 스크립트를 작성할 수 있습니다:

people/parser.rb

'csv' 필요

aggregated = CSV.foreach('people.csv', headers: true)
.withobject({ total: 0, totalage: 0 }) do |row, agg|
agg[:total] += 1
agg[:totalage] += row['Age'].toi
end

total = aggregated[:total]
averageage = aggregated[:totalage].to_f / total

puts "총: #{총계}"
puts "평균 연령: #{평균_연령}"

그리고 예, 그것은 일을하지만 그런 것을 읽습니다. 코드 는 의심스러운 즐거움입니다. 너무 낮은 수준인 것 같습니다. 전용 애그리게이터를 제공함으로써 이 문제를 개선할 수 있습니다. loop.

people/age_aggregator.rb

나이 집계자 클래스
어트리뷰터 :합계, :총계

def initialize
총계 = 0
총_연령 = 0
end

def increment!
총 += 1
end

def incrementage!(age)
총액 += 나이
end

def averageage
totalage.to_f / total
end
end

그러면 루프는 아래와 같이 표시됩니다:

people/parser.rb

require 'csv'
필수 './ageaggregator.rb'

aggregated = CSV.foreach('people.csv', headers: true)
.withobject(AgeAggregator.new) do |row, agg|
agg.increment!
agg.incrementage!(row['Age'].to_i)
end

puts "총계: #{aggregated.total}"
puts "평균 연령: #{aggregated.average_age}"

훨씬 더 명확해진 것 같아요.

요약

더 많은 코드를 작성했지만 하위 수준의 세부 사항은 별도의 클래스로 추출했습니다. 이제 메인 스크립트가 훨씬 더 잘 읽힙니다.

물론 이 예제가 너무 간단해서 리팩터링에 그렇게 많은 노력을 기울일 필요가 없다고 주장할 수도 있지만, 그냥 예시일 뿐이니까요.) 더 많은 데이터를 집계해야 하는 경우에는 이러한 집계기 객체가 정말 유용한 방법입니다.

협력 배너

자세히 읽어보세요:

루비 소프트웨어 개발의 장단점

철도 및 기타 운송 수단

TMUX, Vim, Fzf + Ripgrep을 사용한 레일 개발

관련 문서

핀테크

루비를 가장 잘 활용하는 5가지 예

루비로 무엇을 할 수 있는지 궁금한 적이 있으신가요? 글쎄요, 아마도 하늘이 한계일 것입니다만, 어느 정도 알려진 몇 가지 사례에 대해 이야기하게 되어 기쁩니다...

The Codest
파웰 무진스키 Software Engineer
소프트웨어 개발

내부 개발자와 외부 개발자 고용하기

내부에서 채용할까요, 아니면 외부에서 채용할까요? 최고의 딜레마입니다! 다음 글에서 outsourcing 또는 사내 팀 구축의 이점을 알아보세요.

The Codest
그레고르즈 로즈무스 자바 유닛 리더
소프트웨어 개발

The Codest의 성공 스토리: 루비 개발자에서 마스터클래스 리더가 되기까지

The Codest의 인력 운영 책임자인 토마쉬 스카라덱을 만나보세요. 루비 매니저에서 핵심 그룹의 일원이 되기까지 토멕의 커리어 여정을 알아보세요. 어떻게 관리했나요?

The Codest
토마스 스카라덱 개발 아키텍트
소프트웨어 개발

Ruby on Rails(Pub/Sub 포함)에 대해 자세히 알아보기

Pub/Sub는 코드를 깔끔하게 만들고, 서비스를 분리하며, 쉽게 확장할 수 있도록 하는 등 프로젝트에 많은 이점을 가져다줍니다. 다음 문서에서 Pub/Sub에 대해 자세히 알아보세요...

The Codest
마이클 폴락 선임 루비 개발자

지식창고를 구독하고 IT 분야의 전문 지식을 최신 상태로 유지하세요.

    회사 소개

    The Codest - 폴란드에 기술 허브를 둔 국제 소프트웨어 개발 회사입니다.

    영국 - 본사

    • 사무실 303B, 182-184 하이 스트리트 노스 E6 2JA
      영국 런던

    폴란드 - 현지 기술 허브

    • 파브리츠나 오피스 파크, 알레야
      포코주 18, 31-564 크라쿠프
    • 뇌 대사관, 콘스트럭터스카
      11, 02-673 바르샤바, 폴란드

      The Codest

    • 홈
    • 회사 소개
    • 서비스
    • Case Studies
    • 방법 알아보기
    • 채용 정보
    • 사전

      서비스

    • IT 자문
    • 소프트웨어 개발
    • 백엔드 개발
    • 프론트엔드 개발
    • Staff Augmentation
    • 백엔드 개발자
    • 클라우드 엔지니어
    • 데이터 엔지니어
    • 기타
    • QA 엔지니어

      리소스

    • 외부 소프트웨어 개발 파트너와의 협력에 대한 사실과 오해
    • 미국에서 유럽으로: 미국 스타트업이 유럽으로 이전을 결정하는 이유
    • 테크 오프쇼어 개발 허브 비교: 테크 오프쇼어 유럽(폴란드), 아세안(필리핀), 유라시아(터키)
    • CTO와 CIO의 주요 과제는 무엇인가요?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • 웹사이트 이용 약관

    저작권 © 2025 by The Codest. 모든 권리 보유.

    ko_KRKorean
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek ko_KRKorean