둘레 메서드
Coddy Lua 여정의 객체 지향 프로그래밍 (Object Oriented Programming) 섹션에 포함된 레슨. 70개 중 58번째.
챌린지
쉬움:getPerimeter() 메서드를 Rectangle 및 Circle 클래스 모두에 추가하여 Shape Manager를 확장해 보겠습니다. :getArea()와 마찬가지로 각 도형은 서로 다른 방식으로 둘레를 계산하지만, 동일한 메서드 이름을 공유합니다. 이는 다형성이 실제로 작동하는 완벽한 예입니다.
기존 파일을 계속 사용합니다.
Shape.lua: 기본 Shape 클래스는 변경하지 않습니다.Rectangle.lua: 2 × (width + height) 공식을 사용하여 Rectangle의 perimeter를 반환하는:getPerimeter()메서드를 추가합니다.Circle.lua: 2 × π × radius 공식을 사용하여 Circle의 circumference를 반환하는:getPerimeter()메서드를 추가합니다. π에는math.pi를 사용합니다.main.lua: 두 shape 모듈을 모두 Require하고, input에서 dimensions를 읽고, Rectangle 하나와 Circle 하나를 Create한 다음, 여섯 줄을 Print합니다. rectangle의 이름, area, perimeter를 출력한 뒤 circle의 이름, area, perimeter를 출력합니다.
이제 두 shape 모두 :getName(), :getArea(), :getPerimeter()를 포함하는 완전한 인터페이스를 갖습니다. 구현은 서로 다르지만 모두 동일한 메서드 이름을 통해 접근할 수 있습니다.
입력: 세 줄: width (number), height (number), radius (number).
출력: 순서대로 여섯 줄: rectangle의 이름, rectangle의 area, rectangle의 perimeter, circle의 이름, circle의 area, circle의 perimeter.
직접 해보기
-- 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())
객체 지향 프로그래밍 (Object Oriented Programming)의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러