Menu
Coddy logo textTech

콜론 구문

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에서 메서드를 정의하고 호출하는 표준 방법입니다. 이를 사용하면 코드가 더 짧아지고 반복이 줄어듭니다.

challenge icon

챌린지

쉬움

입력으로 받을 값으로 초기화된 message field를 가진 greeter라는 이름의 tableCreate하세요.

colon syntaxusing하여 이 형식으로 greetingprint하는 :sayHello(name) methodAdd하세요:

[message], [name]!

두 개의 input을 받게 됩니다:

  1. greeter.message에 저장할 message greeting
  2. :sayHello() method에 전달할 name

colon syntaxusing하여 method definition을 작성하고, colon syntaxusing하여 Call하세요. 포맷된 greetingprint하세요.

예를 들어, messageWelcome이고 nameLuna인 경우, Output은 다음과 같아야 합니다:

Welcome, Luna!

직접 해보기

-- 입력 읽기
local message = io.read()
local name = io.read()

-- TODO: 아래에 코드를 작성하세요
-- 1. 'greeter'라는 이름의 테이블을 만들고 'message' 필드를 추가하세요
-- 2. 콜론 구문을 사용하여 :sayHello(name) 메서드를 추가하세요
-- 3. 콜론 구문을 사용하여 메서드를 호출해 인사말을 출력하세요
quiz icon실력 점검

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

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