Menu
Coddy logo textTech

점(.) vs 콜론(:)

Coddy Lua 여정의 객체 지향 프로그래밍 (Object Oriented Programming) 섹션에 포함된 레슨. 70개 중 4번째.

now 두 가지 dot 및 colon syntax를 모두 알고 있으므로, 각각 언제 using해야 하는지와 이를 잘못 섞으면 어떤 일이 발생하는지 이해하는 것이 매우 중요합니다.

핵심 규칙은 간단합니다. function을 정의하는 방식은 그것을 call하는 방식과 일치해야 합니다. colon으로 정의했다면 colon으로 call하세요. dot과 explicit self를 사용해 정의했다면 dot으로 call하고 table을 전달하세요.

서로 짝을 잘못 맞추면 다음과 같이 됩니다:

local game = { score = 0 }

function game:addPoints(points)
    self.score = self.score + points
end

-- WRONG: 점으로 호출했지만 테이블이 전달되지 않음
game.addPoints(10)  -- 오류! self가 이제 10이며, 테이블이 아님

game.addPoints(10)을 호출하면 Lua는 game을 자동으로 전달하지 않습니다. 값 10self가 되어 예상치 못한 동작이나 오류를 일으킵니다.

반대 방향은 더 관대합니다:

function game.reset(self)
    self.score = 0
end

-- 콜론으로 호출: game:reset()은 game.reset(game)과 같습니다
game:reset()  -- self가 game을 올바르게 받으므로 이것이 작동합니다

이 특정한 경우에는 작동할 수도 있지만, 혼란을 일으키고 특정 argument를 필요로 하는 function을 망가뜨릴 수 있습니다. 가장 안전한 방법은 일관성을 유지하는 것입니다. function에 self가 필요하면 definition과 call 모두에 colon을 사용하고, 필요하지 않으면 dot을 사용하세요.

challenge icon

챌린지

쉬움

player라는 이름의 table을 만들고, score field를 0으로 initialized하세요.

table에 두 개의 function을 Add하세요:

  1. player.setScore(self, value) - dot syntax과 explicit self parameter를 사용하여 Define합니다. self.score를 주어진 값으로 설정합니다.
  2. player:addBonus(amount) - colon syntax을 사용하여 Define합니다. amountself.score에 더합니다.

두 개의 입력을 받습니다:

  1. 초기 score 값
  2. 더할 보너스 amount

다음 단계를 수행하세요:

  1. dot syntax을 사용하여 setScore를 Call하고 (table을 first argument로 passing) 초기 score를 설정합니다.
  2. colon syntax을 사용하여 addBonus를 Call하고 보너스를 더합니다.
  3. player.score의 final 값을 출력합니다.

기억하세요: 각 function을 Define한 방식에 맞게 Call해야 합니다.

직접 해보기

-- 입력 읽기
local initialScore = tonumber(io.read())
local bonusAmount = tonumber(io.read())

-- TODO: 아래에 코드를 작성하세요
-- 1. 'player'라는 이름의 테이블을 만들고 'score' 필드를 0으로 초기화하세요
-- 2. 명시적 self와 함께 점 구문을 사용하여 player.setScore(self, value)를 추가하세요
-- 3. 콜론 구문을 사용하여 player:addBonus(amount)를 추가하세요
-- 4. 점 구문을 사용하여 setScore를 호출하세요 (테이블을 첫 번째 인수로 전달)
-- 5. 콜론 구문을 사용하여 addBonus를 호출하세요


-- 최종 점수 출력
print(player.score)
quiz icon실력 점검

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

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

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