Menu
Coddy logo textTech

요약 - 도형 계층 구조

Coddy Lua 여정의 객체 지향 프로그래밍 (Object Oriented Programming) 섹션에 포함된 레슨. 70개 중 36번째.

challenge icon

챌린지

쉬움

완전한 shape 계층 구조를 처음부터 만들어 봅시다! 모든 shape이 상속하는 Shape parent class를 만든 다음, 각각 고유한 속성을 가지면서 공통 기능을 공유하는 CircleSquare child classes를 만듭니다.

코드를 네 개의 파일로 구성합니다:

  • Shape.lua: 모든 shape이 상속할 base class입니다. shape의 색상을 저장하는 :new(color) constructor와 색상을 반환하는 :getColor() method를 포함해야 합니다. 이 공통 속성 덕분에 circle이든 square이든 모든 shape은 color를 갖게 됩니다.
  • Circle.lua: Shape을 상속하는 child class입니다. :new(color, radius) constructor는 color를 처리하기 위해 parent constructor를 호출한 다음, radius를 고유한 attribute로 추가해야 합니다. circle의 세부 정보를 출력하는 :describe() method도 포함하세요.
  • Square.lua: Shape을 상속하는 또 다른 child class입니다. :new(color, side) constructor 역시 parent constructor를 호출한 다음 side length를 저장해야 합니다. square를 위한 :describe() method도 포함하세요.
  • main.lua: 두 shape의 instance를 만들고, 고유한 속성을 유지하면서 Shape을 올바르게 상속하는 모습을 보여 주어 모든 것을 하나로 구성합니다.

두 개의 입력을 받습니다:

  1. Circle 데이터: 쉼표로 구분된 color와 radius (예: blue,5)
  2. Square 데이터: 쉼표로 구분된 color와 side length (예: red,4)

main 파일에서 주어진 값으로 Circle과 Square를 만듭니다. 그런 다음 다음 내용을 각각 별도의 줄에 출력합니다:

  1. circle에서 :describe() 호출
  2. square에서 :describe() 호출
  3. :getColor()를 사용하여 circle의 color 출력
  4. :getColor()를 사용하여 square의 color 출력

Circle의 :describe() method는 다음을 출력해야 합니다:

Circle with radius {radius}

Square의 :describe() method는 다음을 출력해야 합니다:

Square with side {side}

예를 들어 입력이 blue,5red,4라면 출력은 다음과 같아야 합니다:

Circle with radius 5
Square with side 4
blue
red

이는 완전한 상속 패턴을 보여 줍니다. 두 shape 모두 Shape에서 :getColor()를 상속하며(직접 정의하지 않음), 각각 고유한 attribute와 :describe() method를 가집니다!

직접 해보기

-- main.lua: 모든 것을 한데 모으기

local Circle = require('Circle')
local Square = require('Square')

-- circle 입력 읽기 (color,radius)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)

-- square 입력 읽기 (color,side)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)

-- TODO: 주어진 color와 radius로 Circle 인스턴스 생성

-- TODO: 주어진 color와 side로 Square 인스턴스 생성

-- TODO: circle에서 :describe() 호출

-- TODO: square에서 :describe() 호출

-- TODO: :getColor()를 사용하여 circle의 color 출력

-- TODO: :getColor()를 사용하여 square의 color 출력

객체 지향 프로그래밍 (Object Oriented Programming)의 모든 레슨

직접 연습해 보세요: 온라인 Lua 컴파일러