brunch

You can make anything
by writing

C.S.Lewis

[C++] #3 C++은 왜이리 복잡할까?

들어가는 글: 강의를 듣고 있는데 문득 글을 쓰고 싶어졌다 +.+


아아아아아.. C++은 너무 복잡하다. 


배우면 배울수록 그 복잡성이 늘어만 간다. 누구나 알겠지만 이 모든것은 (성능)과 (개발자가 모든 것을 할 수 있음)을 추구한다. 


문득 C++을 대체한다던 go 언어는 어떤지 궁금해서 인터넷을 찾아봤다. 

출처: https://www.joinc.co.kr/w/man/12/golang/replaceC


결론은 전혀 그렇지 않단다. 그 복잡한 언어는 누구도 대체할 수 없다. 


자바 언어에서는 찾아볼 수 없는 신박한(?) 키워드를 살펴보자. 

1) const 

2) lvalue와 rvalue (value category)

3) template를 사용한 메타 프로그래밍

4) pointer 

5) 연산자 오버로딩 


초급수준만 봐도 이런데.. 중고급 수준은 얼마나 복잡할까.. 그리고 개발 환경에 따라 

1) C++ 11 .. 이제 이건 다 지원하겠지 

2) C++ 14 

3) C++ 17 .. 다행히 내 업무 환경에서는 최근 C++ 17로 상향되었다 ^_^ (넘 좋다..)

4) C++ 20 .. 아직은 먼 얘기  

5) C++ 23 .. 곧 나오겠지.. 


위의 문서를 읽다가 C++의 치명적인 매력을 발견했다. 

1) C++은 하드웨어 가속(GPGPU, 고도로 전문화된 아키텍처)를 활용할 수 있다. 

2) C++은 운영체제를 실행하지 않는 초소형 하드웨어에도 사용 할 수 있다. (즉, 임베디드)


아아아아아아.. 제조업 회사의 SW를 하는 한 앱 개발 부서가 아니면 C++은 피할 수가 없겠구나. 

임베디드와 하드웨어 가속은 너무나도 중요하다. 더구나 운영체제가 없는 상태에서도 된다니.. 


"복잡한 기술은 교육자에게 돈이 된다."

예전에 어떤 교육을 듣다가 강사에게 이런 말을 들은 적이 있다. 그 강사님은 한평생(?) 리눅스 커널만 팠는데 그게 나름의 진입장벽을 형성해서 계속 강의가 들어온다고 했다. 참고로 그 과목은 리눅스 커널 과목이 아니고 안드로이드 관련 과목이었다. 아마 안드로이드 IPC 그런데.. 안드로이드 IPC가 결국 내부적으로 보면 리눅스 IPC를 근간으로 하기 때문에 커널 이해가 높은 강사의 설명은 품격이 있었다. 


위 글에서 읽었던 흥미로운 문장 몇 개 투척한다. 결국 다 똑같은 말이다.


1) 언어 복잡도 

C++: 매우 높음. C++은 C만큼 복잡할 뿐만 아니라 거기에서 멈추지 않는다. 메타프로그래밍, 지나치게 유연한 OOP 모델, 예외, 극도로 많은 오래된 기능과 새로운 기능을 가지고 있다.


2) 성능과 메모리

"C/C++ : 매우 높음. 다만 개발자 기술에 따라서 달라질 수 있다. 좋지 않은 C/C++ 코드는 평범한 Go 코드보다 나빠질 수 있다. 하지만 좋은 C/C++ 코드는 좋은 Go 코드보다 더 빠르다."


아아아아아아.. 복잡한 C++을 오늘도 공부해야 한다. 쩝. 


감사합니다. 

2022.4.24

매거진의 이전글 [Q4] 완료와 다섯번째 목표
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari