[Flutter/Dart] 다트 언어의 증감 연산자 (전위, 후위)

    증감 연산자의 개요

    증감 연산자는 값을 1 증가 시키거나, 1 감소 시키는 것을 뜻합니다. 증감 연산자는 비교적 오래된 언어(69년 B언어에서 최초 도입)들은 대다수 사용하고 있지만, 최근에 만들어진 언어(ex: Python)들은 대체가 있기 때문에 지원을 안하는 경우가 많습니다. 플러터에서 쓰이는 다트의 경우 아무래도 자바를 많이 참고해서 만든 느낌이 강하다보니 이 증감 연산도 지원하고 있습니다.

     

    [Flutter/Dart] 다트 언어의 증감 연산자 (전위, 후위)


    증감 연산자의 종류

    연산자 용어 의미
    ++값 전위 증가 값을 1 증가하고 처리
    값++ 후위 증가 처리하고 값을 1 증가
    --값 전위 감소 값을 1 빼고 처리
    값-- 후위 감소 처리하고 값을 1 빼기

     

    값을 1 증가 시키거나 1 감소 시키는데 종류가 4가지가 있는 것을 많이 혼란이 올 수 있습니다. 그리고 이 연산자가 단일로 처리하게 되면 사실 내용은 동일하기 때문에 어떻게 써도 상관은 없습니다만, 다른 내용과 결합하게 되면 앞뒤의 순서가 상당히 중요해 집니다.

     

     

    증감 연산자의 예시

    간단한 예시

    void main(List<String> arguments) {
      int x = 10;
      print("${x--} 와 ${--x}");
    }

    우선 간단한 예시부터 설명하기 위해, 전위와 후위에 대한 이해를 위한 코드를 짜봤습니고 위 결과는 아래와 같습니다.

     

    간단한 예시 결과

    10 와 8

    왼쪽값은 바뀐 것 없이 10이 나왔지만 뒷쪽값은 갑자기 -2가 된 값으로 변경이 되었습니다. 이 예제는 전위, 후위의 차이를 직관적으로 보여주는데요. 바로 후위 연산의 경우 일단 처리를 한 후 값을 대입 시키고, 전위 연산은 먼저 대입시키고 처리를 한다는 개념이기 때문입니다. 즉 위에 있는 코드를 자세히 풀게 되면 아래와 같습니다.

     

    int x = 10;
    # 후위 연산
    print(x);
    x = x - 1;
    
    # 전위 연산
    x = x - 1;
    print(x);

    이해가 되셨나요? 이렇게 복잡한 개념을 왜 만들었는가? 생각하실 수 있겠지만 보시다시피 코드의 양이 엄청나게 줄어들었습니다. 즉, 증감연산자는 소스가 복잡해지는 단점이 있지만 압축하는 효과가 있기 때문에 코드이 양이 줄어드는 장점이 있는 것이죠.

     

    복잡한 예시

    void main(List<String> arguments) {
      int x = 20;
      int y = x-- + 5 + --x;
      print("x의 값은 ${x}, y의 값은 ${y}");
    }

    독립적으로 나오는 증감 연산자가 아니라 이번에는 다른 연산과 결합된 예시입니다. 결과부터 말씀드리고 증감 연산자에 대한 순서에 대해서 말해보도록 하겠습니다.

     

    복잡한 예시 결과

    x의 값은 18, y의 값은 43

     

    x는 18이라고, 충분히 예상할 수 있을테지만 y값이 좀 헷갈릴 수 있을 것입니다. 여기서 핵심은 x가 아니라 y이기 때문입니다.

     

    source,&nbsp;http://wiki.hash.kr/index.php/증감연산자

     

    1. 후위 감소 연산자이므로 덧셈이 먼저 수행된다.(x=20 / y= 20 + 5 + --x)
    2. 후위 감소 연산자에 의해 x의 값이 감소된다.(x=19)
    3. 전위 감소 연산자에 의해 x의 값이 감소된다.(x=18)
    4. 덧셈 연산이 수행된다.(x=18 / y = 25 + 18)
    5. y에 결과값의 대입 연산이 수행된다.(y = 43)

     

     

    반응형

    댓글

    Designed by JB FACTORY