Self와 콜론 메서드
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 80개 중 45번째.
rect.area(rect)라고 작성해도 작동하지만, Lua OOP에서 더 나은 방법인 콜론을 배웠습니다. rect:area()는 정확히 같은 호출입니다. Lua는 콜론 앞의 테이블을 첫 번째 인수인 self로 자동 전달합니다.
콜론은 정의할 때도 도움이 됩니다. function account:deposit(amount)라고 선언하면 숨겨진 첫 번째 매개변수 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구현에서는 콜론이 self를 숨기지만, 타입 선언에서는 deposit: (self: Account, amount: number) -> ()처럼 self를 명시적으로 선언하는 점에 주목하세요. 콜론은 문법을 간결하게 해 줄 뿐입니다. 매개변수는 여전히 존재하며, 타입에도 그대로 명시됩니다. 아무것도 반환하지 않는 메서드는 빈 반환 타입 -> ()로 지정합니다.
호출 방식은 이미 알고 있는 규칙과 같습니다. account:deposit(250)은 account.deposit(account, 250)과 동일합니다. OOP 단원에서 배운 것과 런타임 동작은 같습니다. Luau가 그 위에 타입을 추가할 뿐입니다.
account 자체에는 타입 주석을 붙이지 않았다는 점에 주목하세요. Account 타입은 완성된 테이블을 설명하며, 두 메서드가 모두 추가된 뒤에야 테이블이 이 타입과 일치합니다. 따라서 local account: Account = {owner = "Maya", balance = 1500}라고 작성하면 메서드가 누락되었다고 strict 모드에서 오류가 보고됩니다.
챌린지
쉬움콜론 구문을 사용해 계정에 메서드 두 개를 연결하세요.
- 테이블 아래에
function account:deposit(amount: number)을 정의하여amount를self.balance에 더하세요. self.balance를 반환하는function account:getBalance(): number를 정의하세요.account:getBalance()를 출력하고,account:deposit(120)을 호출한 다음account:getBalance()를 다시 출력하세요.
Run Code를 누르세요. 출력에는 먼저 300, 그다음 420이 표시됩니다.
직접 해보기
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Noah", balance = 300}
-- 1) function account:deposit(amount: number)
-- 2) function account:getBalance(): number
-- 3) balance를 출력하고, 120을 입금한 다음 다시 출력하기
Luau 소개의 모든 레슨
4함수 다루기
매개변수와 반환값의 타입 지정익명 함수의 타입 지정아무것도 반환하지 않는 함수선택적 매개변수기본 매개변수 값불리언 기본값가변 인자 함수함수 타입 정의하기복습: 타입이 지정된 함수직접 연습해 보세요: 온라인 Luau 컴파일러