Menu
CoddyTech

셰이프에 메서드 추가하기

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

Lua OOP 단원에서 테이블은 다른 값과 마찬가지로 함수도 담을 수 있다는 것을 배웠습니다. 셰이프는 이러한 함수 필드도 설명할 수 있습니다. 셰이프를 데이터 와 동작을 나타내는 작은 계약으로 만드는 것입니다.

메서드 필드에는 함수 단원에서 배운 함수 타입 구문을 사용합니다. 첫 번째 매개변수는 관례적으로 self라고 부르며, 메서드가 속한 테이블을 가리킵니다. 셰이프는 자기 자신을 참조할 수도 있습니다.

type Greeter = {
    name: string,
    greet: (self: Greeter) -> string,
}

셰이프를 구현하려면 필드에 함수를 저장하고, 그 함수에 self 매개변수를 지정합니다.

local greeter: Greeter = {
    name = "Ana",
    greet = function(self: Greeter): string
        return `Hello, I'm {self.name}`
    end,
}

이 함수를 호출하려면 테이블을 직접 self로 전달해야 합니다. greeter.greet(greeter)라고 쓰면 됩니다. 메서드는 self를 통해 자신이 호출된 테이블의 필드를 읽습니다.

테이블을 두 번 적는 것은 번거롭게 느껴집니다. 다행히 Lua에는 이미 해결책이 있습니다. 바로 콜론입니다. 다음 단원에서는 : 구문과 이러한 타입이 지정된 셰이프를 연결해 보겠습니다.

challenge icon

챌린지

쉬움

직사각형 모양에 넓이를 계산하는 메서드를 만들어 보세요.

  1. type Rectangle = {width: number, height: number, area: (self: Rectangle) -> number}를 작성하세요.
  2. 너비가 4, 높이가 6이고 area = function(self: Rectangle): number가 self.width * self.height를 반환하는 local rect: Rectangle을 만드세요.
  3. rect.area(rect)를 출력한 다음 rect.width를 출력하세요.

코드 실행을 누르세요. 출력은 24와 4입니다.

직접 해보기

-- 1) width, height 및 area 메서드를 가진 Rectangle 타입
-- 2) area가 구현된 로컬 rect: Rectangle (width 4, height 6)
-- 3) area를 출력한 다음 width를 출력

Luau 소개의 모든 레슨

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