Menu
Coddy logo textTech

객체 빼기

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

RGB 색상으로 작업할 때 뺄셈으로 음수 값이 생성될 수 있습니다. 실제 애플리케이션에서는 결과를 유효한 범위(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이기 때문입니다.

challenge icon

챌린지

쉬움

Color class를 만들어 - operator를 사용한 뺄셈을 지원하도록 해 봅시다. 색상은 RGB 값으로 표현되며, 한 색상에서 다른 색상을 빼면 각 component의 difference를 가진 새로운 색상이 생성됩니다.

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

  • Color.lua: 빨강, 초록, 파랑 값을 나타내는 r, g, b components를 사용하는 Color class를 Define합니다. :new(r, g, b) constructor를 포함하고, 두 색상을 빼면 component별 differences를 가진 새로운 색상이 생성되도록 __sub metamethod를 Implement합니다. __sub는 dot syntax를 사용하며 두 operands를 arguments로 receives한다는 점을 Remember하세요.
  • main.lua: Color module을 Require하고, 제공된 입력으로 color instances를 create한 다음, resulting RGB 값을 표시합니다.

여섯 개의 입력을 받습니다:

  1. First 색상의 빨강 component
  2. First 색상의 초록 component
  3. First 색상의 파랑 component
  4. Second 색상의 빨강 component
  5. Second 색상의 초록 component
  6. Second 색상의 파랑 component

main 파일에서 주어진 RGB 값으로 두 색상을 create하고, - operator를 사용하여 First 색상에서 Second 색상을 뺀 다음, resulting 색상의 r, g, b 값을 separate lines에 print하세요.

예를 들어 입력이 200, 150, 100, 50, 30, 20이면 출력은 다음과 같아야 합니다:

150
120
80

First 색상 (200, 150, 100)에서 Second 색상 (50, 30, 20)을 빼면 새로운 색상 (150, 120, 80)이 됩니다.

REQUIRED OUTPUT FORMAT: [Your translated content here]

직접 해보기

-- 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 값을 각각 별도의 줄에 출력
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

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

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