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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 모듈 정의
- include와 extend
- Comparable과 Enumerable
- prepend와 메서드 탐색