Menu
Coddy logo textTech

:new() 생성자

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

수동으로 객체를 생성하고, empty table을 만들고, 해당 metatable을 설정한 뒤 __index를 연결하는 작업은 반복적입니다. 표준 해결책은 이 모든 작업을 대신 처리하는 :new() constructor method를 class에 직접 Define하는 것입니다.

패턴은 다음과 같습니다:

local Dog = {}
Dog.__index = Dog

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

function Dog:bark()
    print("Woof!")
end

:new() 내부에서 어떤 일이 일어나는지 분석해 봅시다. 먼저 instance라는 empty table을 만듭니다. 그런 다음 해당 table의 metatable을 self로 설정합니다. 이는 Dog:new()을 호출할 때 Dog입니다.

Dog.__indexDog itself를 가리키므로, instance는 Dog에 정의된 모든 메서드를 찾을 수 있습니다. 마지막으로 새 객체를 반환합니다.

constructor 외부에 있는 Dog.__index = Dog 줄에 주목하세요. 이는 일반적인 지름길로, 별도의 metatable을 만드는 대신 class table이 prototype과 metatable 역할을 모두 합니다.

이제 객체를 깔끔하고 일관되게 생성할 수 있습니다:

local myDog = Dog:new()
myDog:bark()  -- 출력: Woof!

여러분이 만드는 모든 class는 이와 동일한 구조를 따릅니다. :new() constructor는 객체 생성이 이루어지는 유일한 장소가 되어 코드를 체계적이고 예측 가능하게 만듭니다.

challenge icon

챌린지

쉬움

방금 배운 표준 constructor 패턴을 사용하여 Cat class를 만들어 봅시다. 적절한 module 구조를 연습할 수 있도록 코드를 두 파일에 나누어 구성합니다.

다음을 만듭니다:

  • Cat.lua: 완전한 constructor 패턴을 사용하여 Cat class를 Define합니다. class에는 다음이 포함되어야 합니다:
    • 자기 자신을 가리키는 __index를 가진 class table
    • instance를 만들고, metatable을 설정한 뒤 반환하는 :new() constructor
    • cat의 소리를 출력하는 :meow() method
    파일 끝에서 class table을 Return합니다.
  • main.lua: Cat module을 Require하고 constructor를 사용하여 cat instance를 만듭니다. 그런 다음 모든 것이 올바르게 연결되었는지 확인하기 위해 해당 method를 호출합니다.

하나의 input, 즉 cat이 meow해야 하는 times의 number를 받게 됩니다.

여러분의 :meow() method는 정확히 다음을 출력해야 합니다:

Meow!

main 파일에서 Cat:new()를 사용하여 cat을 만들고, specified된 times만큼 :meow()를 호출합니다.

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

Meow!
Meow!
Meow!

직접 해보기

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

-- 입력 읽기: 야옹할 횟수
local times = tonumber(io.read())

-- TODO: Cat:new()를 사용하여 cat 인스턴스 생성

-- TODO: 지정된 횟수만큼 :meow() 메서드 호출
quiz icon실력 점검

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

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

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