Lua - 객체 지향 프로그래밍
객체 지향 프로그래밍 소개
안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 Lua를 사용하여 객체 지향 프로그래밍(OOP)의 세계에 흥미로운 여정을 떠납니다. 프로그래밍에 새로운 사람이라고 걱정하지 마세요; 저는 여러 해 동안 교室内에서 사용한 같은 관심과 열정으로 단계별로 안내해 드릴 것입니다.
객체 지향 프로그래밍은 레고 블록으로 만드는 것과 같습니다. 각 블록(또는 객체)은 자신의 속성을 가지고 있으며, 특정 작업을 수행할 수 있습니다. 그들을 함께 배치하면 놀라운 구조물(또는 프로그램)을 만들어냅니다!
객체 지향 프로그래밍의 특징
Lua에 들어가기 전에 OOP의 주요 특징을 빠르게 살펴보겠습니다:
- 캡슐화: 이것은 장난감을 상자에 보관하는 것과 같습니다. 상자( 객체)는 모든 관련된 것(데이터와 함수)을 포함하고 있습니다.
- 상속: 상상 کنید شما یک 장난감 로봇을 가지고 있습니다. 이제 새로운 로봇 장난감을 얻었는데, 이전 것처럼 모든 일을 할 수 있으며, 새로운 기술도 추가되어 있습니다. 이것이 상속입니다!
- 다형성: 이것은 다양한 장치에 작동하는 리모컨과 같습니다. 같은 버튼을 눌러도 장치에 따라 다른 동작이 수행됩니다.
- 추상화: 마이크로파를 사용하는 것을 생각해 보세요. 내부 작동 방식을 알 필요는 없고, 단지 눌러야 할 버튼을 알면 됩니다.
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
이를 분해해 보겠습니다:
- 우리는
Dog
이라는 테이블을 만듭니다. -
Dog.__index = Dog
을 설정합니다. 이것은 상속을 돕는 Lua의 마법입니다. - 우리는
new
함수를 만들어, 생성자로 작동합니다. 이름과 나이를 가진 새로운 강아지를 만듭니다. - 우리는 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