Menu
Coddy logo textTech

전체 넓이

Coddy Lua 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 70개 중 60번째.

challenge icon

챌린지

쉬움

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())

Object Oriented Programming의 모든 레슨