오늘도 변수에 대해 얘기를 하겠습니다.
(항상 적당 적당 사용했는데 막상 적으려니 내용이 많네요)
변수는 형으로 나뉘지만, 범위로도 나뉠 수가 있는 전역 변수(Global Variables)와 같이 코드 전체에 사용되는 변수가 있고, 지역변수(Local Variables)와 같이 일정 범위에서만 사용되는 변수가 있습니다.
전역변수는 한번 선언하면 맥스가 종료될 때까지 존재하기 때문에 사용이 편하지만 많이 사용될수록 작업자가 기억해야 하는 변수의 수가 많아지기 때문에 변수의 충돌이 생길 수 있어 변수의 관리가 많아집니다.
지역변수는 일정 범위 내에서만 사용되기 때문에 코드를 범위내에서 확인하기 편합니다.
범위 밖으로 나가면 변수가 삭제 되므로 변수끼리의 충돌도 적습니다.
전역 변수는 변수명 앞에 'Global'을 붙이고,
지역 변수는 변수명 앞에 'Local'을 붙입니다.
이렇게 적어 놨지만 저는 변수의 범위를 특별한 경우가 아니라면 선언하지 않습니다.
선언하지 않아도 개념을 알고 있으면 선언하지 않아도 원하는 대로 사용할 수 있기 때문입니다.
우선 변수의 범위를 확인하기 전에 한가지 알려 드릴 것이 있습니다.
'MaxScript Listner'의 메인메뉴에 있는 'File > New Script'를 선택합니다.

그러면 다음의 메모장과 같은 'MaxScript Editor'가 생성됩니다.(단축키인 Ctrl+N, Ctrl+O를 기억하면 편합니다.)

'MaxScript Listner'는 한 줄단위로 결과물을 보여주지만, 'MaxScript Editor'는 원하는 만큼 코딩을 한 후에 한 번에 실행하여 결과를 나타냅니다.
이 'MaxScript Editor'에서 다음과 같이 입력을 합니다.
|
1
2
3
4
5
6
7
8
|
Global a = "Global String"
(
local b = "Local String"
format "a1 = %\n" a
format "b1 = %\n" b
)
format "a2 = %\n" a
format "b2 = %\n" b
|
cs |
우선 입력한 스크립트에 대해 설명하겠습니다.
Global a = "Global String"
은 a 라는 변수를 전역으로 선언하고 그곳에 'Global String'라는 문자열을 넣습니다.
괄호는 일정 범위를 나타내거나 하위 범위를 표시합니다.
지금은 일점 범위를 나타낸다고 생각해 주세요.
local b = "Local String"
은 b라는 변수를 지역으로 선언하고 그곳에 'Local String'라는 문자열을 넣습니다.
그다음으로 'format'이라는 명령어를 사용했는데 이 명령어는 'MaxScript Listner'에 원하는 형태로 표시하도록 하는 명령어입니다.
주로 계산된 결과 값이 어떻게 나오는지를 확인하는 용도로 많이 쓰입니다.
'format' 뒤에 오는 큰 따옴표 안의 값은 기본값으로 문자열로 처리되어 적은 대로 표시하도록 합니다.
하지만 지금 원하는 것은 a 또는 b의 변수 안에 어떤 값이 들어 있는지가 궁금하기 때문에 변수의 값도 표시해줬으면 합니다.
변수의 값을 문자열 안에 받을 수 있도록 하는 것이 '%'라는 특수 문자입니다.
그 뒤의 '\n'은 키보드의 엔터와 같은 역할로 적지 않는다면 다음번 문자들이 같은 줄에 연이어 표시됩니다.
보기 편하게 하기 위해서 필요합니다.
큰 따옴표 다음에 변수 'a'가 있는데 이것이 위에 설명한 '%'특수 기호와 짝을 이뤄 '%'대신 'a'의 값이 적히게 됩니다.
만약 3개의 변수를 표시하고 싶다면 다음과 같이 적어주면 됩니다.
foramt "%, %, %\n" a b c
왼쪽의 '%'부터 순서대로 오른쪽의 변수들로 대체되는 방식입니다.
즉 첫 번째 '%'에는 첫번째 a가 두 번째 '%'에는 두 번째 b가 세번째세 번째 '%'에는 세 번째 c가 입력됩니다.
그다음으로 괄호 밖의 'format'명령어가 있습니다만 같은 내용이므로 생략하겠습니다.
입력을 하셨으면 맥스 스크립트에서 실행을 하겠습니다.
메인 메뉴의 'Tools' > 'Evaluate All'을 클릭합니다.(단축키인 Ctrl+E를 기억하시면 편합니다.)

결과가 다음과 같이 나옵니다.
생각하신 대로 나왔나요?
괄호 안의 'format'문의 a1과 b1은 생각한 대로 결과를 나타냅니다.
하지만 괄호 밖의 'format'문의 a2는 변수에 넣은 대로 나온 반면 b2는 'undefined'라는 결과를 보여줍니다.
'undefined'는 '정의되지 않았다'는 뜻으로 '존재하지 않는다'라고 보셔도 됩니다.
분명히 'local b = "Local String"'라고 적었지만 존재하지 않는다고 나온 이유는 'b'가 지역변수 이기 때문입니다.
맥스 스크립트는 지역의 범위를 괄호로 표시하기 때문입니다.
괄호 안에서 만들어진 변수는 괄호 밖으로 나가면 삭제된다는 특징이 있습니다.
그렇기 때문에 괄호 밖의 'format'문에서 'b'를 찾을 수 없습니다.
이를 해결하려면 b를 'Global'변수로 선언하면 됩니다.
|
3
|
Global b = "Local String"
|
cs |
라고 하면 됩니다.

이제 정상적으로 표시가 됩니다.

괄호로 범위를 정해 놓더라도 'Global'로 선언하면 전역 변수로 변경이 됩니다.
다음을 한번 봅시다.
|
1
2
3
4
5
6
7
8
|
c = "Global String"
(
d = "Local String"
format "c1 = %\n" c
format "d1 = %\n" d
)
format "c2 = %\n" c
format "d2 = %\n" d
|
cs |

이번에는 변수 'c'와 'd'를 선언했습니다.
결과 값은 괄호 밖에서 'd'를 '찾을 수 없다'라고 나옵니다.
위 설명중 저는 변수의 범위를 정하지 않는다고 정했는데요.
바로 위의 예가 변수의 범위를 정하지 않고 사용한 것입니다.
맥스 스크립트는 변수의 범위를 적지 않을 때는 자신 생성된 범위와 하위 범위에 영향을 줍니다.
즉 'c'는 자신이 생성된 범위와 그 하위 범위에 영행을 줍니다.
여기서는 'C'가 제일 위에 생성됐기 때문에 전역변수가 됩니다.
'd'는 괄호 안에서 생성 됐기 때문에 괄호 안에서만 사용될 수 있는 지역 변수가 됩니다.
그렇다면 변수의 범위를 쓰지 않고 'd'를 괄호 밖에서도 사용할 수 있으려면 어떻게 하면 될까요?
바로 'c' 밑에 변수를 생성하면 됩니다.
|
1
2
3
4
5
6
7
8
9
|
c = "Global String"
d = ""
(
d = "Local String"
format "c1 = %\n" c
format "d1 = %\n" d
)
format "c2 = %\n" c
format "d2 = %\n" d
|
cs |

'd'는 문자열로 사용될 것이기 때문에 아무것도 없는 문자열 ""로 만들었습니다.

이것으로 변수에 대해서는 대충 설명을 마친 것 같습니다.
다음에는 배열에 대해 알아보겠습니다.
'맥스스크립트 기초' 카테고리의 다른 글
| 제어문(case) (5) | 2019.07.07 |
|---|---|
| 제어문(if) (3) | 2019.07.07 |
| 배열 함수 (3) | 2019.07.05 |
| 배열 (6) | 2019.07.03 |
| 변수의 연산 (0) | 2019.07.01 |
| 변수 (0) | 2019.07.01 |
| MAXScript Listener (0) | 2019.06.30 |
| 변수와 함수의 개념 (0) | 2019.06.29 |