셰이프에 메서드 추가하기
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과 연결해 봅니다.
챌린지
쉬움다음 항목을 포함하는 Rectangle이라는 타입 별칭(type alias)을 생성하세요:
number타입의widthnumber타입의heightwidth * height를 반환하는(self: Rectangle) -> number타입의areamethod2 * (width + height)를 반환하는(self: Rectangle) -> number타입의perimetermethod
width 4, height 6을 가지고 두 methods가 모두 구현된(self 매개변수를 잊지 마세요) Rectangle 타입의 변수 rect를 생성하세요.
각각 별도의 줄에 출력하세요 (rect를 self로 전달하며 dot 구문으로 methods를 call 하세요):
- 직사각형의 area
- 직사각형의 perimeter
- 직사각형의 width
직접 해보기
-- 여기에 코드를 작성하세요
-- 1) 두 개의 number 필드와 두 개의 메서드를 가진 Rectangle 타입을 정의하세요
-- 2) 두 메서드를 모두 구현하는 rect(width 4, height 6)를 생성하세요
-- 3) area, perimeter 및 width를 출력하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.