0Pricing
Ruby Academy · 강의

실전 사용 사례

구조화된 데이터를 파싱합니다

실전 사용 사례은(는) CoddyKit의 무료 Ruby Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Ruby Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

패턴 일치가 빛을 발하는 이유

패턴 일치는 구조화된 데이터를 처리할 때 가장 강력합니다. API 응답, 구성 트리, 파싱된 파일 등에 사용할 수 있습니다. 중첩된 if/dig 검사를 읽기 쉬운 하나의 표현식으로 대체합니다.

require 'json'
resp = JSON.parse('{"ok":true,"data":42}', symbolize_names: true)
case resp
in { ok: true, data: }
  puts(data)
end

API 성공 및 오류 처리

서로 다른 응답 형태를 별도의 분기에서 일치시키고, 각 형태에 맞는 필드를 가져옵니다.

def handle(resp)
  case resp
  in { status: 'ok', result: }
    "got #{result}"
  in { status: 'error', message: }
    "error: #{message}"
  end
end
puts(handle({ status: 'error', message: 'bad input' }))

명령 인수 파싱

인수 배열을 일치시켜 명령을 깔끔하게 분배합니다.

def run(args)
  case args
  in ['add', a, b]
    a.to_i + b.to_i
  in ['echo', *rest]
    rest.join(' ')
  end
end
puts(run(['add', '3', '4']))
puts(run(['echo', 'hi', 'there']))

레코드 형태 검증

처리하기 전에 레코드에 필요한 필드와 형식이 있는지 패턴으로 확인하십시오.

def valid?(rec)
  case rec
  in { name: String, age: Integer => a } if a >= 0
    true
  else
    false
  end
end
puts(valid?({ name: 'Ada', age: 36 }))
puts(valid?({ name: 'X', age: -1 }))

중첩된 구성 분해

연속된 조회를 사용하는 대신 한 번의 일치로 깊이 중첩된 구성 값을 가져옵니다.

cfg = { server: { host: 'localhost', port: 8081 } }
case cfg
in { server: { host:, port: } }
  puts("#{host}:#{port}")
end

태그된 유니언

널리 사용되는 함수형 패턴입니다. 형식으로 태그된 데이터를 해당 태그에 따라 분배합니다.

def area(shape)
  case shape
  in { type: 'circle', r: }
    (3.14 * r * r).round(2)
  in { type: 'rect', w:, h: }
    w * h
  end
end
puts(area({ type: 'rect', w: 3, h: 4 }))

deconstruct를 사용한 패턴 일치

사용자 정의 객체가 deconstruct를 정의하면 일치시킬 수 있습니다(배열 패턴의 경우). Struct는 이를 자동으로 수행합니다.

Point = Struct.new(:x, :y)
case Point.new(1, 2)
in [x, y]
  puts("#{x},#{y}")
end

deconstruct_keys를 사용한 패턴 일치

해시 패턴을 지원하려면 deconstruct_keys를 정의하십시오. Struct도 이를 제공하므로 이름을 사용한 일치가 가능합니다.

Point = Struct.new(:x, :y)
case Point.new(3, 4)
in { x:, y: }
  puts("x=#{x} y=#{y}")
end

클래스와 패턴

형식 패턴과 해시 패턴을 결합하면 특정 클래스 및 해당 필드와 일치시킬 수 있습니다.

User = Struct.new(:name, :admin, keyword_init: true)
case User.new(name: 'Ada', admin: true)
in User(admin: true, name:)
  puts("#{name} is an admin")
end

안전한 대체 처리

입력이 일치하지 않을 수 있다면 항상 else를 제공하여 예외를 우아한 처리로 바꾸십시오.

def parse(data)
  case data
  in { id: Integer => id }
    "id #{id}"
  else
    'unrecognized'
  end
end
puts(parse({ name: 'x' }))

종합 적용

실제와 같은 흐름은 다음과 같습니다. JSON을 parse하고, 그 형태를 일치시키고, 가드로 검증한 다음, 모든 작업을 깔끔한 하나의 표현식에서 수행합니다.

require 'json'
event = JSON.parse('{"kind":"purchase","amount":150}', symbolize_names: true)
case event
in { kind: 'purchase', amount: Integer => amt } if amt > 100
  puts("big purchase: #{amt}")
in { kind: 'purchase', amount: }
  puts("purchase: #{amount}")
end

빠른 확인

in { x:, y: }와 같은 해시 패턴 일치를 지원하려면 사용자 정의 클래스가 어떤 메서드를 정의해야 합니까?

복습: 실제 활용 사례

실제 문제에 패턴 일치를 적용했습니다:

  • API 응답과 명령 분배
  • 가드를 사용한 레코드 형태 검증
  • 중첩된 구성과 태그된 유니언 분해
  • 사용자 정의 객체를 위한 deconstruct / deconstruct_keys
  • 안전한 대체 처리를 위해 항상 else 추가

Ruby 패턴 일치 과정을 완료했습니다.

case { type: 'circle', r: 2 }
in { type: 'circle', r: } then puts(3.14 * r * r)
end

자주 묻는 질문

“실전 사용 사례” 강의는 무료인가요?

네 — “실전 사용 사례” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Ruby Academy 강의 전체를 잠금 해제할 수 있습니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“실전 사용 사례”에서 뭘 배우나요?

구조화된 데이터를 파싱합니다 브라우저에서 직접 실행하는 실습 코드로 Ruby Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Ruby Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Ruby Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“실전 사용 사례” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Ruby Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Ruby Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. case/in 기초
  2. 배열과 해시 패턴
  3. Find 패턴과 가드
  4. 실전 사용 사례
← Ruby Academy(으)로 돌아가기