최종 OOP 점검
Coddy Lua 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 70개 중 70번째.
챌린지
쉬움Lua에서 OOP에 대해 배운 모든 것을 하나로 합쳐봅시다! 상속, 명명 규칙을 통한 캡슐화, 그리고 선택적 기능을 위한 믹스인(mixins)을 보여주는 차량 시스템을 구축하게 됩니다.
코드는 다섯 개의 파일로 구성됩니다:
Vehicle.lua: 모든 차량의 기본 클래스입니다. 각 차량은name과 비공개 관례인_speed(0으로 초기화됨)를 가집니다.:getName()게터(getter),:getSpeed()게터, 그리고 음수 값을 거부하는:setSpeed(value)세터(setter)를 포함하세요 (음수일 경우,Speed cannot be negative를 출력하고 값을 변경하지 마세요)."{name} moving at {speed}"를 반환하는:describe()메서드를 추가하세요.Refuelable.lua: 연료 관련 동작을 포함하는 믹스인 테이블입니다.self._fuel에 값을 더하는:refuel(amount)메서드와 현재 연료 수준을 반환하는:getFuel()메서드를 포함하세요.Car.lua: Vehicle을 상속받고 Refuelable 믹스인을 사용합니다. 생성자는name을 인자로 받고_fuel을 0으로 초기화합니다.:describe()를 오버라이드하여"{name} moving at {speed}, fuel: {fuel}"을 반환하도록 하세요. 자동차에 연료 기능을 부여하기 위해 Refuelable 믹스인을 적용하세요.Bicycle.lua: Vehicle만 상속받으며 연료 기능은 필요하지 않습니다. 생성자는name만 인자로 받습니다. 자전거는 수정 없이 상속된:describe()메서드를 사용합니다.main.lua: 모든 것을 하나로 합칩니다! 입력값을 바탕으로 자동차와 자전거를 생성하고, 서로 다른 기능을 시연하며, 공통된 차량 동작을 공유하면서도 각기 다른 특징을 어떻게 갖는지 보여주세요.
네 개의 입력을 받게 됩니다:
- 자동차 이름
- 자전거 이름
- 두 차량에 설정할 속도 (숫자)
- 자동차에 추가할 연료량 (숫자)
메인 파일에서 다음을 수행하세요:
- 주어진 이름으로 자동차와 자전거를 생성합니다.
- 세 번째 입력을 사용하여 두 차량의 속도를 설정합니다.
- 네 번째 입력을 사용하여 자동차에 연료를 보충합니다.
- 자동차의 설명을 출력합니다.
- 자전거의 설명을 출력합니다.
예를 들어, 입력값이 Sedan, Mountain Bike, 60, 45라면 출력은 다음과 같아야 합니다:
Sedan moving at 60, fuel: 45
Mountain Bike moving at 60입력값이 Sports Car, Road Bike, 120, 80이라면 출력은 다음과 같아야 합니다:
Sports Car moving at 120, fuel: 80
Road Bike moving at 120이 챌린지는 상속이 어떻게 공유된 동작을 제공하는지(두 차량 모두 이동 가능), 믹스인이 어떻게 선택적 기능을 추가하는지(자동차만 연료 필요), 그리고 캡슐화가 어떻게 데이터 무결성을 보호하는지(속도 유효성 검사)를 보여줍니다. 각 기술은 설계에서 서로 다른 목적을 수행합니다!
직접 해보기
-- main.lua: 모든 것을 하나로 합치기
local Car = require('Car')
local Bicycle = require('Bicycle')
-- 입력 읽기
local carName = io.read()
local bicycleName = io.read()
local speed = tonumber(io.read())
local fuelAmount = tonumber(io.read())
-- TODO: 주어진 이름으로 자동차 생성
-- TODO: 주어진 이름으로 자전거 생성
-- TODO: 두 차량의 속도 설정
-- TODO: 연료량만큼 자동차에 연료 보충
-- TODO: 자동차의 설명 출력
-- TODO: 자전거의 설명 출력