In Defense of C++

요약 : C++는 아직도 현역이다. 최신 라이브러리가 그렇게 만들어준다. C++도 안전성을 확보할 수 있다. 복잡해진다면 간단하게 짤 수도 있다. 저자는 가능한 C처럼 보이게 만들고, 필요할때 복잡성을 취사선택하여 사용한다.

C++의 평판

C++는 복잡성, 가파른 학습 곡선, 그리고 무엇보다도 개발자들이 발등을 쏘는 것뿐만 아니라 다리 전체를 날려버릴 수 있게 하는 능력으로 인해 자주 비판받아왔다. 하지만 이러한 비판들이 면밀한 검토를 견딜 수 있을까? 이 블로그 포스트에서는 C++에 대한 가장 일반적인 비판들을 다루고 그 장단점에 대한 균형 잡힌 관점을 제공하려고 한다.

C++는 "복잡하다"

C++는 실제로 방대한 기능과 능력을 갖춘 복잡한 언어다. C++에서 달성하고자 하는 어떤 것이든, 각각 고유한 트레이드오프와 함의를 가진 약 12가지 다른 방법이 있다. 그렇다면 개발자로서 특정 사용 사례에 가장 적합한 접근 방식이 무엇인지 어떻게 알 수 있을까? 분명히 이러한 결정을 내리려면 언어에 대한 깊은 이해가 있어야 하지 않을까? 실제로는 그렇지 않다...

오해하지 말기 바란다. 도움이 되는 것은 맞지만 필수 요구사항은 아니다. 성급한 최적화는 모든 악의 근원이며, C++에서는 언어의 더 복잡한 기능들을 걱정할 필요 없이 완벽하게 괜찮은 코드를 작성할 수 있다. 템플릿, 연산자 오버로딩, 또는 언어의 다른 고급 기능들을 사용하지 않고도 C++에서 간단하고 읽기 쉬우며 유지보수 가능한 코드를 작성할 수 있다.

모든 프로그래밍 언어에서 하고 싶은 모든 것에 대해 가능한 한 가장 효율적이고 올바른 접근 방식을 사용해야 한다는 생각이 있다. Python에는 파이썬다운 방식이 있고, Java에도 있고, C#에도 있고, Go에도 있다. 심지어 브라우저에 HTML을 그리는 것과 같은 간단한 일도 몇 년마다 재발명되고 끝없이 논쟁거리가 된다. 하지만 여기서 중요한 것은 대부분의 경우 무언가를 하는 하나의 올바른 방법은 없다는 것이다. 신성한 "최고의 접근법"은 종종 개인이나 팀의 선호도 문제일 뿐이다. 코드를 "최고"이고 올바른 방식으로 작성하기만 하면 유지보수에 대해 걱정할 필요가 없다는 생각은 완전히 틀렸다.

"최고의" 접근법을 사용하는 것에 대해 너무 걱정하지 말고, 읽고 이해하기 쉬운 코드를 작성하는 것에 더 집중하라. 그렇게 하면 괜찮을 것이다.

C++는 "구식이다"

C++는 매우 오래되었다. 실제로 1985년에 나왔는데, 이를 관점으로 보면 Windows의 첫 번째 버전이 출시되기 4년 전이고, Linux의 첫 번째 버전이 나오기 6년 전이며, 더 나아가 마지막 8비트 컴퓨터가 출시되던 시절이다. 그래서 어떤 기준으로 보든 C++는 꽤 오래되었다. 하지만 그것이 구식이라는 뜻일까?

절대 아니다.

C++가 1985년 릴리스 이후로 변경 없이 그냥 있었던 것은 아니다. C++는 40년 넘게 활발히 개발되고 개선되어 왔으며, 새로운 기능과 능력이 계속 추가되고 있다. C++ 표준의 가장 최근 버전인 C++20은 2020년에 출시되었고 언어에 여러 새로운 기능과 개선사항을 도입했다. C++23은 특히 표준 라이브러리와 constexpr 능력에서 상당한 향상을 도입했다. 특히 concepts, ranges, 그리고 coroutines가 확장되어 C++에 현대적인 프로그래밍 패러다임을 가져왔고 언어를 그 어느 때보다 강력하고 표현력 있게 만들었다.

하지만 Dave, 우리가 구식이라고 할 때는 다른 언어들이 C++를 앞서서 더 나은 개발자 경험을 제공한다는 뜻이다.

개인적인 취향의 문제인 것 같다. C++는 여전히 거대한 라이브러리와 도구 생태계를 가진 가장 널리 사용되는 프로그래밍 언어 중 하나다. 게임 개발부터 고성능 컴퓨팅, 임베디드 시스템까지 광범위한 애플리케이션에 사용된다. 세계에서 가장 인기 있고 널리 사용되는 소프트웨어 애플리케이션들 중 많은 것들이 C++로 작성되었다.

C++가 구식이라고 생각하지 않는다. 그런 주장을 하려면 구식의 정의를 상당히 비틀어야 한다.

C++는 "안전하지 않다"

아, 마침내 중요한 것에 도달했다. 그리고 많은 사람들이 C++를 대체해야 한다고 주장하는 "메모리 안전한" 언어인 Rust와 비교할 것이다.

사실, 지금 당장 주요 논점을 정리해보자.