Menu
Coddy logo textTech

속성 초기화

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

네가 배운 :new() constructor는 객체를 생성하지만, 모든 instance는 동일하게 시작합니다. 실제 객체에는 고유한 데이터가 필요합니다. 사람에게는 특정 이름이 있고, 플레이어에게는 시작 score가 있습니다. 객체를 유용하게 만들려면 constructor가 인수를 받아 새 instance에 할당해야 합니다.

constructor가 초기 값을 받도록 확장하는 방법은 다음과 같습니다:

local Dog = {}
Dog.__index = Dog

function Dog:new(name, breed)
    local instance = {}
    setmetatable(instance, self)
    instance.name = name
    instance.breed = breed
    return instance
end

function Dog:introduce()
    print("I am " .. self.name .. ", a " .. self.breed)
end

생성자는 이제 namebreed를 매개변수로 받습니다. 빈 instance를 생성하고 해당 metatable을 설정한 후, 이 값들을 instance의 필드에 직접 할당합니다. 생성되는 각 객체는 고유한 namebreed를 갖게 됩니다.

local dog1 = Dog:new("Rex", "German Shepherd")
local dog2 = Dog:new("Bella", "Poodle")

dog1:introduce()  -- 출력: 나는 Rex, a German Shepherd
dog2:introduce()  -- 출력: 나는 Bella, a Poodle

두 개의 개는 프로토타입에서 동일한 :introduce() method를 공유하지만, 각각의 instance table에는 고유한 이름과 breed가 저장됩니다. 이것이 프로토타입과 매개변수화된 생성자를 결합하는 힘입니다. 즉, 동작은 공유하면서 상태는 개별적으로 유지할 수 있습니다.

challenge icon

챌린지

쉬움

각자 고유한 이름과 나이를 가진 개인을 생성하는 Person 클래스를 만들어 봅시다. 적절한 모듈 구조를 연습하기 위해 코드를 두 개의 파일로 구성합니다.

다음 파일을 만듭니다:

  • Person.lua: 이름과 나이를 받는 생성자와 함께 Person 클래스를 정의합니다. 각 개인이 자신을 소개할 수 있도록 :introduce() 메서드를 포함합니다.
  • main.lua: Person 모듈을 Require하고 제공된 입력을 사용하여 person 인스턴스를 생성합니다. 그런 다음 해당 인스턴스가 자신을 소개하도록 합니다.

:new(name, age) 생성자는 두 값을 모두 받아 새 인스턴스에 저장해야 합니다. :introduce() 메서드는 다음과 정확히 같은 형식으로 출력해야 합니다:

Hello, my name is [name] and I am [age] years old

두 개의 입력을 받습니다:

  1. person의 이름
  2. person의 나이

예를 들어 입력이 Alice25라면 출력은 다음과 같아야 합니다:

Hello, my name is Alice and I am 25 years old

직접 해보기

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

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

-- TODO: Person:new(name, age)를 사용하여 새 Person 인스턴스 만들기

-- TODO: person 인스턴스에서 introduce() 메서드 호출하기
quiz icon실력 점검

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

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

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