본문 바로가기
CS/C

쉽게 풀어쓴 C 언어 EXPRESS 개정 3판 챕터1. 프로그래밍의 개념

by 대니스 2025. 4. 2.

1.1 프로그래밍이란?

명령어

정의 : 프로세서가 수행할 수 있는 하나의 연산을 의미

예시 : 산술 연산이나 데이터 이동 등

컴퓨터

정의 : 명령어들의 리스트에 따라 데이터를 처리하는 기계

특징 : 컴퓨터 프로그래머가 설계한 대로만 동작한다

장점 :

- 작업을 굉장히 빠르게 하고 정확하게 하며 몇 번을 반복해서 시켜도 불평이 없다

- 한번 만들어진 작업 지시서 즉 프로그램을 하드디스크에 저장될 수 있고 이것을 다시 실행시키면 똑같은 작업이 실행될 수 있다.

프로그램

정의 : 특정한 작업을 수행하도록 설계된 명령어들의 리스트

예시 : 앱(Application)

특징 : 한번 만들어진 작업 지시서로 하드디시크에 저장될 수 있고 이것을 다시 실행시키면 똑같은 작업을 실행될 수 있다.

해석 기관

정의 : 프로그램이 가능한 최초의 기계. 18세기에 '컴퓨터의 아버지'로 불리는 찰스 배비지가 설계했다

의의 : 현대 디지털 컴퓨터의 기초적인 하드웨어와 소프트웨어의 원리가 구현되어 있다

네 가지 핵심적인 부품 : 중앙처리장치(계산을 담당), 메모리(중간 단계에서 임시적으로 숫자를 저장), 출력장치(출력 숫자를 나타내는 다이얼), 입력 장치(천공 카드)

에니악

정의 :10진법을 사용해서 계산을 하는 최초의 전자식 컴퓨터

목적 : 1943년 탄도 궤적을 계산할 목적

부품 : 18000개의 진공관과 6000여 개의 스위치

프로그램 내장 구조(폰 노이만 구조)

정의 : 프로그램을 메모리에 저장하는 방식

역사 : 1945년에 발표된 논문에서 최초로 기술

개선 : 에니악은 프로그램을 변경할 때 많은 스위치들을 처음부터 다시 바꿔야하는데 그 결점을 개선하여 훨씬 유연하고 깔끔하게 설계할 수 있게 되었다. 그래서 프로그램을 데이터처럼 취급하였다

특징

1. 프로그램과 데이터가 모두 메인 메모리에 저장되었다

2. 메인 메모리에 저장된 프로그램에서 2진수로 되어 있는 명령어들을 순차적으로 가져와서 실행한다

에드박

정의 : 최초의 실용적인 프로그램 내장 방식의 컴퓨터로 1948년에 제작되었다

특징 : 최초로 메모리를 가지고 있었고 이 메모리 안에 프로그램을 내장하여 수행하였다.

구조 : 0과 1의 이진 숫자들로 구성된 기계어를 사용하였다

프로그래머

정의 : 프로그램을 전문적으로 작성하는 사람

역사 : 프로그램을 최초로 만든 사람은 에이다 러브레이스이다. 천공 카드로 명령을 받아서 해석 기관에서 다양한 계산을 수행하는 프로그래밍의 개념을 만들었다. 또한 서브루틴, 루프, 점프 등의 핵심적인 컴퓨터 프로그래밍 기본 원리를 고안하였다

 

1.2 프로그래밍 언어

컴파일러

특징 : 인간이 프로그래밍 언어를 배워서 프로그램을 작성하면 컴파일러가 프로그램을 기계어로 바꾸어준다.



프로그래밍 언어의 분류

기계어

정의 : 컴퓨터가 바로 이해할 수 있는 단 하나의 언어

특징 :

- 2진수 형태의 언어

- 컴퓨터가 바로 알아듣는 언어는 0과 1로 구성되어있는 2진수이다. 0이면 회로를 끄고 1이면 회로를 켠다.

- 전처리와 컴파일 단계를 거치면 결국은 기계어가 된다

- 특정 컴퓨터의 명령어(instruction)를 2진수로 표시한 것이며 컴퓨터 하드웨어를 설계할 때 결정된다

- 하드웨어에 따라 다라지기 때문에 철저히 하드웨어에 종속된다.

어셈블리 언어

정의 : 어셈블러(assembler)라는 프로그램이 기호를 2진수로 변환한다

특징 :

- 프로그래머들이 개발을하게 되었고 CPU의 명령어들을 기호(symbolic name)로 표기할 수 있었다.

- 기계어보다는 더 높은 수준에서 프로그램을 작성하는 것을 가능하게 하였다.

- 기호 이름과 CPU의 명령어가 일대일 대응되고 컴퓨터의 CPU가 달라지면 실행이 불가능하기 때문에 저급 언어(low level language)라고 불린다.

고급 언어

정의 : 더 높은 수준에서 작업을 할 수 있는 언어를 고급언어라고 부른다

특징 :

- 고급 언어에서의 연산들은 특정한 컴퓨터의 명령어 집합보다는 훨씬 고수준이다

- 컴퓨터의 구조나 프로세서에 무관하게, 독립적으로 프로그램을 작성할 수 있다

장점 :

- 프로그램을 작성하기 쉽다

- 작성된 프로그램을 이해하고 유지보수하기가 쉽다

 

컴파일러

정의 : 고급 언어의 문장들을 컴퓨터가 이해할 수 있는 기계어로 바꾸는 프로그램

 

고급 언어의 종류

- 다양한 용도에 맞는 여러 가지 언어들이 만들어진다

- 어떤 프로그래밍 언어가 가장 작업을 효과적으로 간단하게 기술할 수 있느냐이다

- ex) FORTRAN, COBOL, Python, C, C++ 등

 

1.3 C언어의 소개

C언어의 역사

- C언어는 1969년과 1973년에 걸쳐서 AT&T의 벨 연구소에서 데니스 리츠에 의하여 탄생하였다

- "Space Travel"이라고 하는 게임을 하기 위해서 UNIX 운영 체제를 위한 언어로 만들어졌다.

- 1973년에 어셈블리 언어로 작성된 PDP-11의 UNIX 커널을 C언어로 다시 작성한다.

 

C언어의 특징

장점:

C언어는 간결한 언어이다

C언어는 효율적인 언어이다

- C로 작성된 프로그램의 크기가 작으며 실행 속도가 빠르고 메모리를 효과적으로 사용한다

- 거의 어셈블리 언어 수준의 효율성을 자랑한다 (그래서 상업용 프로그램 작성할 때 큰 장점이 된다.)

C언어는 저수준의 프로그래밍도 가능하고 고수준의 프로그래밍도 가능하다

- C언어는 운영 체제를 만들었던 언어이니 만큼, 어셈블리 언어만큼의 구체적인 하드웨어 제어가 가능하다.

- 임베디드(내장) 프로그램은 대부분 C언어로 개발된다

- C언어는 모듈 단위의 프로그램 작성을 지원하고 분할 컴파일도 가능하기 떄문에 고수준에서의 프로그램 작성도 가능한 언어다.

C언어는 이식성이 뛰어나다

- 이식성(portability)이란 한번 작성된 프로그램을 다른 CPU를 가지는 하드웨어로 쉽게 이식할 수 있다는 뜻이다.

 

단점 : 

초보자가 배우기가 어렵다

 

C언어의 미래

C++는 흔히 C언어의 상위 집합이다

임베디드 시스템에서는 CPU와 메모리의 한계 때문에 객체 지향 언어를 사용하기 힘들다

 

 

1.4 알고리즘이란?

알고리즘

정의 : 문제를 풀기 위하여 컴퓨터가 수행해여야 할 단계적인 절차를 기술하는 것

특징 : 알고리즘을 프로그래밍 언어로 구현하면 프로그램이 된다.

 

알고리즘의 기술

1. 영어나 국어와 같은 자연어

2. 순서도(flowchart) : 입문 단계에서 많은 사용되는 방법으로 프로그램에서의 논리 순서 또는 작업 순서를 그림으로 표현하는 방법이다. 단점으로는 알고리즘이 복잡해지면 기술하기가 힘들어진다

3. 의사 코드(pseudo-code)

 

1.5 스크래치

스크래치

정의 : MIT에서 개발된 도구로서 프로그래밍 개념을 학습하기 위한 환경

 

스크래치 사용자 인터페이스

기본 개념 : 스프라이트(sprite)를 스크립트로 제어하여서 애니메이션을 작성하는 것

작성법 : 레고 블록처럼 기본적인 블록들을 조립하여서 스크립트를 작성한다.