0Pricing
Ruby Academy · 강의

prepend와 메서드 탐색

상위 클래스 연결을 알아봅니다

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

조상 체인

메서드를 호출하면 Ruby는 조상 체인이라는 목록을 검색합니다. 처음으로 일치하는 정의가 사용됩니다. 이 체인을 이해하면 혼합 모듈과 상속이 어떻게 함께 작동하는지 알 수 있습니다.

class Animal; end
class Dog < Animal; end
p Dog.ancestors

메서드 검색 순서

Ruby는 먼저 객체의 클래스를 검색한 다음 포함된 모듈을 검색하고, 그다음 상위 클래스를 검색하는 방식으로 메서드를 찾을 때까지 체인을 따라 올라갑니다.

module M
  def hello; "from module"; end
end
class C
  include M
  def hello; "from class"; end
end
puts C.new.hello

포함된 모듈은 클래스 아래에 위치

include된 모듈은 체인에서 클래스의 바로 아래에 들어갑니다. 따라서 클래스 자체의 메서드가 모듈의 메서드보다 우선합니다.

module M; end
class C
  include M
end
p C.ancestors  # [C, M, Object, ...]

앞에 삽입하기

prepend는 체인에서 모듈을 클래스의 위에 삽입합니다. 이제 모듈의 메서드가 클래스 자체의 메서드보다 먼저 검색됩니다.

module M
  def hello; "from module"; end
end
class C
  prepend M
  def hello; "from class"; end
end
puts C.new.hello

체인에서 앞에 삽입하기

조상 목록을 확인하면 prepend가 모듈을 클래스 앞에 배치하는 것을 볼 수 있습니다.

module M; end
class C
  prepend M
end
p C.ancestors  # [M, C, Object, ...]

앞에 삽입된 모듈에서 super 사용하기

앞에 삽입된 모듈은 먼저 실행되므로 super를 호출해 원래 메서드에 접근하여 클래스 메서드를 감쌀 수 있습니다. 기존 동작을 꾸미기에 알맞은 방식입니다.

module Logged
  def save
    puts "before save"
    result = super
    puts "after save"
    result
  end
end
class Record
  prepend Logged
  def save
    puts "saving record"
    :ok
  end
end
p Record.new.save

혼합 모듈에서 super 사용하기

super는 조상 체인을 따라갑니다. 포함된 모듈에서 사용하면 상위 클래스에 도달하고, 앞에 삽입된 모듈에서 사용하면 클래스 자체에 도달합니다.

module Polite
  def greet; "Hi! " + super; end
end
class Person
  prepend Polite
  def greet; "I am here."; end
end
puts Person.new.greet

수정하지 않고 감싸기

prepend를 사용하면 원래 클래스 코드를 수정하지 않고 기존 메서드 주변에 동작을 추가할 수 있습니다. 기존 클래스를 직접 덧수정하는 방식보다 깔끔한 대안입니다.

module Timing
  def compute(n)
    puts "start"
    super
  end
end
class Calc
  prepend Timing
  def compute(n); n * n; end
end
puts Calc.new.compute(5)

여러 모듈의 순서

여러 모듈을 포함하면 마지막에 포함된 모듈이 클래스에 가장 가까이 배치되어 먼저 검색됩니다.

module A; def who; "A"; end; end
module B; def who; "B"; end; end
class C
  include A
  include B
end
puts C.new.who  # B wins (included last)
p C.ancestors

포함과 앞에 삽입 비교 요약

나란히 비교해 보겠습니다.

  • include M: 체인은 [Class, M, ...]입니다. 클래스 메서드가 우선합니다.
  • prepend M: 체인은 [M, Class, ...]입니다. 모듈 메서드가 우선하며 super를 사용해 클래스에 접근할 수 있습니다.
module M; end
class Inc; include M; end
class Pre; prepend M; end
p Inc.ancestors
p Pre.ancestors

한데 모아 보기

메서드 결정은 조상 체인을 따릅니다.

  • 클래스 메서드가 포함된 모듈보다 우선합니다.
  • 앞에 삽입된 모듈이 클래스보다 우선합니다.
  • super는 체인을 따라 한 단계 위로 이동합니다.
module Cap
  def name; super.capitalize; end
end
class User
  prepend Cap
  def name; "ada"; end
end
puts User.new.name

확인 문제

메서드 결정 방식을 제대로 이해했는지 확인해 보세요.

복습

메서드 결정 방식을 배웠습니다.

  • Ruby는 조상 체인을 위에서 아래로 검색합니다.
  • include는 클래스 아래에 위치하고 prepend는 클래스 위에 위치합니다.
  • super는 체인에서 다음 정의에 접근합니다.
  • prepend는 메서드를 깔끔하게 감쌉니다.
module Loud
  def speak; super.upcase; end
end
class Bot
  prepend Loud
  def speak; "beep"; end
end
puts Bot.new.speak

자주 묻는 질문

“prepend와 메서드 탐색” 강의는 무료인가요?

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

“prepend와 메서드 탐색”에서 뭘 배우나요?

상위 클래스 연결을 알아봅니다 브라우저에서 직접 실행하는 실습 코드로 Ruby Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“prepend와 메서드 탐색” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. 모듈 정의
  2. include와 extend
  3. Comparable과 Enumerable
  4. prepend와 메서드 탐색
← Ruby Academy(으)로 돌아가기