Menu
Coddy logo textTech

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이 숨기더라도 형태에서는 selfexplicitly 선언하는 방식(deposit: (self: Account, amount: number) -> ())을 확인하세요. colon은 문법적 설탕(sugar)일 뿐이며, parameter는 여전히 존재하고 type이 이를 명확히 밝힙니다. 아무것도 return하지 않는 method는 빈 return 타입인 -> ()로 지정됩니다.

calls 역시 이미 알고 있는 규칙을 따릅니다: account:deposit(250)account.deposit(account, 250)와 동일합니다. OOP 장에서 다룬 내용과 동일한 런타임 동작이며 — Luau는 그 위에 type만 추가할 뿐입니다.

challenge icon

챌린지

쉬움

다음 조건을 만족하는 Account라는 이름의 type 별칭을 만드세요:

  • string 타입의 owner
  • number 타입의 balance
  • deposit(self: Account, amount: number) -> ()
  • getBalance(self: Account) -> number

owner가 "Maya"이고 balance가 1500table account를 생성한 다음, 콜론 정의(colon definition) 구문(function account:deposit(amount: number) …)을 사용하여 두 methodsattach하세요. deposit은 balance에 amount를 더하고, getBalance는 현재 balance를 return합니다.

콜론 호출(colon calls)을 사용하여 다음을 수행하세요:

  1. balance를 print하세요
  2. 250deposit하세요
  3. balance를 again print하세요
  4. owner를 print하세요

직접 해보기

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

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

Luau 소개의 모든 레슨