본문 바로가기
Lua/정리

Lua 정리 ) 값과 타입

2022. 1. 5.

Lua는 동적으로 타입이 결정됩니다. 변수가 특정한 타입을 가지지 않는다는 것이지요.

값 스스로가 타입을 가집니다.

 

Lua의 모든 값들은 1차 값입니다.

 

1차 값 : 값이 변수에 저장될 수 있고, 함수의인자로 전달될 수 있으며, 반환 값으로 사용이 가능한 값.

 

Lua는 기본적으로 다음과 같은 값 타입들을 가집니다.

데이터 타입 설명
nil nil 은 nil 값을 가리키는 타입입니다.
보통 값의 부재를 나타낼 때 사용하지요.
프로그래밍을 어느정도 아신다면 null 이라는 이름으로 더 익숙하실 겁니다.
다른 값들과는 전혀 다른 속성을 가집니다. 기본값을 지정하지 않을 경우 전역 변수의 형은 nil이 됩니다.
boolean 불리언은 false와 true, 거짓과 참을 가리키는 타입입니다.
nil과 false는 논리식에서 false로 처리됩니다.
그 외의 값은 true로 처리가 되지요.
따라서 C언어와는 달리 0은 true, 참으로 취급됩니다.
number 수치는 배밀도 보통 소수점으로 표현합니다.
string 문자열은 변경되지 않는 바이트 배열로 표현합니다.
Lua는 8비트를 사용하기에 종결분자('\0')를 포함한 8비트 문자열 값을 포함할 수 있습니다.
function 이 글의 아래에 작성되어 있습니다.
userdata 이 글의 아래에 작성되어 있습니다.
thread 이 글의 아래에 작성되어 있습니다.
table 이 글의 아래에 작성되어 있습니다.

Lua에서는 Lua로 만들어진 함수 혹은 C로 작성된 함수를 호출하거나 조작할 수 있습니다.


유저데이터는 Lua 변수에 저장된 임의의 C 데이터로 제공되거 메모리 블록의 포인터입니다.

유저데이터는 "풀 유저데이터", "라이트 유저데이터" 두가지의 형태가 있습니다.

 

풀 유저데이터 : Lua에서 메모리를 관리하는 유저데이터

라이트 유저데이터 : 호스트 프로그램에서 메모리를 관리하는 유저데이터

 

Lua 에서는 유저데이터와 관련하여 할당과 식별 검사를 위한 동작 외에는 어떠한 동작도 정의되어 있지 않습니다.

 

메타테이블을 이용하면 풀 유저데이터에 대한 동작을 프로그래머가 정의할 수 있습니다.

유저데이터 값은 Lua에서 만들거나 수정할 수 없고 C API를 사용해야 합니다.

이런 특징들 덕분에 호스트 프로그램이 이 데이터에 대한 모든 권한을 가지게 됩니다.


스레드 타입은 독립적으로 실행되는 스레드를 의미하고 코루틴으로 구현하는 데 사용됩니다.

운영체제의 스레드와 Lua의 스레드는 전혀 다릅니다. 따라서 Lua의 코루틴은 스레드를 지원하지 않는 운영체제에서도 사용될 수 있습니다.


테이블 타입은 연관 배열로 구현되어 있습니다.

 

연관 배열 : 키 하나와 값 하나가 연관되어 있으면 키를 통해 연관되는 값을 얻을 수 있는 자료구조. 연상 배열, 결합형 배열, 맵, 사전 이라고 부르기도 합니다.

 

수치 이외의 값도 배열의 인덱스로 사용할 수 있지요.

하지만 nil이나 NaN 값은 인덱스로 사용할 수 없습니다.

 

NaN (Not a Number) : 정의되지 않거나 0/0과 같이 표현할 수 없는 결과를 나타낼 때 또는 지칭할 때 쓰이는 특수한 값 

 

테이블은 이형적 성질을 가집니다.

(이형적 성질에 관한 설명은 찾지 못했습니다. 지금 보고있는 책에는 heterogeneous 라고 표현이 되어 있습니다.)

따라서 특정 타입의 값이 아닌 여러 가지 타입의 값들을 포합할 수 있습니다.

 

값이 nil인 키는 테이블에 포함되지 않습니다.

반대로 테이블에 포함되지 않은 키에 대한 값은 nil이 됩니다.

 

테이블은 Lua의 유일한 데이터 구조입니다.

배열, 시퀸스, 심벌 테이블, 셋, 레코드, 그래프, 트리 등의 자료 구조를 표현할 수 있습니다.

 

라이브러리로 제공되는 type() 함수를 통해 해당 값의 타입을 문자열 형태로 얻어낼 수 있습니다.

'Lua > 정리' 카테고리의 다른 글

Lua 정리 ) 함수  (0) 2022.01.07
Lua 정리 ) 논리 연산자, 관계 연산자, 산술 연산자  (0) 2022.01.07
Lua 정리) for, if  (0) 2022.01.06
Lua 정리 ) 문법  (0) 2022.01.06
Lua ) 시작  (0) 2022.01.05

댓글