둘레 메서드
Coddy Lua 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 70개 중 58번째.
챌린지
쉬움Rectangle 및 Circle 클래스 모두에 :getPerimeter() 메서드를 추가하여 Shape Manager를 확장해 보겠습니다. :getArea()와 마찬가지로 각 도형은 둘레를 다르게 계산하지만, 동일한 메서드 이름을 공유합니다. 이는 다형성(polymorphism)이 실제로 작동하는 완벽한 예입니다.
기존 파일들을 계속해서 작업하게 됩니다:
Shape.lua: 기본 Shape 클래스는 변경되지 않은 상태로 유지됩니다.Rectangle.lua: 2 × (width + height) 공식을 사용하여 사각형의 둘레를 반환하는:getPerimeter()메서드를 추가합니다.Circle.lua: 2 × π × radius 공식을 사용하여 원의 둘레(원주)를 반환하는:getPerimeter()메서드를 추가합니다. π 값은math.pi를 사용하세요.main.lua: 두 도형 모듈을 require하고, 입력에서 치수를 읽어 Rectangle 하나와 Circle 하나를 생성한 다음, 사각형의 이름, 넓이, 둘레와 이어서 원의 이름, 넓이, 둘레까지 총 6줄을 출력합니다.
이제 두 도형 모두 :getName(), :getArea(), :getPerimeter()를 포함한 완전한 인터페이스를 갖추게 되었습니다. 구현 방식은 다르지만 모두 동일한 메서드 이름을 통해 접근할 수 있습니다.
입력: 세 줄 — width (숫자), height (숫자), radius (숫자).
출력: 순서대로 6줄: 사각형의 이름, 사각형의 넓이, 사각형의 둘레, 원의 이름, 원의 넓이, 원의 둘레.
직접 해보기
-- Rectangle 모듈을 불러옵니다
local Rectangle = require('Rectangle')
-- Circle 모듈을 불러옵니다
local Circle = require('Circle')
-- 입력으로부터 너비와 높이를 읽어옵니다
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())
-- 주어진 치수로 새로운 Rectangle 인스턴스를 생성합니다
local rect = Rectangle:new(width, height)
-- 주어진 반지름으로 새로운 Circle 인스턴스를 생성합니다
local circ = Circle:new(radius)
-- 사각형의 이름, 면적, 둘레를 출력합니다
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())
-- 원의 이름, 면적, 둘레를 출력합니다
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())