객체 빼기
Coddy Lua 여정의 객체 지향 프로그래밍 (Object Oriented Programming) 섹션에 포함된 레슨. 70개 중 27번째.
__add가 + 연산자를 처리하는 것처럼, __sub 메타메서드는 - 연산자의 동작을 정의합니다. 패턴은 동일합니다. 두 operands를 receives하고 새 object를 Return하는 function을 정의합니다.
local Color = {}
Color.__index = Color
function Color:new(r, g, b)
local obj = {r = r, g = g, b = b}
setmetatable(obj, Color)
return obj
end
function Color.__sub(c1, c2)
return Color:new(c1.r - c2.r, c1.g - c2.g, c1.b - c2.b)
endRGB 색상으로 작업할 때 뺄셈으로 음수 값이 생성될 수 있습니다. 실제 애플리케이션에서는 결과를 유효한 범위(0-255)로 제한하고 싶을 수 있지만, 핵심 메타메서드 구조는 동일하게 유지됩니다.
local bright = Color:new(200, 150, 100)
local dim = Color:new(50, 30, 20)
local result = bright - dim
print(result.r, result.g, result.b) -- 출력: 150 120 80기억하세요: __sub는 점 표기법으로 정의하세요(콜론이 아님). 이는 Lua가 두 피연산자를 인수로 직접 호출하는 metamethod이기 때문입니다.
챌린지
쉬움Color class를 만들어 - operator를 사용한 뺄셈을 지원하도록 해 봅시다. 색상은 RGB 값으로 표현되며, 한 색상에서 다른 색상을 빼면 각 component의 difference를 가진 새로운 색상이 생성됩니다.
코드를 두 개의 파일로 구성합니다:
Color.lua: 빨강, 초록, 파랑 값을 나타내는r,g,bcomponents를 사용하는 Color class를 Define합니다.:new(r, g, b)constructor를 포함하고, 두 색상을 빼면 component별 differences를 가진 새로운 색상이 생성되도록__submetamethod를 Implement합니다.__sub는 dot syntax를 사용하며 두 operands를 arguments로 receives한다는 점을 Remember하세요.main.lua: Color module을 Require하고, 제공된 입력으로 color instances를 create한 다음, resulting RGB 값을 표시합니다.
여섯 개의 입력을 받습니다:
- First 색상의 빨강 component
- First 색상의 초록 component
- First 색상의 파랑 component
- Second 색상의 빨강 component
- Second 색상의 초록 component
- Second 색상의 파랑 component
main 파일에서 주어진 RGB 값으로 두 색상을 create하고, - operator를 사용하여 First 색상에서 Second 색상을 뺀 다음, resulting 색상의 r, g, b 값을 separate lines에 print하세요.
예를 들어 입력이 200, 150, 100, 50, 30, 20이면 출력은 다음과 같아야 합니다:
150
120
80First 색상 (200, 150, 100)에서 Second 색상 (50, 30, 20)을 빼면 새로운 색상 (150, 120, 80)이 됩니다.
REQUIRED OUTPUT FORMAT:직접 해보기
-- Color 모듈 불러오기
local Color = require('Color')
-- 입력 값 읽기
local r1 = tonumber(io.read())
local g1 = tonumber(io.read())
local b1 = tonumber(io.read())
local r2 = tonumber(io.read())
local g2 = tonumber(io.read())
local b2 = tonumber(io.read())
-- TODO: 주어진 RGB 값으로 두 개의 Color 인스턴스 생성
-- TODO: - 연산자를 사용하여 첫 번째 색상에서 두 번째 색상 빼기
-- TODO: 결과 색상의 r, g, b 값을 각각 별도의 줄에 출력
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍 (Object Oriented Programming)의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러