Menu
CoddyTech

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 모드에서 오류가 보고됩니다.

challenge icon

챌린지

쉬움

콜론 구문을 사용해 계정에 메서드 두 개를 연결하세요.

  1. 테이블 아래에 function account:deposit(amount: number)을 정의하여 amount를 self.balance에 더하세요.
  2. self.balance를 반환하는 function account:getBalance(): number를 정의하세요.
  3. 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 소개의 모든 레슨

직접 연습해 보세요: 온라인 Luau 컴파일러