Menu
Coddy logo textTech

요약 - 로봇 조립

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

challenge icon

챌린지

쉬움

개별 구성 요소로 Robot을 조립해 봅시다! 상속을 사용하는 대신, 각각 고유한 특화 동작을 가진 별도의 Arm, Leg, Head 객체를 조합하여 로봇을 만듭니다. 로봇은 위임을 통해 이러한 구성 요소들을 조정합니다.

코드는 다음 다섯 개의 파일로 구성합니다.

  • Arm.lua: 어느 쪽에 있는지를 저장하는 :new(side) 생성자를 가진 Arm 클래스를 만드세요(예: "left" 또는 "right"). {side} arm raised를 출력하는 :raise() 메서드와 {side} arm lowered를 출력하는 :lower() 메서드를 포함하세요.
  • Leg.lua: 쪽을 저장하는 :new(side) 생성자를 가진 Leg 클래스를 만드세요. {side} leg steps forward를 출력하는 :step() 메서드를 포함하세요.
  • Head.lua: :new() 생성자를 가진 Head 클래스를 만드세요. Head nods를 출력하는 :nod() 메서드와 Head shakes를 출력하는 :shake() 메서드를 포함하세요.
  • Robot.lua: 생성자 :new(name)이 이름을 저장하고 모든 구성 요소를 내부에서 생성하는 Robot 클래스를 만드세요. 구성 요소에는 왼쪽 팔, 오른쪽 팔, 왼쪽 다리, 오른쪽 다리, 머리가 포함됩니다. 로봇에는 구성 요소에 위임하는 다음 메서드가 있어야 합니다.
    • :greet(): {name} says hello!를 출력한 다음 오른쪽 팔을 올리고, 다시 내립니다
    • :walk(): 왼쪽 다리를 걷게 한 다음 오른쪽 다리를 걷게 합니다
    • :respond(answer): answer가 "yes"이면 머리가 끄덕이고, "no"이면 머리가 흔들립니다
  • main.lua: 로봇의 이름과 yes/no 응답에 대한 입력을 읽으세요. Robot을 만들고, 인사하고, 걷게 한 다음 입력에 따라 응답하게 하세요.

입력은 두 개가 주어집니다.

  1. 로봇의 이름(문자열)
  2. 응답: yes 또는 no

출력에는 로봇이 구성 요소들을 조정하는 모습이 나타나야 합니다.

{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nods

응답이 no인 경우에는 다음과 같습니다.

{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakes

예를 들어 입력이 Roboyes라면 출력은 다음과 같아야 합니다.

Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nods

Robot은 팔을 어떻게 올리거나 다리를 어떻게 걷게 하는지 알 필요가 없다는 점에 주목하세요. 단순히 각 구성 요소에 무엇을 할지 지시할 뿐입니다. 각 구성 요소는 독립적이고 재사용 가능하며, 로봇은 이들을 모두 하나로 결합하는 조정자 역할을 합니다!

직접 해보기

-- main.lua: Robot 구성 챌린지의 진입점

local Robot = require('Robot')

-- 입력 읽기
local name = io.read()
local answer = io.read()

-- TODO: 주어진 이름으로 Robot 생성
-- TODO: 로봇이 인사하게 하기
-- TODO: 로봇이 걷게 하기
-- TODO: answer 입력에 따라 로봇이 응답하게 하기

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

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