다단계 상속
올바른 __index 위임으로 깊은 상속 계층을 지원합니다.
다단계 상속은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
단일 상속 복습
Child.__index = Parent를 설정하여 단일 상속을 구현합니다. 메서드 조회 시 Child에 없으면 __index를 통해 Parent에서 찾습니다.
상속을 위한 클래스 팩토리 확장
기본 클래스에 :extend() 메서드를 추가하여 부모 클래스와 연결된 하위 클래스를 생성합니다.
function Animal:extend()
local cls = {}
cls.__index = cls
setmetatable(cls, {__index = self})
cls.super = self
function cls:new(...)
local inst = setmetatable({}, cls)
if inst.init then inst:init(...) end
return inst
end
return cls
end하위 클래스 생성
동물의 하위 클래스로 개를 생성하고, init을 재정의한 다음 새 메서드를 추가합니다.
local Dog = Animal:extend()
function Dog:init(name)
Dog.super.init(self, name, "Woof")
self.tricks = {}
end
function Dog:learnTrick(trick)
self.tricks[#self.tricks+1] = trick
end
local d = Dog:new("Rex")
d:learnTrick("sit")
d:speak() -- Rex says Woof다단계 상속 체인
개를 확장하여 GuideDog를 생성합니다. 이는 3단계 상속 체인입니다.
local GuideDog = Dog:extend()
function GuideDog:init(name, owner)
GuideDog.super.init(self, name)
self.owner = owner
end
function GuideDog:guide()
print(self.name .. " guides " .. self.owner)
end상위 클래스 메서드 호출
무한 재귀를 피하려면 self가 아니라 클래스 참조를 통해 상위 클래스 메서드를 호출해야 합니다.
function Dog:init(name)
Dog.super.init(self, name, "Woof") -- explicit super call
end메서드 해석 순서
Lua는 __index 체인을 따라 하위 클래스에서 상위 클래스로 메서드를 확인합니다. GuideDog → 개 → 동물 → nil 순서입니다. 가장 먼저 찾은 메서드가 사용됩니다.
메서드 재정의
하위 클래스에서 같은 이름의 메서드를 정의하면 재정의됩니다. 일부만 재정의할 때는 상위 클래스 메서드를 명시적으로 호출합니다.
function Dog:speak()
print(self.name .. " barks!")
Dog.super.speak(self) -- also call parent speak
end깊이 제한
상속 체인이 매우 깊으면 메서드 조회가 느려집니다. 각 단계마다 __index 단계가 하나씩 추가되기 때문입니다. 3~4단계를 넘는 경우에는 구성을 우선하는 것이 좋습니다.
클래스 소속 확인
메타테이블 체인을 따라가며 인스턴스가 특정 클래스에 속하는지 확인합니다.
local function isA(instance, cls)
local mt = getmetatable(instance)
while mt do
if mt == cls then return true end
mt = getmetatable(mt)
end
return false
end
print(isA(d, Dog)) -- true
print(isA(d, Animal)) -- true클래스 보존을 위한 깊은 복사
인스턴스를 깊게 복사할 때 메타테이블을 보존하여 복사본도 올바른 클래스의 인스턴스로 유지합니다.
구성을 우선할 때
진정한 상속 관계에는 상속을 사용합니다(개는 동물입니다). 포함 관계나 유연한 동작 조합에는 구성(컴포넌트 테이블)을 사용합니다.
상속 질문
Lua에서 다단계 상속은 어떻게 작동합니까?
복습: 다단계 상속
:extend() 메서드를 사용하여 __index 연결을 이어 주도록 클래스 팩토리를 확장합니다. ClassName.super.method(self, ...)로 상위 클래스 메서드를 명시적으로 호출합니다. 메타테이블 체인을 따라가며 소속을 확인합니다.
AI 튜터와 함께 Lua을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 40
- 레슨
- 159
자주 묻는 질문
“다단계 상속” 강의는 무료인가요?
네 — “다단계 상속” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“다단계 상속”에서 뭘 배우나요?
올바른 __index 위임으로 깊은 상속 계층을 지원합니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Lua Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“다단계 상속” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.