RUBY

루비 골드 예상문제 100선: 고급 객체 모델, 메타프로그래밍, 동시성 핵심 해설

이 글은 Ruby Gold 시험 대비를 위한 핵심 해설 가이드입니다. Silver 수준 문법을 넘어 객체 모델 내부 동작과 메타프로그래밍 개념을 체계적으로 정리했습니다. 하단의 실전 문제 위젯으로 학습한 내용을 즉시 점검해보세요.

Ruby Gold 시험 개요

Ruby Gold(루비 어소시에이션 인증 루비 프로그래머 골드)는 Silver보다 한 단계 높은 고급 인증 시험입니다. 단순 문법 암기보다 Ruby 런타임의 동작 원리메타프로그래밍 패턴을 깊이 이해하고 있는지를 검증합니다.

시험 핵심 영역: 고급 객체 모델 · 메타프로그래밍 · 동시성(Thread/Fiber) · 예외 처리 플로우 · 상수 탐색(Lexical Scope)

학습 전략

  1. 문제를 보면 먼저 ancestors 체인과 self가 무엇인지 종이에 적어 확인하세요.
  2. 헷갈리는 항목은 ancestors, self, method lookup 3개 축으로 재정리하세요.
  3. 틀린 문제는 "왜" 틀렸는지 1문장 오답 노트를 남기세요.
  4. 실행 결과를 눈으로만 읽지 말고, 객체 모델 관점에서 근거 있게 설명하는 훈련을 하세요.

핵심 개념 정리

1. 객체 모델과 메서드 탐색

Ruby에서 모든 것은 객체입니다. 클래스도 Class의 인스턴스이며, 모듈도 Module의 인스턴스입니다. 메서드를 호출하면 Ruby는 수신 객체의 singleton class → 클래스 → prepend 모듈 → 클래스 → include 모듈 → 상위 클래스 순으로 메서드를 탐색합니다.

# ancestors 확인 예시
module M; end
module P; end
class Base; end
class Child < Base
  include M
  prepend P
end

p Child.ancestors
# => [P, Child, M, Base, Object, Kernel, BasicObject]

2. prepend vs include vs extend

  • include: 모듈을 클래스의 조상 체인에서 클래스 뒤(상위 클래스 앞)에 삽입 → 클래스 메서드 우선
  • prepend: 모듈을 클래스의 조상 체인에서 클래스 앞에 삽입 → 모듈 메서드 우선 (메서드 래핑에 활용)
  • extend: 특정 객체(또는 클래스)의 singleton class에 모듈 메서드를 추가 → 클래스에 사용 시 클래스 메서드가 됨

3. singleton class(eigenclass)

Ruby의 모든 객체는 자신만의 singleton class(=eigenclass)를 가집니다. 클래스 메서드(def self.method_name)는 사실 클래스 객체의 singleton class에 정의된 인스턴스 메서드입니다. class << self 블록으로 singleton class 컨텍스트에 진입할 수 있습니다.

4. Proc vs lambda

  • 인자 검사: Proc은 인자 수가 달라도 허용(느슨), lambda는 엄격히 검사
  • return 동작: Proc의 return은 외부 메서드를 종료, lambda의 return은 lambda 내부만 종료

5. Refinements

Refinements는 using 키워드로 활성화되며, 어휘적 범위(lexical scope)에서만 효과가 있습니다. 전역 monkey patch의 부작용 없이 특정 컨텍스트에서만 core class를 안전하게 확장할 수 있습니다.

6. 동시성: Thread, Fiber, Mutex

  • Thread: OS 스레드 기반. MRI의 GVL(Global VM Lock) 때문에 CPU 병렬 실행은 제한적이나, I/O 대기 작업에는 효과적
  • Fiber: 협력형 경량 실행 단위. Fiber.yield로 제어를 넘기고 resume으로 재개
  • Mutex: mutex.synchronize { ... }로 임계 구역을 보호하여 race condition 방지

7. 상수 탐색 (Lexical Scope)

상수 탐색은 lexical scope(코드 중첩 구조) → 상속 체인 → 최상위 순으로 이루어집니다. ::X는 최상위 상수를 명시적으로 참조합니다. Module.nesting으로 현재 lexical 중첩 스택을 확인할 수 있습니다.

마무리 복습 전략

  • 오답을 "객체 모델 / 메타프로그래밍 / 예외·동시성 / 상수 탐색" 4개 축으로 분류하세요.
  • 암기가 아니라 탐색 순서와 self 변화를 말로 설명하는 훈련을 하세요.
  • 시험 전날에는 새 문제보다 오답노트 2회전이 점수 상승에 더 효과적입니다.

실전 문제 풀기

아래 위젯에서 실제 시험과 유사한 코드 기반 객관식 문제를 풀어볼 수 있습니다. 각 문제는 정답 선택 후 상세 해설을 확인할 수 있습니다.

F

Fit System

10년 이상의 소프트웨어 엔지니어링 경험을 가진 개발자입니다. 고성능 시스템 설계와 클라우드 네이티브 아키텍처를 전문으로 합니다.