Lua - 객체 지향 프로그래밍

객체 지향 프로그래밍 소개

안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 Lua를 사용하여 객체 지향 프로그래밍(OOP)의 세계에 흥미로운 여정을 떠납니다. 프로그래밍에 새로운 사람이라고 걱정하지 마세요; 저는 여러 해 동안 교室内에서 사용한 같은 관심과 열정으로 단계별로 안내해 드릴 것입니다.

Lua - Object Oriented

객체 지향 프로그래밍은 레고 블록으로 만드는 것과 같습니다. 각 블록(또는 객체)은 자신의 속성을 가지고 있으며, 특정 작업을 수행할 수 있습니다. 그들을 함께 배치하면 놀라운 구조물(또는 프로그램)을 만들어냅니다!

객체 지향 프로그래밍의 특징

Lua에 들어가기 전에 OOP의 주요 특징을 빠르게 살펴보겠습니다:

  1. 캡슐화: 이것은 장난감을 상자에 보관하는 것과 같습니다. 상자( 객체)는 모든 관련된 것(데이터와 함수)을 포함하고 있습니다.
  2. 상속: 상상 کنید شما یک 장난감 로봇을 가지고 있습니다. 이제 새로운 로봇 장난감을 얻었는데, 이전 것처럼 모든 일을 할 수 있으며, 새로운 기술도 추가되어 있습니다. 이것이 상속입니다!
  3. 다형성: 이것은 다양한 장치에 작동하는 리모컨과 같습니다. 같은 버튼을 눌러도 장치에 따라 다른 동작이 수행됩니다.
  4. 추상화: 마이크로파를 사용하는 것을 생각해 보세요. 내부 작동 방식을 알 필요는 없고, 단지 눌러야 할 버튼을 알면 됩니다.

Lua에서 객체 지향 프로그래밍

이제 Lua에서 이러한 OOP 개념을 어떻게 사용할 수 있는지 살펴보겠습니다. Lua는 다른 언어와 달리 내장된 클래스를 가지고 있지 않지만, 테이블과 함수를 사용하여 객체 지향 구조를 만들 수 있습니다. 마치 우리가 스스로 레고 세트를 만드는 것처럼!

간단한 클래스 생성

먼저 간단한 클래스를 만들어 보겠습니다. Lua에서는 클래스를 테이블로 표현합니다.

local Dog = {}
Dog.__index = Dog

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

function Dog:bark()
print(self.name .. " says: Woof!")
end

이를 분해해 보겠습니다:

  1. 우리는 Dog이라는 테이블을 만듭니다.
  2. Dog.__index = Dog을 설정합니다. 이것은 상속을 돕는 Lua의 마법입니다.
  3. 우리는 new 함수를 만들어, 생성자로 작동합니다. 이름과 나이를 가진 새로운 강아지를 만듭니다.
  4. 우리는 Dog 클래스에 bark 메서드를 추가합니다.

객체 생성

이제 우리의 Dog 클래스가 있으므로, Dog 객체를 생성해 보겠습니다:

local myDog = Dog.new("Buddy", 3)

축하합니다! 여러분은 첫 번째 객체를 만들었습니다. myDog은 이제 이름이 "Buddy"이고 나이가 3세인 Dog 객체입니다.

속성 접근

우리의 강아지의 속성을 다음과 같이 접근할 수 있습니다:

print(myDog.name) -- 출력: Buddy
print(myDog.age)  -- 출력: 3

점 구분자를 사용하는 것처럼 간단합니다!

멤버 함수 접근

우리의 강아지를 울리기 위해 bark 메서드를 호출할 수 있습니다:

myDog:bark() -- 출력: Buddy says: Woof!

점 대신 콜론 :을 사용하는 것에 주목하세요. 이는 Lua에서 self를 메서드에 전달하는 방법입니다.

완전한 예제

이제 모든 것을 함께 모아보겠습니다:

local Dog = {}
Dog.__index = Dog

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

function Dog:bark()
print(self.name .. " says: Woof!")
end

local Labrador = {}
setmetatable(Labrador, {__index = Dog})

function Labrador.new(name, age, color)
local self = Dog.new(name, age)
setmetatable(self, {__index = Labrador})
self.color = color
return self
end

function Labrador:swim()
print(self.name .. " is swimming!")
end

function Labrador:bark()
print(self.name .. " says: Woof woof woof!")
end

local myDog = Dog.new("Buddy", 3)
local myLabrador = Labrador.new("Max", 2, "Yellow")

myDog:bark()      -- 출력: Buddy says: Woof!
myLabrador:bark() -- 출력: Max says: Woof woof woof!
myLabrador:swim() -- 출력: Max is swimming!

이제 우리는 기본 클래스 구조를 만들었고, 상속을 구현하고 메서드를 오버라이드했습니다. Lua OOP 전문가로 성장하는 길에 여러분은 잘 나아가고 있습니다!

기억하세요, 연습은 완벽을 만듭니다. 여러분만의 클래스를 만들어 다양한 속성과 메서드를 실험해 보세요. 행복한 코딩을 기원합니다!

Credits: Image by storyset