자료구조를 공부하다 보니 문뜩 드는 생각이 있다.

stack을 공부하다 보면 수식 표기법인 전위(Prefix), 중위(Infix), 후위(Postfix)의 개념을 배우고, 이를 응용해서 계산기를 만든다.

근데 막상 계산기를 만드는 대부분의 예제는 후위 표기법으로 되어있는 걸 알 수 있다.

전위나 후위 둘 다 괄호도 없고, 연산자 우선순위를 따로 신경 쓸 필요가 없는데 왜 후위표기법만 사용해서 쓰는 건지 궁금해서 찾아봤다. (추가로 이유는 자세히 안 적혀 있어서, 나름대로 생각을 해봤다.)

 

 


 

우선 첫 번째 이유로는 후위 표기법이 다른 표기법에 비해 연산 과정이 쉽기 때문이란다.

내 생각으로 간단한 예제를 만들어봤다.

# 1 + (2 * 3)
# Prefix
+1*23

전위 표기법의 경우 위와 같은 상황에서 우선 stack으로 계산하려면 변수에 +와 1을 올려둔 상태 일 것이다.

하지만 뒤에 2 \* 3을 계산 해야지, 결과를 얻을 수 있는 상황이다.
그렇기에 전위 표기법은 추가적인 연산이 필요한 상황을 고려해야 할 필요가 있다.

 

 

# 1 + (2 * 3)
# Postfix
123*+

반면에 후위 표기법은 간단하게 왼쪽에서 오른쪽으로 쭉 읽으면서 stack에 저장하고, 연산자를 만나면 꺼내서 연산하면 된다.
그렇기에 전위 표기법에 비해 훨씬 간단하게 구현할 수 있기 때문에, 이런 차이점이 생긴게 아닐까 싶다.

 

두 번째 이유는 후위 표기법이 전위 표기법에 비해 적은 괄호를 사용하기 때문이란다.
근데 이건 후위나 전위 둘다 괄호를 사용하지 않는 게 특징인데, 왜 있는 건진 잘 모르겠다..
(혹시 아시는 분은 댓글 달아주시면 감사하겠습니다.)

 


 

이러한 이유로 계산기를 만들 때, 전위 표기법보다는 후위 표기법이 조금 더 우위를 가진다는 것 같다.
그럼에도 전위 표기법과 후위 표기법 역시 각각 사용되는 분야가 조금씩 다르고, 그 분야에서 장점이 있다고 한다.

 

전위 표기법

  • 주로 단일 연산자 (Unary Operator)에서 사용되며, 다른 표기법에 의해 연산이 빠름
  • LISP이나 Clojure 등의 프로그래밍 언어에서 사용됨

 

후위 표기법

  • 주로 컴파일러에 의한 코드 생성에서 사용됨
  • 다른 표기법에 비해 수식 평가(Evaluate)에 수월함

 

더 깊게 찾아보진 않아서, 구체적인 사항이 더 있을거 같다는 생각이 든다.
나중에라도 다시 궁금해지면, 글 내용에 더 추가해봐야겠다.


출처

+ Recent posts