C & C++/디딤돌 C언어

Part1. C언어 소개

언휴 2024. 1. 9. 08:46

 

 C언어 - C언어 소개 [유튜브 동영상 강의]

1. 들어가기에 앞서

아래 동영상 강의는 예전에 만든 동영상 강의입니다.

이 책은 컴퓨터 프로그래머를 꿈꾸는 이들을 위해 만들었어요.
컴퓨터 프로그래머가 하는 작업 중에 가장 기본은 원하는 작업을 컴퓨터가 수행할 수 있게 논리를 전개하는 것이죠.
그리고 컴퓨터가 수행할 수 있는 프로그램을 작성하기 위해 프로그래밍 언어와 개발 도구를 이용하는 것입니다.

많은 이들은 컴퓨터 프로그래밍을 학습하는 것은 책을 보고 머리로 이해하는 것이라 생각하는 것 같아요.
하지만 실제 컴퓨터 프로그래밍을 효과적으로 학습하려면 머리를 이용하는 것 외에도 자신의 논리를 종이에 적고 그림을 그리고 자료를 검색하고 아는 이들에게 물어보는 등의 사용할 수 있는 모든 자원을 활용하는 것이 좋습니다.

사실 머리만 쓰는 것은 매우 소극적이며 효율이 떨어지는 프로그래밍 학습이예요.
손과 종이 , 펜, 책, 인터넷, 강사, 주변 사람 등의 사용할 수 있는 모든 것을 모두 사용해야 합니다.
자신의 논리가 맞는지 적극적으로 확인하고 헝클어진 논리를 풀어나가기 위해서는 책과 머리만 사용하는 것은 효율이 떨어져요.

머리로 이해가 가지 않는 것도 자신있게 개발 도구를 통해 표현해 보면서 경험을 늘리는 것이 좋은 방법이죠.
프로그래밍은 머리로 이해하는 것도 중요하지만 몸으로 익히는 것이 더 중요합니다.

이 책은 C언어를 다루고 있습니다.
여러분께서는 C언어의 문법을 파악하는 것도 중요하지만 개발 도구를 통해 실제 구현하여 경험을 쌓으세요.
실제 몸으로 익혀야 실제 프로그래밍 능력을 키울 수 있습니다.

이 책의 내용과 더불어 다양한 경험을 통해 컴퓨터 프로그래머를 꿈꾸는 많은 이들에게 도움이 되길 기원합니다.

2. 컴퓨터 프로그램

컴퓨터 프로그램은 소프트웨어(Software)라고 부르죠.
그리고 키보드나 모니터처럼 소프트웨어가 동작하기 위한 물체를 하드웨어라고 불러요.
컴퓨터 하드웨어에는 모니터나 키보드, 마우스, 메모리 장치와 실제 연산을 수행하는 CPU등이 있어요.

실제 컴퓨터 하드웨어는 전기 흐름에 의해 동작하죠.
컴퓨터 프로그램은 컴퓨터 내부 전기의 흐름에 따라 해야 할 일을 정한 논리 집합이예요.

전산(컴퓨터와 프로그램을 다루는 분야)에서는 전기가 흐르는 정도에 따라서 0과 1로 구분하고 있어요.
이러한 이유로 컴퓨터 프로그램은 0과 1로 구성한 논리 집합이며 이진 코드라고 부르고 있죠.
또한 ‘컴퓨터를 동작하게 하는 코드’라는 의미로 기계어 코드라고도 불러요.

컴퓨터 프로그램에는 메모장, 그림판, 게임처럼 사용자가 사용하는 응용 프로그램만 있는 것이 아니예요.
컴퓨터 시스템을 운영하는 프로그램인 운영체제와 하드웨어를 제어하는 디바이스 드라이버 등도 컴퓨터 프로그램이예요.

컴퓨터 프로그램을 만들기 위해서는 컴퓨터가 해야 할 일을 정의하는 도구가 있어야겠죠.
이 때 사용하는 언어를 프로그래밍 언어라고 불러요.
그리고 작성할 프로그램의 종류와 목적에 따라 사용하는 프로그래밍 언어는 다양합니다.

그리고 프로그래밍 언어의 문법을 이용하여 개발하기 쉽게 개발 도구도 제공하고 있어요.
개발 도구에서는 개발자가 코드를 편집하면 이를 컴퓨터가 동작 가능한 이진 파일로 만들어 줘요.
이처럼 프로그래밍 언어 문법으로 작성한 코드를 이진 파일로 만드는 것을 컴파일이라 불러요.
그리고 개발 도구에서는 컴파일한 이진 코드들을 하나의 결과물로 만드는 링킹도 해 줍니다.
이 외에도 개발자가 논리적으로 잘못 작성한 부분을 고칠 수 있게 디버깅 등의 다양한 기능을 제공합니다.

이처럼 컴퓨터 프로그램은 편집(코딩) => 컴파일 => 링킹 => 디버깅 등의 과정을 거쳐 만들어집니다.
이 중에 개발자는 편집과 디버깅 등의 작업을 담당하고 컴파일과 링킹 등은 개발 도구에서 하는 일이예요.

3. 프로그래밍 언어 역사

컴퓨터 프로그램은 컴퓨터 프로그래밍 언어로 만들어지죠.
앞으로 이 책에서는 컴퓨터 프로그래밍 언어를 프로그래밍 언어라 부를게요.

프로그래밍 언어는 1800년대 후반에 미국의 홀라리스가 기차표를 개찰하는 것에서 착안하였습니다.
홀라리스는 카드에 규칙에 맞게 구멍을 뚫어 천공 카드를 만들었어요.
이를 이용하여 정보를 0과 1로 부호화를 한 것이죠.

최초의 컴퓨터로 알려진 애니악은 1943년에 개발을 시작하여 1946년에 만들어져 10년간 활용하였어요.
하지만 이미 아타나소프 회사에서 1937년에 개발을 시작하여 1942년에 만들어진 ABC(아타나소프 베리 컴퓨터)가 있었요.
결국 소송을 통해 최초의 컴퓨터로 인정받았죠.
하지만 여전히 많은 사람들은 여전히 애니악이 최초의 컴퓨터라고 알고 있어요.

1950년대에 들어서면서 컴퓨터 기계어 명령과 1:1 대응하는 표현을 약속한 어셈블리어가 만들어집니다.
그리고 보다 사람이 사용하는 언어 체계와 비슷한 포트란과 코볼 등의 고급 언어가 만들어지요.

1969년에는 Bell연구소에서 유닉스에서 동작하는 고급 언어를 만들기 시작하였고 B언어라 정했어요.
B언어를 만든 데니스 리치는 B언어에 자료형을 추가한 New B언어를 만들었어요.
그리고 1972년과 1973년에 이를 개선한 C언어가 만들어졌어요.
이러한 C언어는 1983년 표준화 과정을 통해 ANSI C 표준이 만들어지고 시대 에 맞게 발전한 표준화 작업을 계속하고 있죠.

프로그램 언어의 발전은 정보화 사회가 만들어지는데 큰 공헌을 했어요.
그리고 보다 효과적으로 개발할 수 있는 언어들이 탄생하고 있는 중이예요.
특히 지금은 형식 내부에 데이터와 기능을 정의하여 신뢰성이 강하고 안전한 구조의 개체지향 프로그래밍 언어(객체지향 프로그래밍 언어라고도 부름, OOP, Obejct Oriented Programming Language)들이 나왔죠.
특히 C언어를 기반으로 만들어진 C++, Java, C#은 대표적인 프로그래밍 언어예요.
이러한 OOP언어들은 거대한 IT 비지니스 시장을 형성하는데 기여했어요.
지금도 프로그래밍 언어는 계속 만들어지고 발전하고 있으며 사용하지 않아 사라지는 언어도 많이 있답니다.

4. C언어 표준

1969년 Bell 연구에서는 서버 시스템을 운영하는 UNIX에서 동작하는 B언어를 만들기 시작했어요.
참고) 서버는 다른 컴퓨터 프로그램에게 서비스를 제공하는 프로그램이나 시스템을 말해요.
그리고 이를 발전시켜 1972년에 C언어가 탄생하였죠.

1983년에는 미국 국가 표준 협회인 ANSI에서 ANSI C표준을 출간합니다.
이 후에 미국 뿐만 아니라 많은 나라의 프로그래머들이 C언어를 사용하는 언어로 발전했어요.
1999년에 국제 표준 기구인 ISO에서는 ISO/IEC 9899:1999

를 출간하여 자신의 나라의 문자를 사용할 수 있게 했어요.
2005년도에는 ANSI에서도 이를 표준으로 채택하였으며 C99라고 부르고 있어요.
2011년도에는 버그가 발생할 수 있는 함수들을 개선하여 ISO/IEC 9989:2011을 출간했어요.
이를 C11 표준이라 부릅니다.

C언어는 효과적으로 프로그램 코드를 작성할 수 있게 다양한 데이터 형식과 연산을 제공하고 있어요.
특히 메모리 장치와 H/W를 표현하고 제어할 수 있게 포인터라는 자료 형식을 제공하여 시스템 프로그래밍에 적합한 언어예요.
뿐만 아니라 개발자는 프로그램에 필요한 형식을 정의하여 사용할 수 있어요.
그리고 자주 사용하는 논리를 함수로 정의하여 필요할 때 호출할 수 있습니다.

이처럼 C언어는 하드웨어를 제어할 수 있는 저수준 언어의 특징과 형식과 변수, 함수 등의 고수준 언어의 문법을 갖고 있어요.
저수준 언어란 컴퓨터 기계어 명령어 가까운 언어를 말합니다.
그리고 사람의 언어와 비슷한 특징을 갖는 언어를 고수준 언어라 불러요.

이러한 특징을 갖고 있는 C언어는 다양한 분야에서 사용하고 있죠.
지금의 C++, Java, C# 등도 모두 C언어에서 발전한 언어죠.

언어의 종류
언어의 종류

5. C언어 문법 요소

프로그래밍 언어의 문법에는 데이터를 표현하는 문법과 해야 할 일을 표현하는 문법이 있어요.
C언어는 이러한 문법과 매크로 문법을 제공하고 있죠.

 

데이터를 표현하기 위한 문법에는 형식과 변수가 있어요.
컴퓨터의 메모리는 데이터를 기억하는 장치예요.
그리고 컴퓨터 메모리의 최소 단위인 비트는 0과 1을 표현할 수 있죠.
프로그램에서는 메모리의 주소를 부여하는데 8비트인 바이트 단위로 부여한답니다.

그런데 컴퓨터 메모리는 무한 자원이 아니예요.
유한 자원인 메모리에 모든 데이터를 기억하는 것은 불가능하겠죠.
이러한 이유로 프로그래밍 언어에서는 표현할 데이터의 종류와 표현 범위를 정해요.
이렇게 약속한 것을 형식(Type)이라 부르죠.
실제 데이터를 기억하기 위해 메모리를 할당받고 원하는 값을 쓰거나 얻기 위해 변수(Variable)를 사용해요.

 

프로그램이 해야 할 일을 표현하는 문법에는 연산, 제어, 함수 등의 문법이 있어요.
더하기나 빼기 등의 자주 사용하는 구문을 연산 기호로 사용할 수 있게 연산을 제공하고 있어요.
그리고 프로그램을 논리적으로 제어할 수 있게 조건문, 반복문, 선택문 등을 제공하죠.
조건문은 조건에 따라 수행할 코드를 결정하는 구문이예요.
조건이 만족하면 반복해서 코드를 수행할 수 있는 구문은 반복문을 사용하죠.
특정 변수의 값에 따라 수행할 코드를 선택하여 수행하는 선택문도 있어요.
그리고 개발자가 특정 기능을 수행하는 코드를 함수로 작성하여 필요할 때 호출하여 사용할 수 있어요.

이 외에 개발자가 작성한 코드를 미리 약속한 코드로 만들어주는 매크로 문법이 있답니다.