'풀리퀘'는 깃허브에서 타인의 코드에 리뷰를 요청하는 기능인 '풀 리퀘스트'의 줄임말입니다. 풀리퀘를 통해 코드는 더 발전하는데요. 알아두면 쓸모 있는 IT업계의 크고 작은 사건들을 변규홍 스켈터랩스 개발자가 격주로 '풀리퀘' 드립니다.
▲ (그래픽=픽사베이)
▲ (그래픽=픽사베이)

개발자들에게 가장 사랑받는 프로그래밍 언어는 무엇일까. 스택 오버플로우(Stack Overflow)에서 2021년 실시한 연례 개발자 설문조사에선 ‘써본 적이 있는 프로그래밍 언어’, ‘지금 쓰고 있고 앞으로도 쓰고 싶은 사람의 비율이 높은 언어’, ‘아직 써 보지 않았지만 기회가 되면 써 보고 싶은 언어’의 1위로 각각 자바스크립트(JavaScript), 러스트(Rust), 파이썬(Python)이 꼽혔다.[1][2] 매일 파이썬 언어로 다양한 오픈소스 프로젝트에 참여하고, 러스트 언어로 만들어진 파일 본문 검색 프로그램 ‘ripgrep’을 쓰는 사람으로서 참 반가운 소식이다.[3]

이런 순위에 자연스럽게 따라오는 질문이 있다. ‘지금 시대에 많이 쓰이는 프로그래밍 언어이니, 이 언어도 배워야 하는 걸까?’ 하지만 시간이 흐르면서 인기 있는 프로그래밍 언어는 계속 바뀌기 마련이다. 그럼 질문을 좀 바꿔보자. 각 프로그래밍 언어는 어떤 이유로 각광 받았고, 요즘은 주로 어떤 용도로 쓰이고 있을까.

델파이, 윈도우 프로그램을 빠르게 만드는 비결
먼저, 델파이(Delphi)에 대해 얘기해보자. 한때 알집의 대체재였던 압축·해제 프로그램 ‘빵집’은 국내서 델파이로 만들어진 프로그램의 대표적인 예였다.[4] 필자도 2000년대 초반 만들었던 윈도우 응용프로그램은 전부 델파이로 짰다. 델파이를 썼던 이유는 처음 배운 프로그래밍 언어가 델파이의 시조인 파스칼(Pascal) 언어였기 때문이지만, 델파이에는 VCL(Visual Component Library)이라는 강력한 라이브러리(Library)가 있다는 게 무엇보다 중요했다.

▲ 자료=변규홍 개발자
▲ 자료=변규홍 개발자

라이브러리는 프로그래밍 언어로 코드를 작성할 때 개발자 본인이 직접 만들 필요 없이 다른 개발자가 이미 만든 기능을 그대로 가져다 쓸 수 있도록 정리해 둔 것을 말한다. 필요한 지식이 있을 때 책의 모든 내용을 달달 외우는 게 아니라 도서관에서 책을 빌려 정보를 발췌하는 모습을 생각하면 이해하기 쉽다. 1990년대 후반에서 2000년대 초반까지는 윈도우 응용 프로그램을 만들려면 윈도우 자체에 대한 방대한 지식이 필요했지만, 델파이 언어를 쓰는 사람은 VCL이라는 멋진 도서관 덕분에 시간을 아낄 수 있었다.

지금의 코딩교육 시장에서는 파스칼이나 델파이의 이름을 더 이상 찾아보기 어렵다. 2022년 현재는 비슷한 강점을 갖는 다른 대체재가 많기 때문이다. 그런데도 한국의 델파이 커뮤니티는 2022년 현재도 사용자들의 지식 공유가 비교적 활발하게 이루어지고 있다. 놀라운 일이다.[5] 

리눅스 커널은 여전히 C로 만든다
1972년에 태어난 C 언어는 역사가 꽤 길다. 각종 프로그래밍 언어의 조상뻘이지만, 지금도 ‘현역’으로 IT 인프라를 지탱하고 있다. 문법 최신화도 꾸준히 이뤄지고 있다. C 언어의 표준(문법 등)이 2018년에도 개정됐을 정도다. 델파이에 VCL이 있다면 C 언어에게도 강력한 표준 라이브러리(Standard Library)가 있다. C 언어 코드의 첫 번째 줄에서 흔히 찾아볼 수 있는 ‘#include < stdio.h >’라는 구문의 뜻이 바로 ‘Standard Input / Output Library를 사용하겠다’는 선언이다. 시대가 흐르면서 옛 표준 라이브러리에 있었던 보안 문제를 해결하고, 최신 프로그래밍 언어에 도입된 문법 요소 중 C 언어에도 어렵지 않게 적용할 만한 요소들을 표준화하는 작업 등이 현재진행형으로 이뤄지고 있다.

C 언어가 쓰이는 영역 중 가장 유명한 것은 리눅스(Linux) 운영체제(OS)의 핵심을 구성하는 리눅스 커널(Linux Kernel)이 아닐까 싶다. 커널은 쉽게 말하자면 OS 자체와 OS 위에서 돌아가는 모든 프로그램 사이의 소통을 총괄하는 프로그램이다.[6] 커널 개발자들도 2022년 2월부터 각종 버그를 줄일 방법 가운데 하나로 최신 C 언어 표준을 적용하는 방안을 논의하고 있다.[7] 이외에 사물인터넷(IoT)·임베디드 프로그래밍(Embedded Programming)·펌웨어(Firmware)를 다루는 영역에서도 C 언어가 차지하는 비중은 여전히 높다. 펌웨어는 주로 하드웨어, 즉 기기 그 자체의 제어에 쓰이는 프로그램을 말한다. 아직 열일하는 조상님의 면모다.

▲ 자료=변규홍 개발자
▲ 자료=변규홍 개발자
겉은 파이썬, 속은 C++인 텐서플로
C++ 언어의 이름에는 숨겨진 비밀이 있다. 바로, 이름 자체가 C 언어 코드라는 사실이다. C 언어 문법에서는 변수(값을 저장할 수 있는 공간) 이름 뒤에 ++ 를 적으면 그 변수의 값을 1만큼 증가시킨다. 예를 들어 C라는 변수에 1이라는 숫자가 있었다면, C++ 라는 문장을 실행한 뒤에는 C 라는 변수에 2가 들어있게 된다. C++ 라는 이름은 C 언어와 호환되는 동시에 C 언어에 없던 여러 프로그래밍 패러다임을 추가했다는 것을 뜻한다.

C++ 언어에는 객체 지향 프로그래밍(OOP, Object-Oriented Programming)이라는 패러다임을 표현하기 위한 클래스 프로토콜(Class Protocol), 그리고 방대한 종류의 자료구조(Data Structure)와 알고리즘을 미리 구현해 유연하게 쓸 수 있는 STL(Standard Template Library)이 추가돼 있다. 3년에 한 번씩 국제표준의 개정도 이뤄지고 있다. 만만찮게 노력하는 젊은 조상님이다.

텐서플로(Tensorflow)나 파이토치(PyTorch)등의 머신러닝 라이브러리는 파이썬 언어를 통해 주로 사용되는데, 정작 이들의 핵심적인 부분은 C나 C++ 언어로 작성돼 있다. 필자도 텐서플로의 음성 파일 관련 버그를 살피는 과정에서 C++ 언어로 작성된 부분을 들춰본 적이 있다.[8] 바꿔 말하면, 파이썬 언어에 C++ 언어도 쓰는 개발자는 텐서플로를 단순히 도구로만 사용하는 것을 넘어 고장난 부분도 직접 고칠 수 있다.

신세대 윈도우 프로그래밍·유니티 게임 개발은 C#으로
유니티로 게임을 개발하고 싶다면 C#을 권한다. 윈도우에서 새로운 프로그램을 설치할 때, 이를테면 한컴오피스를 설치할 때 간혹 ‘닷넷 프레임워크’(.NET Framework)를 함께 설치해야 한다는 메시지를 본 기억이 있을 것이다. 최근의 윈도우 응용 프로그램 개발은 MFC 나 Win32 API 기반(전통적으로 윈도우 응용 프로그램을 만들 때 필요했던 도구들)에서 닷넷 기반으로 많이 넘어가고 있는 추세다. 닷넷 프레임워크를 위해 마이크로소프트(MS)에서 새롭게 만든 프로그래밍 언어가 C#이다. 현재도 닷넷 프레임워크의 발전과 함께 C# 언어의 발전이 이어지고 있다. 널리 쓰이는 게임 엔진인 유니티(Unity)의 API도 C# 언어로 돼 있다. 그러니까, 게임 엔진을 직접 만들지 않아도 유니티 사용법과 C# 언어를 익히면 쉽고 빠르게 게임을 만들 수 있다는 말이다.[9]

여기까지 파스칼, 델파이, C, C++, C# 프로그래밍 언어에 대해 아주 간단히 살펴보았다. 단순한 인기나 유행에 따라 언어를 배우기도 하지만 커뮤니티의 활력, 라이브러리의 풍성함, 적용 혹은 표현 가능한 패러다임, 그리고 만들고 싶은 프로그램을 빠르게 구현할 수 있는 도구의 존재도 언어를 배울 땐 중요한 요소다. 다음 풀리퀘에서는 이런 지점이 특히 자바(Java) 계열의 프로그래밍 언어들이나 스크립트 프로그래밍 언어들에 어떤 영향을 줬는지 중점적으로 살펴보고자 한다.[기고|변규홍 스켈터랩스 개발자]

▲ 기고|변규홍 스켈터랩스 개발자
▲ 기고|변규홍 스켈터랩스 개발자
※각주
[1]: https://insights.stackoverflow.com/survey/2021
[2]: 원문: "Which programming, scripting, and markup languages have you done extensive development work in over the past year, and which do you want to work in over the next year? (If you both worked with the language and want to continue to do so, please check both boxes in that row.)"
[3]: https://github.com/BurntSushi/ripgrep
[4]: https://www.bloter.net/newsView/blt201508260003 
[5]: https://www.delmadang.com/ 
[6]: https://www.kernel.org/ 
[7]: https://zdnet.co.kr/view/?no=20220227145019#_enliple
[8]: https://github.com/tensorflow/tensorflow/issues/26247 
[9]: https://unity.com/kr/how-to/programming-unity#if-you-have-c-background

저작권자 © 블로터 무단전재 및 재배포 금지