객체 비교하기 (<, >)
Coddy Lua 여정의 객체 지향 프로그래밍 (Object Oriented Programming) 섹션에 포함된 레슨. 70개 중 29번째.
산술과 연결을 넘어, 비교 메타메서드를 사용하여 객체들이 서로 비교되는 방식을 정의할 수도 있습니다. __lt 메타메서드는 "보다 작음"(<) 연산자를 처리합니다.
Lua가 a < b를 평가할 때 메타테이블에서 __lt를 찾습니다. 이 메타메서드는 비교 로직에 따라 true 또는 false를 반환해야 합니다.
local Item = {}
Item.__index = Item
function Item:new(name, price)
local obj = {name = name, price = price}
setmetatable(obj, Item)
return obj
end
function Item.__lt(a, b)
return a.price < b.price
end__lt가 정의되었으므로 이제 항목을 직접 비교할 수 있습니다:
local apple = Item:new("Apple", 2)
local laptop = Item:new("Laptop", 999)
print(apple < laptop) -- 출력: true
print(laptop < apple) -- 출력: false여기서 영리한 부분은 Lua가 > 연산자를 __lt에서 자동으로 도출한다는 것입니다. a > b라고 작성하면 Lua는 대신 b < a를 평가합니다. 따라서 __lt만 정의해도 두 비교 방향을 모두 무료로 사용할 수 있습니다.
챌린지
쉬움가격을 기준으로 Product 클래스를 < 및 > 연산자를 사용해 비교할 수 있도록 만들어 봅시다. 이는 장바구니의 항목을 정렬하거나 목록에서 가장 저렴한 옵션을 찾는 것과 같은 상황에 매우 유용합니다.
코드를 두 개의 파일로 나누어 작성합니다.
Product.lua:name및price필드를 가진 Product 클래스를 정의합니다.:new(name, price)생성자를 포함하고, 가격을 기준으로 상품을 비교하는__lt메타메서드를 구현합니다.__lt를 정의하면>연산자도 자동으로 사용할 수 있다는 점을 기억하세요. Lua가 이를 처리해 줍니다!main.lua: Product 모듈을 불러오고, 입력값으로 상품 인스턴스를 생성한 다음 어느 상품의 가격이 더 높거나 낮은지 비교합니다.
네 개의 입력을 받습니다.
- 첫 번째 상품의 이름
- 첫 번째 상품의 가격
- 두 번째 상품의 이름
- 두 번째 상품의 가격
main 파일에서 주어진 이름과 가격으로 두 상품을 생성합니다. 그런 다음 세 번 비교하고 각 결과를 별도의 줄에 출력합니다.
- 첫 번째 상품이 두 번째 상품보다 저렴한가요? (
true또는false출력) - 첫 번째 상품이 두 번째 상품보다 비싼가요? (
true또는false출력) - 더 저렴한 상품의 이름 출력
예를 들어 입력이 Apple, 2, Laptop, 999라면 출력은 다음과 같습니다.
true
false
AppleApple의 가격(2)이 Laptop의 가격(999)보다 낮으므로 첫 번째 비교 결과는 true입니다. Apple은 Laptop보다 비싸지 않으므로 두 번째 결과는 false입니다. 또한 Apple의 가격이 더 낮기 때문에 더 저렴한 상품으로 출력됩니다.
직접 해보기
-- Product 모듈 불러오기
local Product = require('Product')
-- 입력 읽기
local name1 = io.read()
local price1 = tonumber(io.read())
local name2 = io.read()
local price2 = tonumber(io.read())
-- TODO: Product:new()를 사용하여 두 개의 Product 인스턴스 생성
-- TODO: < 연산자를 사용하여 제품을 비교하고 true/false 출력
-- TODO: > 연산자를 사용하여 제품을 비교하고 true/false 출력
-- TODO: 더 저렴한 제품의 이름 출력
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍 (Object Oriented Programming)의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러