Menu
Coddy logo textTech

셰이프에 메서드 추가하기

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

Lua OOP 장에서 알게 되었듯이, 테이블은 다른 값과 마찬가지로 함수(functions)를 가질 수 있습니다. Shape 역시 이러한 함수 필드를 정의할 수 있어, Shape을 데이터 동작에 대한 소규모 계약으로 만들 수 있습니다.

메서드 필드는 함수 장에서 배운 함수 타입 구문을 사용합니다. 첫 번째 매개변수의 이름은 관례적으로 self(메서드가 속한 테이블)로 지정하며, Shape은 자기 자신을 참조할 수도 있습니다:

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

이 Shape을 구현하려면 필드에 함수를 저장하고 self 매개변수를 전달합니다:

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

메서드를 호출할 때는 테이블 자신을 self로 직접 전달합니다: greeter.greet(greeter). 메서드는 self를 통해 자신이 호출된 테이블의 필드를 읽습니다.

테이블을 두 번 적는 것은 번거롭게 느껴집니다. 그리고 여러분은 이미 Lua의 해결책인 콜론(colon)을 알고 있습니다. 다음 레슨에서는 : 구문을 이러한 타입화된 Shape과 연결해 봅니다.

challenge icon

챌린지

쉬움

다음 항목을 포함하는 Rectangle이라는 타입 별칭(type alias)을 생성하세요:

  • number 타입의 width
  • number 타입의 height
  • width * height를 반환하는 (self: Rectangle) -> number 타입의 area method
  • 2 * (width + height)를 반환하는 (self: Rectangle) -> number 타입의 perimeter method

width 4, height 6을 가지고 두 methods가 모두 구현된(self 매개변수를 잊지 마세요) Rectangle 타입의 변수 rect를 생성하세요.

각각 별도의 줄에 출력하세요 (rectself로 전달하며 dot 구문으로 methodscall 하세요):

  1. 직사각형의 area
  2. 직사각형의 perimeter
  3. 직사각형의 width

직접 해보기

-- 여기에 코드를 작성하세요
-- 1) 두 개의 number 필드와 두 개의 메서드를 가진 Rectangle 타입을 정의하세요
-- 2) 두 메서드를 모두 구현하는 rect(width 4, height 6)를 생성하세요
-- 3) area, perimeter 및 width를 출력하세요
quiz icon실력 점검

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

Luau 소개의 모든 레슨