Self와 콜론 메서드
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨 — 73개 중 43번째.
rect.area(rect)를 작성하는 것도 동작하지만, 이전 Lua OOP에서 더 좋은 방법을 배웠습니다. 바로 colon입니다. rect:area()는 완전히 동일한 호출입니다 — Lua는 colon 앞의 table을 첫 번째 인자인 self로 automatically 전달합니다.
colon은 define 위치에서도 도움이 됩니다. function account:deposit(amount)는 숨겨진 첫 번째 parameter인 self를 대신 선언해 줍니다:
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Maya", balance = 1500}
function account:deposit(amount: number)
self.balance += amount -- self는 암시적입니다
end
function account:getBalance(): number
return self.balance
end구현부에서 colon이 숨기더라도 형태에서는 self를 explicitly 선언하는 방식(deposit: (self: Account, amount: number) -> ())을 확인하세요. colon은 문법적 설탕(sugar)일 뿐이며, parameter는 여전히 존재하고 type이 이를 명확히 밝힙니다. 아무것도 return하지 않는 method는 빈 return 타입인 -> ()로 지정됩니다.
calls 역시 이미 알고 있는 규칙을 따릅니다: account:deposit(250)는 account.deposit(account, 250)와 동일합니다. OOP 장에서 다룬 내용과 동일한 런타임 동작이며 — Luau는 그 위에 type만 추가할 뿐입니다.
챌린지
쉬움다음 조건을 만족하는 Account라는 이름의 type 별칭을 만드세요:
string타입의ownernumber타입의balancedeposit—(self: Account, amount: number) -> ()getBalance—(self: Account) -> number
owner가 "Maya"이고 balance가 1500인 table account를 생성한 다음, 콜론 정의(colon definition) 구문(function account:deposit(amount: number) …)을 사용하여 두 methods를 attach하세요. deposit은 balance에 amount를 더하고, getBalance는 현재 balance를 return합니다.
콜론 호출(colon calls)을 사용하여 다음을 수행하세요:
- balance를
print하세요 250을deposit하세요- balance를
againprint하세요 - owner를
print하세요
직접 해보기
-- 여기에 코드를 작성하세요
-- 1) Account 타입 정의 (메서드는 타입에서 self를 명시적으로 받음)
-- 2) account 테이블을 생성한 다음, 콜론 구문으로 deposit/getBalance 연결
-- 3) balance 출력, 250 입금, balance 다시 출력, owner 출력
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.