Menu
Coddy logo textTech

Getter 메서드

Coddy Lua 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 70개 중 13번째.

이미 self.healthself.items 같은 인스턴스 변수에 데이터를 저장하는 방법을 배웠습니다. 객체 외부에서 이러한 필드에 직접 접근할 수 있지만, 더 깔끔한 방법이 있습니다: getter 메서드를 사용하는 것입니다.

게터(접근자 메서드라고도 함)는 내부 값을 반환하는 간단한 메서드입니다. player.health에 직접 접근하는 대신 player:getHealth()를 호출합니다:

local Player = {}
Player.__index = Player

function Player:new(name)
    local instance = {}
    setmetatable(instance, self)
    instance.name = name
    instance.health = 100
    return instance
end

function Player:getHealth()
    return self.health
end

function Player:getName()
    return self.name
end

왜 추가 메서드를 사용해야 할까요? Getters는 데이터에 대한 제어된 접근 지점을 제공합니다.

현재 :getHealth()는 단순히 값을 반환합니다. 하지만 나중에 로직을 추가하고 싶을 수 있습니다—예를 들어 체력이 10 아래로 떨어지면 "Critical"을 반환하거나, 체력이 확인될 때마다 로그를 기록하는 식으로요.

getter가 설정되어 있으면, 객체를 사용하는 어떤 코드도 수정하지 않고 이러한 변경을 할 수 있습니다.

local hero = Player:new("Luna")
print(hero:getHealth())  -- 출력: 100
print(hero:getName())    -- 출력: Luna

이 패턴은 객체의 내부 구조와 다른 코드가 객체와 상호작용하는 방식 사이에 명확한 경계를 만듭니다. 외부 세계는 객체의 필드에 직접 접근하는 대신 메서드를 통해 데이터를 요청합니다.

challenge icon

챌린지

쉬움

getter 메서드를 사용하여 내부 데이터에 접근하는 Player 클래스를 만들어 보겠습니다. 플레이어의 필드에 직접 접근하는 대신, 플레이어의 정보를 제어된 방식으로 제공하는 메서드를 생성하세요.

코드를 두 개의 파일에 나누어 구성하세요:

  • Player.lua: 표준 프로토타입 패턴으로 Player 클래스를 정의하세요. 생성자는 이름을 받아들이고 health를 100으로 초기화해야 합니다. 세 개의 getter 메서드를 추가하세요:
    • :getName()은 플레이어의 이름을 반환합니다
    • :getHealth()은 플레이어의 현재 health를 반환합니다
    • :getStatus()은 두 정보를 결합한 형식화된 문자열을 반환합니다
  • main.lua: Player 모듈을 require하고 플레이어 인스턴스를 생성하세요. getter 메서드를 사용하여 플레이어의 정보를 표시하세요—필드를 직접 읽는 대신 메서드를 통해 모든 것에 접근하세요.

:getStatus() 메서드는 정확히 이 형식의 문자열을 반환해야 합니다:

[name] has [health] HP

하나의 입력을 받게 됩니다: 플레이어의 이름입니다.

메인 파일에서 주어진 이름으로 플레이어를 생성한 후, getter 메서드를 사용하여 세 줄을 출력하세요:

  1. 플레이어의 이름 (:getName() 사용)
  2. 플레이어의 health (:getHealth() 사용)
  3. 플레이어의 전체 상태 (:getStatus() 사용)

예를 들어, 입력이 Luna인 경우 출력은 다음과 같아야 합니다:

Luna
100
Luna has 100 HP

치트 시트

게터 메서드(또는 접근자 메서드)는 객체의 내부 값을 반환하는 메서드입니다. 필드에 직접 접근하는 대신 데이터를 가져오기 위해 메서드를 호출합니다.

기본 게터 메서드:

function Player:getHealth()
    return self.health
end

function Player:getName()
    return self.name
end

게터 메서드 사용:

local hero = Player:new("Luna")
print(hero:getHealth())  -- Output: 100
print(hero:getName())    -- Output: Luna

게터는 데이터에 대한 제어된 접근 지점을 제공합니다. 객체의 내부 구조와 다른 코드가 객체와 상호작용하는 방식 사이에 명확한 경계를 만듭니다. 이를 통해 객체를 사용하는 코드를 수정하지 않고 나중에 로직(예: 유효성 검사 또는 로깅)을 추가할 수 있습니다.

직접 해보기

-- Player 모듈을 require 합니다
local Player = require('Player')

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

-- TODO: 주어진 이름으로 플레이어 인스턴스 생성

-- TODO: :getName()을 사용하여 플레이어의 이름 출력

-- TODO: :getHealth()을 사용하여 플레이어의 체력 출력

-- TODO: :getStatus()을 사용하여 플레이어의 상태 출력
quiz icon실력 점검

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

Object Oriented Programming의 모든 레슨