C++ 연산자 우선순위의 난해함

저는 C++이 잘못 만들어진 언어 중 하나라고 봅니다. C++은 다양한 방식으로 프로그래밍할 수 있고 성능이 뛰어나다는 장점을 갖고 있지만, 어렵고 복잡하다는 단점이 장점을 희석시켜 버립니다. C++의 대표적인 단점으로 복잡한 연산자 우선순위가 있습니다.

C++ 연산자 우선순위는 C++ 언어를 만든 사람이 임의로 결정한 것입니다. 그래서 직관적이지 않으므로, 초보 프로그래머는 코드의 정확한 수행 과정조차 알기 어렵습니다. 예를 들어, a = b++라는 코드는 일반인이 상상하기 어려운 결과를 내놓습니다. 즉, b의 값이 a에 대입되고, 대입이 끝나고 나서야 b의 값이 증가합니다.

덧셈과 곱셈이 함께 있을 때, 우리는 학교에서 사칙 연산의 우선순위를 배웠으므로, 곱셈이 먼저 계산된다는 것을 알고 있습니다. 하지만 그렇기 때문에 식을 분석해야 하는 번거로움이 있습니다. 반면, 스몰토크(Smalltalk) 언어에서는 연산이 특별한 우선순위 없이 왼쪽에서 오른쪽으로 처리된다고 합니다. 처음 생각할 때엔 어색할 수 있지만, 규칙이 단순하고 일관성 있으며 직관적이라는 점에서 C++보다 더 낫습니다.

제일 좋은 규칙은 쉬운 규칙입니다. 그러기 위해서는 단순하고 일관성 있으며 직관적이어야 합니다. 그런 면에서 볼 때, C++ 연산자 우선순위 규칙은 좋지 않습니다.

참고:

Advertisements

2 thoughts on “C++ 연산자 우선순위의 난해함

  1. 직관적인 규칙이 필요하다라는 말은 공감합니다만,
    예를 드신 부분에 대한 제 생각은 약간 다른데요. 언어에서 우선하는 것은 ‘쉽다’라는 것 보다 ‘보편적이다’라는 것이 우선하지 않나 싶습니다. 예를 드신 문법은 비단 c++ 뿐 아니라, 대부분의 언어에서 차용되는 것을 그대로 사용한 것이지요. (사실 프로그램이라는 언어 자체가 보편적이지는 않지요) 예를 들면, 모든 사람이 영어를 쓰는 상황에서, 에스프란토어가 직관적이고 좋다고 해도, 사실 그게 별 중요하지는 않으니까요. 그런면에서 저는 C++의 연산자 우선순위 설계의 손을 들어주고 싶습니다.

    • 네, 저도 어느 정도 동의합니다. 비직관적이더라도 보편적인 문법을 따른 프로그래밍 언어는 기존 프로그래머에게는 오히려 쉽게 느껴질 것입니다.

      하지만, 프로그래밍에 입문하는 사람에겐 비직관적인 규칙은 어렵습니다. 언어 문법을 처음 접했을 때 익히기 쉽지 않다는 것이, 프로그래밍이 아직도 어려운 것으로 인식되고 있는 중요한 이유 중 하나가 아닐까 생각합니다. 새로운 프로그래밍 언어 형식의 좋은 예로, 언리얼 게임 엔진의 Kismet 같은 비쥬얼 스크립팅 언어가 있습니다. 그런 것은 기존 프로그래머에게는 오히려 불편하지만, 비프로그래머에겐 직관적일 것입니다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중