ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Lua] 다중 할당문 (Multiple assignments)
    Lua 2024. 10. 8. 17:03

    할당문은 변수나 테이블의 값을 바꾸는 기본적인 수단입니다.

    foo = "Hello" .. " world!"
    bar.f1 = bar.f1 + 1

    대입 연산자를 통해 위와 같이 값을 바꾸는 것이 가능합니다.

    대부분의 프로그래밍 언어는 한 문장에서 한 변수에 대한 할당을 지원합니다.

     

    Lua는 여기에 더해 다중 할당을 지원합니다.

    다중 할당이 Lua만의 특징은 아니지만, Lua의 큰 특징 중 하나이니 살펴보도록 하겠습니다.

     


     

    1. 다중 할당

     

    다중 할당은 한 문장에서 여러 변수에 여러 값을 대입하는 방법입니다.

    foo, bar = 1, 2
    print(foo, bar)  -- 1  2
    더보기

    위 예제는 두 변수에 값을 할당했습니다.

    두 개 뿐만 아니라, 3개 이상의 변수를 이용한 다중 할당도 가능합니다.

    a, b, c, d = 1, 2, 3, 4
    print(a,b,c,d)            -- 1  2  3  4

     

    다중 할당은 대입하는 값을 모두 계산한 이후 대입합니다.

    function foo(arg1, arg2)
        return arg1 + arg2
    end
    
    function bar(arg1, arg2)
        return arg1 * arg2
    end
    
    a, b = 3, 5

    위와 같은 코드가 있을 때

    a, b = foo(a, b), bar(a, b)
    print(a, b)                  -- 8 15

    다중 할당을 이용할 경우 a, b는 각각 8과 15입니다.

    a = foo(a, b)
    b = bar(a, b)
    print(a, b)    -- 8 40

    하지만 따로 대입할 경우 계산과 대입의 순서가 바뀌어 a, b가 각각 8과 40이 됩니다.

    계산 순서와 대입 순서에 주의해주세요.

     

    다중 할당문에서, 할당 받는 변수와 할당 되는 값의 갯수가 다를 경우 오류가 발생하지 않습니다.

    foo, bar, baz = 1, 2
    print(foo, bar, baz)  -- 1  2  nil

    할당 되는 값의 갯수가 적을 경우, 남은 변수의 값은 nil이 됩니다.

    function asn() print("func") return 1 end
    
    foo, bar, baz = foo(), foo(), foo(), foo()
    print(foo, bar, baz)
    --[[
    func
    func
    func
    func
    1  1  1
    ]]

    할당 받는 변수의 갯수가 적을 경우, 남는 변수는 무시됩니다. 

    하지만 이 때, 남는 할당문의 계산은 정상적으로 이루어지는 점에 주의해주세요.

     

    2. Swap

     

    다중 할당을 응용할 수 있는 가장 쉬운 예제는 두 변수를 바꾸는 것 입니다.

    다음은 C++에서 두 변수를 바꾸는 코드입니다.

    using namespace std;
    
    void swap(int& a, int& b) {
        int tmp = a;
        a = b;
        b = tmp;
    }
    
    int main() {
        int a = 1, b = 2;
        cout << a << " " << b << "\n";   // 1 2
        swap(a, b);
        cout << a << " " << b << "\n";   // 2 1
    
        return 0;
    }

    위와 같이 함수로 분리하여 두 변수를 바꾸는 데 사용했습니다.

    Lua는 더욱 간단하게 구현할 수 있습니다.

    a, b = 1, 2
    print(a, b)  -- 1  2
    a, b = b, a
    print(a, b)  -- 2  1

     


     

    다중 할당은 C++, Java등의 언어에는 없지만, Python에는 있는 기능입니다.

    하지만 Python의 다중 할당과는 사용법이 다르기 때문에, Lua의 다중 할당은 짚고 넘어갈 필요가 있습니다.

     

    이번 글이 도움이 되셨기를 바랍니다.

    감사합니다.

    'Lua' 카테고리의 다른 글

    [Lua] 함수 (1)  (0) 2025.02.13
    [Lua] 제어 구문 (if, while, repeat, for, break, goto...)  (0) 2025.02.05
    [Lua] 연산자 알아보기  (0) 2024.10.07
    [Lua] Type (자료형) 알아보기  (0) 2024.10.04
    [Lua] Lua binary : lua.exe, luac.exe, wlua.exe  (0) 2024.09.20

    댓글

Designed by Tistory.