Menu
Coddy logo textTech

셰이프에 메서드 추가하기

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

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

메서드 필드는 functions 장에서 배운 function-type 구문을 사용합니다. 첫 번째 매개변수는 관례적으로 self라고 이름을 지정하며, 이는 메서드가 속한 테이블입니다. 또한 셰이프는 자기 자신을 참조할 수도 있습니다.

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

셰이프를 구현하려면 필드에 function을 저장하고 해당 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

챌린지

쉬움

Rectangle이라는 타입 별칭을 다음과 같이 생성하세요:

  • width 타입은 number
  • height 타입은 number
  • area: (self: Rectangle) -> number를 반환하는 method이며, width * height를 반환합니다.
  • perimeter: (self: Rectangle) -> number를 반환하는 method이며, 2 * (width + height)를 반환합니다.

width가 4이고 height가 6이며, 두 method가 모두 구현된 Rectangle 타입의 변수 rect를 생성하세요(self 매개변수를 기억하세요).

다음을 각각 한 줄에 하나씩 출력하세요(dot 구문으로 method를 호출하고 rectself로 전달하세요):

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

직접 해보기

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

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

Luau 소개의 모든 레슨

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