Menu
Coddy logo textTech

Getter 메서드

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

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

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

왜 추가 method를 사용할까요? Getter는 데이터에 대한 제어된 접근 지점을 제공합니다.

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

getter를 마련해 두면 객체를 사용하는 코드를 수정하지 않고도 이러한 변경을 적용할 수 있습니다.

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

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

challenge icon

챌린지

쉬움

Player 클래스를 만들어 내부 데이터에 접근하기 위해 getter 메서드를 사용해 봅시다. 플레이어의 필드에 직접 접근하는 대신, 플레이어의 정보에 대한 제어된 접근을 제공하는 메서드를 만들 것입니다.

코드를 두 파일에 나누어 구성합니다:

  • Player.lua: 표준 prototype pattern을 사용하여 Player 클래스를 Define합니다. Constructor는 이름을 받아 health를 100으로 Initialize해야 합니다. 세 가지 getter 메서드를 추가합니다:
    • :getName()은 플레이어의 이름을 returns합니다
    • :getHealth()는 플레이어의 current health를 returns합니다
    • :getStatus()는 두 정보를 결합한 형식의 문자열을 returns합니다
  • main.lua: Player module을 Require하고 player instance를 Create합니다. getter 메서드를 사용하여 플레이어의 정보를 표시합니다. 필드를 직접 읽는 대신 모든 정보에 메서드를 통해 접근하세요.

여러분의 :getStatus() method는 다음과 같은 정확한 형식의 문자열을 return해야 합니다:

[name] has [health] HP

하나의 input을 받습니다: 플레이어의 이름입니다.

main 파일에서 주어진 이름으로 player를 Create한 다음, getter 메서드를 사용하여 세 줄을 Print합니다:

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

예를 들어 input이 Luna라면 Output은 다음과 같아야 합니다:

Luna
100
Luna has 100 HP
필수 출력 형식: [번역한 콘텐츠]

직접 해보기

-- Player 모듈 불러오기
local Player = require('Player')

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

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

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

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

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

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

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

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