전체 넓이
Coddy Lua 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 70개 중 60번째.
챌린지
쉬움ShapeCollection에 포함된 모든 도형의 총 면적을 계산하는 강력한 기능을 추가해 보겠습니다. 이것이 바로 다형성(polymorphism)이 빛을 발하는 부분입니다. 컬렉션은 각 도형이 사각형인지 원인지 알 필요 없이 모든 도형에 대해 :getArea()를 호출할 수 있습니다.
기존 프로젝트 파일을 계속해서 확장해 나갈 것입니다:
Shape.lua: 기본 Shape 클래스 (변경 없음).Rectangle.lua::getArea()와:getPerimeter()가 포함된 Rectangle 클래스.Circle.lua::getArea()와:getPerimeter()가 포함된 Circle 클래스.ShapeCollection.lua::getTotalArea()메서드를 추가하여 컬렉션 클래스를 확장합니다. 이 메서드는 저장된 모든 도형을 순회하며 각 도형의:getArea()를 호출하고, 모든 면적의 합계를 반환해야 합니다.main.lua: 모듈을 불러오고(require), 입력에서 치수를 읽어 Rectangle과 Circle을 생성한 후, 두 도형을 ShapeCollection에 추가하고 컬렉션에 있는 모든 도형의 총 면적을 출력합니다.
이 방식의 장점은 :getTotalArea()가 사각형과 원에 대해 별도의 로직을 가질 필요가 없다는 것입니다. 단순히 컬렉션의 모든 도형이 :getArea() 메서드를 가지고 있다고 신뢰할 뿐입니다. 나중에 삼각형, 육각형 또는 다른 어떤 도형을 추가하더라도 총 면적 계산 로직은 수정 없이 그대로 작동할 것입니다.
입력: 세 줄 — 너비(숫자), 높이(숫자), 반지름(숫자).
출력: 컬렉션에 있는 모든 도형의 총 면적을 포함하는 한 줄.
직접 해보기
-- 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())