C언어의 역사와 특징
C언어가 어디에 사용되는 도구인지는 지난 포스팅을 통해 이해할 수 있었습니다. 혹시 C언어가 무엇인지, 프로그래밍 언어에 대한 개념이 아직 정리가 안되셨다면 아래 포스팅을 먼저 참고하신 후 다시 본 글을 읽어나가시길 바랍니다.
C언어에 대한 이해
당장 무엇인가를 만들어내겠다는 욕구는 잠시 접어두고, 아주 기본적인 이야기부터 시작해보도록 하겟습니다. C 언어에 대한 일반적인 이야기들은 프로그래밍 전반에 대한 이해에 많은 도움이
comoble.tistory.com
본 글에서는 C언어를 이해하는데 도움이 되는 C언어의 역사에 대해서 간략하게 알아보고자 합니다.
C언어만 단편적으로 떼어놓고 보면, 이 언어는 1971년 UNIX라는 운영체제의 개발을 위해 Dennis Ritchie와 Ken Thompson이 함께 설계한 범용 고급언어(high-level language)입니다.
하지만 C 언어 등장의 배경을 살펴보면 훨씬 이전부터 이미 C언어의 등장을 예측할 수 있었는데요, 그 이유는 C언어가 바로 B언어 이후에 등장했기 때문입니다.
프로그래밍 언어의 역사를 살펴보면, 1960년 ALGOL 60을 시작으로 1963년에는 CPL, 1969년에는 BCPL, 그리고 1970년에 이르러 B언어가 차례로 개발되었고, 이 후에 탄생한 것이 C언어인 것입니다.
역사를 되돌아보면, 왜 C언어의 이름이 C언어인지 단번에 이해할 수 있습니다.
저급언어와 고급언어
위에서 고급언어라는 말이 생소하실 수 있는데요, 이를 이해하기 위해 기존의 UNIX라는 운영체제를 살펴보면 해당 운영체제는 어셈블리(assembly)어라는 저급언어(low-level language)로 만들어졌었습니다.
여기서 '저급언어'와 '고급언어'의 구분 기준은 컴퓨터가 이해하기 쉬운 언어냐, 또는 사람이 이해하기 쉬운 언어냐에 따른 것입니다.
즉, 고급언어에 가까울수록 사람이 이해하기 쉬운 언어가 되고, 저급언어에 가까울수록 사람보다는 컴퓨터가 이해하기 쉬운 언어라고 이해할 수 있습니다.
저급언어 및 고급언어 각각이 지니는 장단점도 다르기 때문에, 무조건 고급언어가 저급언어보다 좋다고 판단하는 것은 무리가 있습니다.
따라서 저급언어 고급언어가 언어자체의 퀄리티를 지칭한다기 보다는, 언어의 레벨을 의도적으로 구분하고자 붙인 이름이므로, 저급언어 자체가 컴퓨터 기능에 문제를 일으키는 것은 아닙니다.
하지만 저급언어의 경우 컴퓨터를 구성하는 하드웨어에 상대적으로 의존도가 높다는 치명적인 단점을 가지고 있는데요, 이 의존성에 대해 예를 들어 이해해보면, 저급언어는 CPU의 종류가 바뀌면 그에 따라 프로그램을 또 다시 작성해야 합니다.
더 쉬운 예를 들어보자면, 인텔 CPU 기반 PC를 위해 저급언어로 프로그래밍 된 소프트웨어는 AMD 기반의 컴퓨터에서는 동작하지 않는다는 것입니다.
따라서 저급언어의 경우 동일한 기능의 소프트웨어라도 CPU 종류에 따라 새로 개발을 해야한다는 치명적이 단점이 존재합니다.
이같은 저급 언어의 제약 사항을 개선하기 위해서 어셈블리어의 저급언어적인 특징을 지니면서도 하드웨어 의존도가 낮고, 상대적으로 사람이 배우기에도 쉬운 언어개발을 목적으로 탄생한 것이 바로 C언어입니다.
결과적으로, C언어의 개발로 인해서 UNIX 운영체재의 90% 이상이 C언어로 대체되면서 업계에서는 폭발적인 인기를 얻었고, 이를 시작으로 C언어의 시대가 시작되었다고 볼 수 있습니다.
C언어의장점
프로그래밍 언어의 역사를 쭉 살펴보면, 우리가 잘 알지못하는 생각보다 많은 언어들이 소리소문 없이 사라져왔다는 것을 알 수 있습니다.
특히 요즘은 언어의 성격이 객체지향언어가 아니라면 업계에서 서서히 조금씩 잊혀지고 있는 경향을 보입니다.
그럼에도 불구하고 객체지향과는 거리가 먼 C라는 프로그래밍 언어는 그 인기가 여전한데요, 그 이유가 무었인지단 몇 줄로 정리할 수 있는 내용은 아니지만 본 포스팅에서는 3가지 장점위주로 간략히 정리해보고자 합니다.
절차지향언어
여기서 말하는 절차지향언어라는 것은 언어 자체가 정해진 순서의 실행흐름을 중시한다는 의미입니다. 즉, 절차지향 프로그래밍에서 중심이 되는 것은 바로 언어가 실행되는 '순서'입니다.
이러한 절차지향언어를 배우는 것은 상대적으로 다른 언어에 비해 쉽다고 알려져있는데요, 그 이유는 무엇일까요.
사람들은 일반적으로 다음과 같은 방식으로 생각을 합니다.
"아침에 일어나면 먼저 세수를 하고, 그 다음엔 식사를 해야 해. 그리고 나서 옷을 갈아입고 출근을 하 는 거야. 회사에 도착해서는 먼저 수신된 메일을 확인해야지."
이처럼 사람은 보통 본인이 하루 중, 또는 특정 업무를 수행하는 중 해야할 일의 순서를 정하고 행동하게 됩니다.
절차지향 언어의 경우 이러한 사람의 습성과 매우 닮았는데요 즉, 절차지향언어를 작성하는 방법이 이러한 사람의 일반적인 생각방식과 동일하다는 것입니다.
따라서 C언어를 처음 접하는 사람도 조금만 공부하면 본인의 생각을 단지 동일한 순서로 절차를 만들듯 작성하면 되므로 쉽게 익숙해질 수 있는 것입니다.
낮은 하드웨어 의존도, 높은 이식성
앞서 저급언어와 고급언어 부분에서도 말씀드린 것과 같이, C언어로 작성된 프로그램은 CPU의 종류에 상관없이 실행이 가능합니다.
이 부분은 개발자 입장에서는 매우 대단한 혁신인데요, 단순 계산을 해보아도, 인텔과 AMD CPU에 따라 각각 개발을 할 때보다, 개발에 필요한 노력을 반으로 줄일 수 있을 뿐더러, 개발한 프로그램의 유지보수 및 운영 또한 간단해집니다.
개발자가 아닌 프로그램을 판매하는 기업 입장에서도 이는 바로 원가절감과 직결되는 이슈이며, 서비스 제공에 드는 인적 자원을 최소화할 수 있다는 점에서 굉장한 이점으로 작용합니다.
뛰어난 프로그램 성능
마지막 장점은 절대적인것은 아닙니다. 왜냐하면 프로그램의 성능이라는 것은 같은 기능의 프로그램이라도 개발자의 숙련도에 따라 달라질 수 있기 때문입니다.
즉 어떤 방식으로 프로그래밍을 했는가가 어떤 프로그래밍 언어로 개발을 했는가 보다 프로그램의 성능에 미치는 영향이 더 크다는 것입니다.
하지만 기본적으로 C언어는 성능에 민감한 소프트웨어의 개발에 주로 사용되는데요, 그 이유는 C언어가 상대적으로 다른 언어에 비해 사용하는 메모리의 양이 적으며, 속도를 저하시키는 요소 들을 최소화한 언어이기 때문이다.
이같은 특징은 최근의 객체지향 프로그램들과 달리, 절차지향이기 때문에 나타나는 특징이기도 한데요, 객체를 생성해서 모두 변수에 담아 사용하는 것보다 절차에 따라 진행되는 프로그래밍이 가능하기 때문인 것으로 이해할 수 있습니다.
이같은 장점과 달리 C언어의 단점도 존재하는데요, 가장 크리티컬 한 단점은 바로 언어 자체가 저급언어의 특징을 함께 지니고 있기 때문에, 다른 고급언어에 비해 더 주의해서 사용해야 한다는 점입니다.
함께 보면 좋은 글
코딩이란
코딩이란 최근 코딩에 대한 관심이 무척 높습니다. 아이들은 이미 정규 교육과정 중에 코딩을 접하고 있으며, 자녀를 둔 학부모 입장에서는 아이들이 배우는 코딩에 대해 자연히 관심을 가질
comoble.tistory.com
지금 꼭 파이썬(python)을 시작해야하는 이유
일상에서 파이썬 코딩이 필요할까 업무의 자동화는 매우 매력적인 분야인 것 같습니다. 사실 직군이 사무직인 분들은 수년~수십년간 다뤄오신 엑셀에서 매크로까지 사용하시면서 능수능란하게
comoble.tistory.com
구글 플러터 통합개발환경(IDE)란
통합개발환경(IDE) 통합개발환경(IDE : Integrated Development Environment)에 대해 개발자분들을 제외하면 잘 알지 못하는 것이 사실입니다. 지난 글에서 구글 플러터(Flutter)로 어플개발을 시작해야 하는
comoble.tistory.com