전체 넓이
Coddy Lua 여정의 객체 지향 프로그래밍 (Object Oriented Programming) 섹션에 포함된 레슨. 70개 중 60번째.
챌린지
쉬움ShapeCollection에 강력한 기능을 추가해 보겠습니다. 바로 ShapeCollection이 포함하는 모든 도형의 전체 넓이를 계산하는 기능입니다. 여기서 다형성이 진정으로 빛을 발합니다. 컬렉션은 해당 도형이 rectangle인지 circle인지 알 필요 없이 어떤 도형에든 :getArea()를 호출할 수 있습니다.
기존 프로젝트 파일을 계속 확장해 보겠습니다.
Shape.lua: 기본 Shape class(변경 없음).Rectangle.lua::getArea()및:getPerimeter()를 포함하는 Rectangle class.Circle.lua::getArea()및:getPerimeter()를 포함하는 Circle class.ShapeCollection.lua::getTotalArea()method를 추가하여 collection class를 확장합니다. 이 method는 stored된 모든 도형을 iterate하고, 각 도형에:getArea()를 call한 다음, 모든 넓이의 sum을 return해야 합니다.main.lua: 모듈을 Require하고, input에서 dimensions를 read하고, Rectangle과 Circle을 Create한 다음, 둘 다 ShapeCollection에 Add하고, collection에 있는 모든 도형의 전체 넓이를 Print합니다.
이 접근 방식의 장점은 :getTotalArea()에 rectangle과 circle을 위한 별도의 로직이 필요하지 않다는 것입니다. 이 method는 collection의 모든 도형에 :getArea() method가 있다고 믿고 단순히 이를 사용합니다. 나중에 triangle, hexagon 또는 다른 어떤 도형이든 Add할 수 있으며, 전체 넓이 계산은 수정 없이 작동합니다.
입력: 세 줄: width(number), height(number), radius(number).
출력: collection에 있는 모든 도형의 전체 넓이를 포함하는 한 줄.
직접 해보기
-- Rectangle 모듈을 불러옵니다
local Rectangle = require('Rectangle')
-- Circle 모듈을 불러옵니다
local Circle = require('Circle')
-- ShapeCollection 모듈을 불러옵니다
local ShapeCollection = require('ShapeCollection')
-- 입력에서 너비와 높이를 읽습니다
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)
-- 새 ShapeCollection을 생성합니다
local collection = ShapeCollection:new()
-- 두 도형을 모두 컬렉션에 추가합니다
collection:addShape(rect)
collection:addShape(circ)
-- 컬렉션에 있는 모든 도형의 총 면적을 출력합니다
print(collection:getTotalArea())
객체 지향 프로그래밍 (Object Oriented Programming)의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러