사용하면서도 항상 헷갈리는게 colon(:) 과 dot(.) 였습니다. 책을 봐도 이해가 안되는 말뿐이고 이걸 언젠가는 완벽 이해 해야겠다고 결심했습니다.
아래 링크를 보면 외국인들도 헷갈리긴 마찬가지 인가 보네요.
https://coronalabs.com/blog/2015/12/01/tutorial-understanding-the-colon-vs-dot-operator/
CORONA with Lua -원강민 지음- 책 78 page에 보면 차이점이 나오긴 합니다.
둘의 차이는 하나입니다. :으로 된 함수는 내부에 self라는 변수가 자동으로 생성되는 것인데요. 해당 객체 자신을 참조합니다.예제로 배우는 프로그래밍 루아 -한빛미디어- 책 76 page에는 아래와 같이 나옵니다.
즉, ':'정의를 하면 'self'를 생략할 수 있습니다.
이것을 정리해보도록 하겠습니다.
아래와 같은 예제를 사용했을때 결과를 한번 보시죠
local object = {}
function object.dotMethod( parameter1, parameter2 )
print( self.someNumber )
end
function object:colonMethod( parameter1, parameter2 )
print( self.someNumber )
end
object.someNumber = 10
object.dotMethod( "Hello", "World" ) -- Dot method called with dot operator
object:colonMethod( "Hello", "World" ) -- Colon method called with colon operator
Running this code, you can see that the result in the console is:
nil
10
C++ 언어와 비교해 보겠습니다.
#include <iostream> #include <stdio.h> using namespace std; class Object { public: int someNumber; Object() { this->someNumber = 0; } void Method(); }; void Object::Method() { printf("%d\n",this->someNumber); } int main() { Object object1; object1.Method(); object1.someNumber = 10; object1.Method(); Object *object2 = new Object(); object2->Method(); object2->someNumber = 10; object2->Method(); delete object2; return 0; }
결과
Success time: 0 memory: 3460 signal:0
0 10 0 10
정리하자면
Lua에서의 self는 타언어 (Java,C++)에서 this와 동일하다.
Lua의 method 내에서 self를 사용할 수 있는 조건은 메소드를 ':'을 사용해서 호출할 때이다.
C++ 언어에서 보면 객체내에서는 this사용이 자유롭다고 보면 됩니다. 하지만 lua는 : 로 호출할때만 내부에서 self 를 이용 가능합니다.
Lua에서 ":" , "." 메소드를 어떻게 만들었냐에 따라 다릅니다.
일반적으로 corona sdk의 기본 library함수는 "."을 사용합니다.
타언어와 비교를 했는데도 어렵다면 객체 지향에 대해서 이해가 필요하고요, 잘모르겠다고 판단되면 . 로 호출되는 대부분의 함수들은 corona sdk의 기본 함수들입니다. 그리고 그외에 소스가 있는것들을 자세히 살펴보면 개발자가 : 사용해서 정의가 되어있는지 . 로 사용하여 정의가 되어있는지에 따라서 호출 방법이 달라지게 됩니다.
string 길이를 구하는데 class 정보가 필요하지 않기 때문에 "."로 되어있나 봅니다.
local length = string.len( "Hello World" )
댓글 없음:
댓글 쓰기