Menu
Coddy logo textTech

Self와 콜론 메서드

Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 73개 중 43번째.

rect.area(rect)를 작성해도 작동하지만, 예전에 Lua OOP에서 더 나은 방법을 배웠습니다. 바로 colon입니다. rect:area()는 정확히 동일한 호출입니다. Lua는 self를 첫 번째 인수로 사용하여 colon 앞의 table을 자동으로 전달합니다.

colon은 definition site에서도 도움이 됩니다. function account:deposit(amount)self라는 이름의 숨겨진 첫 번째 parameter를 대신 선언합니다.

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

구조가 selfexplicitly 선언한다는 점에 주목하세요. 즉, deposit: (self: Account, amount: number) -> ()입니다. 구현에서는 colon이 이를 숨기지만 말입니다. colon은 문법적 축약일 뿐입니다. parameter는 여전히 존재하며, type에 명시되어 있습니다. 아무것도 반환하지 않는 method는 빈 return인 -> ()으로 type을 지정합니다.

호출은 이미 알고 있는 same 규칙을 따릅니다. account:deposit(250)account.deposit(account, 250)과 동일합니다. OOP 챕터에서와 same runtime 동작입니다. Luau는 그 위에 type만 추가합니다.

challenge icon

챌린지

쉬움

Account라는 이름의 타입 별칭을 다음과 같이 만드세요:

  • 타입이 stringowner
  • 타입이 numberbalance
  • deposit: (self: Account, amount: number) -> ()
  • getBalance: (self: Account) -> number

소유자가 "Maya"이고 잔액이 1500account 테이블을 만든 다음, 콜론 정의 구문(function account:deposit(amount: number) …)을 사용하여 두 메서드를 연결하세요. deposit은 잔액에 amount를 더하고, getBalance는 현재 잔액을 반환합니다.

콜론 호출을 사용하여:

  1. 잔액을 출력하세요
  2. 250을 입금하세요
  3. 잔액을 다시 출력하세요
  4. 소유자를 출력하세요

직접 해보기

-- 여기에 코드를 작성하세요
-- 1) Account 타입 정의 (메서드는 타입에서 self를 명시적으로 받음)
-- 2) account 테이블을 생성한 다음, 콜론 구문으로 deposit/getBalance 연결
-- 3) balance 출력, 250 입금, balance 다시 출력, owner 출력
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Luau 소개의 모든 레슨

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