콜론 구문
Coddy Lua 여정의 객체 지향 프로그래밍 (Object Oriented Programming) 섹션에 포함된 레슨 — 70개 중 3번째.
매번 counter.increment(counter)를 작성하는 것은 번거롭고 오류가 발생하기 쉽습니다. Lua는 더 깔끔한 방법인 콜론(:) 연산자를 제공합니다.
콜론을 사용하여 함수를 정의할 때, Lua는 자동으로 self를 첫 번째 매개변수로 추가합니다:
local player = {
name = "Hero"
}
-- 정의에서 콜론 사용
function player:greet()
print("Hello, I am " .. self.name)
end콜론은 함수를 호출할 때도 작동합니다. 테이블을 첫 번째 인수로 자동으로 전달합니다:
player:greet() -- 출력: Hello, I am Hero이것은 player.greet(player)라고 쓰는 것과 동일하지만 훨씬 더 깔끔합니다. 콜론은 정의할 때와 호출할 때 모두 self 매개변수를 자동으로 처리합니다.
다음은 두 가지 접근 방식 모두 동일한 결과를 생성함을 보여주는 비교입니다:
local counter = { value = 0 }
-- 도트 구문 (명시적 self)
function counter.increment(self)
self.value = self.value + 1
end
counter.increment(counter)
-- 콜론 구문 (자동 self)
function counter:decrement()
self.value = self.value - 1
end
counter:decrement()콜론 구문은 Lua에서 메서드를 정의하고 호출하는 표준 방법입니다. 이를 사용하면 코드가 더 짧아지고 반복이 줄어듭니다.
챌린지
쉬움입력으로 받을 값으로 초기화된 message field를 가진 greeter라는 이름의 table을 Create하세요.
colon syntax를 using하여 이 형식으로 greeting을 print하는 :sayHello(name) method를 Add하세요:
[message], [name]!두 개의 input을 받게 됩니다:
greeter.message에 저장할messagegreeting:sayHello()method에 전달할name
colon syntax를 using하여 method definition을 작성하고, colon syntax를 using하여 Call하세요. 포맷된 greeting을 print하세요.
예를 들어, message가 Welcome이고 name이 Luna인 경우, Output은 다음과 같아야 합니다:
Welcome, Luna!직접 해보기
-- 입력 읽기
local message = io.read()
local name = io.read()
-- TODO: 아래에 코드를 작성하세요
-- 1. 'greeter'라는 이름의 테이블을 만들고 'message' 필드를 추가하세요
-- 2. 콜론 구문을 사용하여 :sayHello(name) 메서드를 추가하세요
-- 3. 콜론 구문을 사용하여 메서드를 호출해 인사말을 출력하세요이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.