제가 모든 언어를 포괄해서 설명하는건 경제적이지 않으니까
일단 제가 한창 작업중인 C++ 위주로 먼저 설명하는게 옳을 것 같습니다.
C++ 언어는 다른 언어에 비해 설명이 많이 필요한 언어기도 하니까요.
C 언어의 발생 시점에서도 그랬지만,
좋은 책이 나오지 않았으면 AT&T 의 역사속에서 묻힐 수 밖에 없는 언어였습니다.
익히 아는분들도 많을 이야기지만, C 언어는 크리스마스 장난처럼 만들어진 언어입니다.
게임을 만들려니 어셈블리가 불편했고, 그래서 PASCAL, B, BCPL 을 베껴 뚝딱 만든게 C 언어,
그 게임이 돌아가도록 운영체제가 필요했고, 그래서 AT&T 에서 말아먹고 있던 프로젝트인 MULTICS 에서
복잡한 부분을 빼서 정리한게 Unix 란 운영체제 입니다.
개발 동기에 대해 여러가지로 희화한 버전이 있지만 이정도로 알아두셔도 됩니다.
컴퓨터의 역사에서 초창기에 만들어진 모든 것들은 사실 그다지 복잡하지 않습니다.
오히려 간결하기 때문에 처음엔 어렵게 여겨질 수 있는 정도지요.
앞서 include 없이 printf 구현하기란 글에서 언급했지만,
C 언어의 문법 그 자체는 램 말고는 하드웨어를 건드릴 수 있는 여지가 없습니다.
따라서, 표준 라이브러리를 통해 운영체제가 제공해주는 API ( Application Programming Interface ) 를 사용해야만
화면에 무언가를 찍을 수 있고, 키보드나 마우스로 부터 무언가를 입력받을 수 있습니다.
더 더 lowlevel 로 내려가서 본인이 직접 구현할 수 있습니다.
BIOS 를 직접 제어하든, 심지어 CPU를 직접 설계할 수도 있죠. ( FPGA 같은걸 통해서 손쉽고 저렴하게 )
하지만 그게 실용적인 목적을 가지고 있지 않다면 지속하기는 힘든 작업이겠죠?
API 는 운영체제를 개발하는 개발사에서 만들고 손보게 됩니다.
표준 라이브러리는 컴파일러를 개발하는 개발툴 제작사에서 만들고 손보게 됩니다.
그 말은, 새로운 하드웨어가 등장하고 스펙이 변화되면, 그 변화를 다른사람들이 책임지고 손봐서 적용해 준다는 이야기죠.
그래서 바퀴를 재발명 하지말라는 이야기가 있습니다.
가끔은 바퀴를 리뉴얼 할 필요가 있긴 하지만요 :)
즉, 본인이 하드웨어의 변경점 마다 모든걸 다시 개발할 의지가 없다면, 있는걸 잘 써주는게 필요합니다.
있는게 자기의 요구사항을 충족시켜 줄 경우 말이죠.
그래서 API와 표준 라이브러리는 잘 알고 써먹을 수 있으면 좋은 것입니다.
그러면 STL 은 왜 배워야 할까요?
이것도 표준 라이브러리기 때문입니다.
초창기 STL은 아주 열악한 성능과 버그에 의해서 응용개발자들의 큰 호응을 끌어낼 수 없었습니다.
지금은 다른 개발 도구들의 성능이 좋아지면서, 좀 더 품질 좋은 컴파일러를 만들어낼 수 있게 되었고,
상호 상승작용을 거쳐 꽤 쓸만한 라이브러리로 바뀌었죠.
STL 이 없는 C/C++ 언어는 알고리즘에 관해 거의 문외한 수준이어서
qsort 나 binary_search 를 들들 볶아
자기 용도에 맞게 바꾸는 작업이 꽤 불편하고,
한 가지 타입에 종속적이어서 매 프로젝트마다 새롭게 구현해 줘야 하는 경우가 많았거든요.
template 라는걸 통해서 한 가지 타입에 특정되지 않고, 여러 타입에 일반적인 문법을 사용할 수 있게 된데다,
STL 을 통해서 타입 / 컨테이너 / 알고리즘을 분리시켜 하나씩만 구현해도 여러 조합의 경우를 포괄할 수 있는
언어가 된거죠.
지금의 C++ 언어는 언어 자체를 변경하는 부분의 부담을 덜기위해
STL 을 통해 확장하는 형식으로 발전하고 있습니다.
그래서 STL을 배워야 하는 것이죠.
글은 못썼는데 내용이 좋네. 흙더미에서 진주찾는 기분임.
댓글 없이 조용히 추천만 ㅋㅋ
어 댓글이다.
고양아 란 갤러가 쓰는 글들도 흙더미 진주 같은 글.
꿀팁 ㄱㅅㄱㅅ
아둔이 링크 감사~ 초보자들한텐 꽤 도움이 되는 책인데, 작가가 책을 꼼꼼히 쓰는 타입이 아니라 좀 부실함. 잘못된 표현도 좀 나옴.
책 추천 잘 못하는거 알잖아. ㅋㅋ 난 그냥 맥 사용자라서리 Dash 로 STL 매뉴얼 읽는 정도?
Dash 란 앱이 참 좋은데 ㅋㅋ 맥 개발자의 꽃 같은거지.
stl관련글 보일때마다 무겁다 등등 별로라고 그러더니 다 옛날말인가여
ㅇㅇ 요즘은 신세경임요.
솔까말 옛날엔 이터레이터 하나만 써도 코드가 더러워지는걸 어쩔수가 없었는데 C++ 에 auto 키워드가 들어오면서 싹 정리되어 버렸죠.
ranged for 도 한 몫 하구용~
c++도 새로 생기는게 넘나 많은것...
문법적으론 아주 조금씩 확장되는데 STL 은 쑥쑥 확장되고 있음. 막혔던 부분만 언어 문법적으로 조금씩 풀어주면 급팽창!
ranged for 너무 편함 - return 0;
글을 어떻게하면 쉽게 이해시킬수있을까로 고뇌하신게 느껴지는듯 배우고갑니당
응? 걍 아무생각 없이 썼시유.
아래 글에 이어 걍 연타로 써갈긴거라 글에 재주부린건 없음유 ㅋㅋ