컴퓨터프로그래밍(C) – 컴퓨터 개론

컴퓨터 프로그래밍을 시작하기 전에 컴퓨터에 관한 전반적인 개요를 파악할 필요가 있다. 컴퓨터의 하드웨어와 소프트웨어의 주요 구성요소 및 역할을 살펴본다.

전체 내용은 크게 컴퓨터 하드웨어와 소프트웨어 구성되어 있다. 먼저 컴퓨터 하드웨어를 살펴본다.

P.3

여러분이 이 실습실 안에서 컴퓨터를 사용하고 있고 또한 집에서도 사용하고 있다. 이 컴퓨터를 분해해서 구성 요소를 살펴보면 슬라이드의 사진과 같다. 우선 모니터가 있다. 사진에 나온 모니터는 CRT 모니터로 구현이지만 여러분이 사용하는 모니터는 LCD 모니터로 두께가 얇고 해상도가 훨씬 높은 것이다.

모뎀 또는 랜카드는 컴퓨터를 인터넷에 연결하기 위해 반드시 필요한 장치다. 예전에는 컴퓨터에 랜카드를 따로 구입해서 추가하기도 했지만 요즘 데스크탑 컴퓨터와 노트북 컴퓨터의 경우 무선랜 카드가 기본 장착되어 있고 심지어는 블루투스 무선통신 장치도 기본 장착되어 있다. 블루투스 무선통신 장치의 경우 무선 마우스나 무선 키보드르를 컴퓨터와 연결하는데 사용하기도 한다.

그리고 대표적인 입력 장치인 키보다가 있고 사진에는 없지만 마우스도 보통 컴퓨터에 장착되어 있을 것이다. 모니터와 함께 출력 장치로 프린터가 있다. A4용지와 같은 종이에 흑백 또는 컬러로 레포트와 같은 문서를 출력할 수 있다.

중앙에 컴퓨터 케이스와 핵심 칩들이 꽂혀있는 보드가 있다. 이 컴퓨터 보드에 나중에 설명할 핵심 구성 요소인 중앙처리장치와 주기억장치가 있고, 게임하는데 필수적인 비디오 카드도 있다. 그 외에 시디롬, 요즘은  DVD, 하드 디스크도 중요한 컴퓨터 구성요소이다.

P.4

앞에서 컴퓨터 실제 사진으로 가지고 구성요소를 얘기해보았는데, 여기에서는 이 구성요소를 추상화해서 컴퓨터 구성요소를 살펴본다. 조금 어려운 용어로 컴퓨터 하드웨어 아키텍처라고 한다. "추상화"라는 용어를 사용했는데, 그 의미는 실제와는 다르긴 하지만 우리가 관심있는 또는 필요로하는 정보는 유지한채 그 외의 불필요한 내용을 삭제한 것을 뜻한다.

[질문] 여러분이 생활하면서 접하는 것들 중에서 지금 설명한 "추상화"라는 용어로 설명할 수 있는 것이 무엇이 있을까?

[답] 지하철 노선도. 지하철이 다니는 역 정보를 가장 중요하게 그린 간략화된 지도. 역의 위치나 역 사이의 실제 거리를 반영해서 그린 것은 아니다.

실제 컴퓨터 하드웨어를 추상화해서 그린 것을 컴퓨터 하드웨어 아키텍처라고 부른다. 이 아키텍처를 보면 크게 컴퓨터 내부에 있는 요소와 외부에 있는 요소를 구분했음을 알 수 있다. 무엇으로? 박스로. 그 내부와 외부를 연결하는 접점이 당연히 있을텐데 그 접점을 무엇이라고 하는가? 포트. 여러분이 사용하는 노트북이나 데스크탑 컴퓨터에서 윈도우 운영체제를 주로 사용할텐데, 제어판을 열어보면 포트 목록을 확인할 수 있다. 예를 들어 마우스에 관련된 포트나 키보드에 관련된 포트 등. 그리고 USB 포트라는 말을 사용하고 있지요? 용어 포트는 중요하므로 상식적으로 알고 있을 필요가 있다.

컴퓨터 내부를 들여다 보면 4가지 요소를 이 아키텍처에 그려놓았다. 그리고 이 요소들이 모두 무엇인가로 연결되어 있음을 알 수 있다. 무엇인가? 버스. 여기서 버스는 택시, 버스의 그 버스는 아니고 연결 통로를 의미한다. 컴퓨터 내부의 요소들 간에 데이터를 주고 받아야 할 일이 많다. 예를 들어 게임을 실행하려면 하드디스크에 저장된 게임을 주 기억장치에 옮겨놓고 CPU에서 명령어를 하나씩 실행한다. 이렇게 주요 요소들 간에 데이터를 주고 받을 때 이 버스라고 부르는 연결 통로를 거쳐야 한다. 버스도 중요한 용어이므로 기억하자.

P.5

컴퓨터 하드웨어 구성 요소 중 사람의 두뇌에 비유할 수 있는 중앙처리장치 CPU가 있다. CPU는 Central Processing Unit의 약자라는 정도는 알고 있을 필요가 있다. 중앙처리장치에서 컴퓨터가 하는 모든 명령어 실행을 통한 계산을 담당한다.

그 다음으로 중요한 구성 요소는 기억장치 또는 메모리이다. 기억장치는 이 슬라이드에서 보여주는 것과 같이 크게 두가지로 설명할 수 있고, 또는 중앙처리장치 안에 포함되어 있는 기억장치인 레지스터까지해서 세가지로 얘기할 수도 있다.

주 메모리는, 소위 여러분들이 친구들끼리 "네 컴퓨터 램은 몇 기가냐?" 라고 얘기할 때 지칭한 램에 해당한다. 인터넷 브라우져, 게임, 메모장 등과 같은 컴퓨터 프로그램을 실행하려면 그 프로그램이 반드시 주 메모리에 올라와 있어야 한다.

보조 메모리는 보통 하드 디스크와 같은 기억장치를 가리킨다. 그 외에 CD롬, DVD등도 보조 메모리에 속한다. 요즘은 기술이 발전하여 하드 디스크와 같은 기계적인 보조 메모리 기억장치 외에 전자적인 보조 메모리 기억장치로 플래시 메모리를 스마트폰이나 노트북에 SSD라는 이름으로 많이 사용하고 있다. SSD를 사용하는 노트북을 사용하는 있는 학생? 스마트폰에서 사진을 찍거나 동영상을 다운로드 받으면 플래시 메모리에 저장하게 된다. 이 플래시 메모리를 확장해서 만든 보조 메모리 기억장치를 SSD라고 부른다. 기계적인 장치가 아니라 전자적인 장치이므로 읽고 쓰는 시간이 SSD가 하드디스크에 비해 훨씬 빠르다.

이 외에도 중앙처리장치 안에 위치한 기억장치가 있는데 레지스터라고 부른다.

설명한 세가지 기억장치를 속도, 용량, 휘발성에 관해서 비교해본다. 휘발성은 영어로 volatile(발러타일)이다. 스마트폰이나 PC로 인터넷 영어 사전에서 이 단어를 검색해보자. 휘발성은 전원을 끄면 기억장치에 들어있던 데이터가 휘발된다, 즉 사라지는 특성이다. 예를 들어, 여러분이 문서 작업을 하던 중 컴퓨터 전원이 갑자기 꺼지면 저장하지 않은 내용은 문서에서 사라지는데 그 이유는 작업한 내용이 보조 기억장치가 아니라 휘발성이 있는 주 기억장치에 저장되어 있기 때문이다.

3x3 표를 그려서 세로는 세가지 기억장치, 가로는 속도, 용량, 휘발성을 표시해서 비교할 수 있다.

  • 레지스터 : 속도 가장 빠름 (왜? CPU안에 있어서 가장 가까워서), 용량 가장 적음 (CPU 작은 칩 안에 넣어야 하니까), 휘발성 있음 (CPU는 전원을 끄면 모두 리셋)
  • 주 기억장치 : 속도 빠름 (전자 장치이므로), 용량 비교적 큼(예를 들어, 여러분의 노트북이나 데스크탑 PC의 경우 최소 3G 이상), 휘발성 있음 (주 기억장치도 전자 장치)
  • 보조 기억장치 : 속도 느림(기계 장치이므로), 용량 매우 큼(예를 들어, 여러분의 PC에 최소 수백G에서 1T 이상), 휘발성 없음(cf. 게임 저장)

P.6

하드웨어 구성 요소들 사이에 데이터를 주고 받을려면 버스라는 연결 통로를 이용한다고 설명했다. 이렇게 요소들 사이에 정보 이동이 필요한데, 여기서 가장 중요한 용어 한가지만 선택해서 설명하면 "적재"이다. 여러분이 컴퓨터를 사용하면서 이 용어를 언제 들어본 적이 있는가? 게임을 다시 시작할 때 예전에 보조 기억장치인 하드 디스크에 저장한 지도 정보를 게임에서 불러올 때 적재 중 또는 로딩 중이라는 말을 보았을 것이다.

적재는 영어로 loading인데, 주로 하드 디스크와 같은 보조 메모리 기억 장치에 있는 정보를 램과 같은 주 메모리로 옮기는 것이다.

그 외의 용어는 슬라이드의 설명을 참고하기 바란다.

P.7

주 기억장치, 소위 여러분이 램이라고 부르는 또는 간단히 메모리라 부르는 컴퓨터의 구성 요소를 추상화해서 그린 그림이다. 앞에서도 설명했듯이 추상화의 목적은 중요하고 관심있는 부분만 강조해서 단순화하는 것이다. 메모리는 일종의 데이터를 넣어 둘 수 있는 박스 (또는 셀)들을 차례대로 늘어놓은 것이고, 그 박스마다 고유의 주소를 붙여놓은 것이다. 메모리의 중요한 속성 두 가지는 데이터를 저장하는 공간이라는 점과 각 공간에 주소를 붙여 놓은 것이다. 파란색의 2진수 숫자 00110010은 이 공간에 저장된 데이터이고 그 옆의 숫자 1886은 그 공간의 위치를 나타내는 주소이다. 마치 우리들 집의 주소가 몇 번지라고 하는 것 처럼 1886번지에 데이터가 00110010이 있다라고 말한다.

데이터 크기에 관련한 용어로 비트(BIT, Binary digit)가 있다. 비트가 무엇인가? 비트는 정보를 표현하는 최소의 단위로 0과 1로 구성된다. 정보를 표현한다는 것이 잘 이해되지 않을 수도 있겠다. 0과 1로 표현할 수 있는 정보가 무엇이 있나? 남자와 여자, 전원이 꺼지고 켜지고와 같은 정보는 1개의 비트로 표현할 수 있는 정보다. 그럼 1개의 비트로 표현할 수 없는, 즉 0과 1로 표현할 수 없는 정보는 무엇이 있을까? 가위, 바위, 보를 표현하려면 3가지를 구분할 수 있어야 한다. 그런데 0과 1 밖에 없다면 셋 중 하나를 표현할 수 없으므로 이 게임을 할 수 없다. 그럼 다시 질문하면, 가위, 바위, 보를 표현하려면 비트가 몇 개 필요한가? 최소 2비트가 필요하다. 비트가 0과 1을 표현하므로 2비트는 4가지 조합 00, 01, 10, 11을 표현할 수 있다. 따라서 가위, 바위, 보를 3가지 조합으로 놓으면 (비록 1가지 조합은 사용하지 않지만) 2비트로 충분히 표현할 수 있다.

데이터 크기에 관한 용어 비트를 배웠다. 바이트(Byte)는 무엇인가? 바이트는 8개의 비트를 모아놓은 것이다. 따라서 바이트로 표현할 수 있는 정보의 가짓수는 2를 여덟번 곱한 2의 8승개이다. 당연히 바이트로 가위, 바위, 보를 충분히 표현하고도 많은 경우가 남을 것이다.

비트, 바이트 외에 워드(Word)라는 데이터 크기가 있다. 워드는 무엇인가? 워드는 정해진 비트의 갯수를 뜻하는 데이터 크기는 아니고, 주어진 컴퓨터에서 한번에 처리할 수 있는 데이터 크기이다. 예를 들어, 여러분이 사용하는 컴퓨터를 보통 32비트 컴퓨터라 부른데 그 이유는 그 컴퓨터가 덧셈을 계산할 때 한번에 32비트까지 할 수 있음을 뜻한다. 또다른 예를 들어, 닌텐도 게임기는 64비튼 데이터를 한번에 처리하기 한다. 이것은 닌텐도 게임기 안에 들어 있는 컴퓨터의 워드가 64비트이기 때문이다. 일반 목적이 아니라 특수 용도로 만든 컴퓨터를 임베디드 컴퓨터라고 부르는데, 예를 들어 가스 계측 장비에 들어가 있는 컴퓨터가 그 예이다. 그러한 컴퓨터는 계산을 많이 할 필요까지는 없어서 8비트 크기 데이터를 한번에 처리한다. 따라서 워드가 8비트다.

데이터 크기의 단위인 비트, 바이트, 워드가 있음을 꼭 기억하자.

P.8

비트, 바이트, 워드 보다 훨씬 큰 데이터 크기를 가리키는 단위들이 있다. 먼저 KB 킬로 바이트로 읽는데 바이트가 대략 1000개 있는 데이터 크기다. 더 정확히 말하면, 컴퓨터는 이진수 체계를 따르기 때문에 2의 10승 바이트, 즉 1024 바이트가 있은 데이터 크기다.

킬로 바이트 단위의 크기를 갖고 있는 데이터로 어떤 것이 있을까? 텍스트 문서. 컴퓨터에 있는 텍스트 문서의 속성을 열어 그 크기를 살펴보면 보통 대략 몇 킬로 바이트 정도 할 것이다.

MB는 전직 대통령의 닉네임은 아니고 메가 바이트를 뜻한다. 2의 20승 갯수의 바이트를 모아놓은 것으로 대략 백만 바이트 정도이다.

메가 바이트 단위 크기를 갖고 있는 데이터가 어떤 것이 있을까? MP3 파일. K팝 1곡을 고음질의 MP3로 저장하면 대략 5메가 바이트 안팎의 파일이 된다. 사진도 그렇고, LTE 인터넷 속도를 얘기할 때도 100M bps(bit per second)라고 하기도 하는데 이때 M도 메가 단위를 뜻한다.

GB는 기가 바이트로 2의 30승 갯수의 바이트를 모안놓은 것이다. 이제부터는 숫자를 바로 쉽게 읽기도 어려울 정도로 큰 단위이다. 대략 10억 바이트이다.

기가 바이트 단위는 유선 인터넷 속도, "올레 기가"에서 언급되기도 한다. 컴퓨터 램(주 기억장치)의 크기가 보통 몇 기가 단위이다. 1G~6G. 고화질의 영화를 다운로드 하면 1G가 넘는다.

TB는 테러 바이트로 2의 40승 갯수, 대략 1조 바이트다. PC의 하드 디스크의 크기가 1TB 정도다.

본인이 학생시절 처음 산 컴퓨터의 하드 디스크 용량이 어느 정도 였을지 추측해보라. 40M 용량이었고, 요즘 스마트폰으로 찍는 고화질 사진이 4M정도 되는데 이것 10장 찍으면 꽉찬다. 그런데 이런 용량의 컴퓨터를 400만원을 주고 구입했다. 요즘 1TB 하드 디스크를 가지고 있는 컴퓨터가 아무리 비싸도 100만원 안팎인 것을 생각해보면 그동안 컴퓨터 하드웨어 기술이 얼마나 발전했는가를 짐작할 수 있다.

P.9

하드웨어 구성 요소 중에 인간의 두뇌 역할을 하는 CPU의 내부 구조를 들여다보면 세가지로 나누어 살펴볼 수 있다. 계산을 담당하는 산술/논리부, 명령어를 하나씩 가져와서 차례대로 실행하는 제어부, 앞에서 기억장치 관련해서 언급했던 레지스터가 있다. 다시 한번 언급하지만 레지스터는 CPU안에 있는 기억 장치이다.

P.10

컴퓨터에서 앞으로 여러분이 배울 프로그램을 실행하는 방법을 이렇게 그림으로 표현할 수 있다. 중앙처리장치(CPU)가 주 기억장치(주 메모리)에서 명령어와 데이터를 가져와서 실행하고 그 결과를 다시 주 기억장치에 전달하는 것이 가장 기본적인 과정이다. 이 과정을 반복하는 것이 우리가 눈으로 보는 프로그램 실행 과정이다. 이러한 프로그램 실행 과정을 폰 노이만이라는 컴퓨터 과학자가 처음으로 제안해서 이름을 붙였는데 프로그램 내장 방식이라 한다.

P.11

컴퓨터 안에서 프로그램 실행하는 과정인 프로그램 내장 방식을 자세히 설명한 내용이다. 슬라이드를 참고하기 바란다.

P.12

지금까지 컴퓨터 하드웨어에 대한 얘기를 했고, 지금부터 소프트웨어에 대한 얘기를 한다. 컴퓨터 소프트웨어는 하드웨어를 제어하기 위한 절차를 기술해놓은 것이다. 하드웨어는 실제로 눈으로 보고, 손으로 만질 수 있는 물리적인 대상이나 소프트웨어는 실재하지만 또 물리적으로 보고 만질 수 없는 대상이다.

소프트웨어는 크게 시스템 소프트웨어와 응용 소프트웨어로 분류할 수 있다. 여러분이 사용하는 윈도우즈는 운영체제라고 부르는 시스템 소프트웨어이다. 여러분이 컴퓨터 프로그래밍을 하기 위해 마이크로 소프트 비주얼 스튜디오라는 소프트웨어를 사용하는데 이것은 컴파이러와 디버거 등을 포함하는 시스템 소프트웨어의 또다른 예다.

응용 소프트웨어로는 여러분이 매일 사용하는 인터넷 익스플로러나 크롬과 같은 브라우져, 한글이나 워드와 같은 문서 편집기, 블리자드 회사의 게임, 발표 자료를 만들때 사용하는 파워포인트, 가계부 관리에 용이한 엑셀 등이 있다.

P.13

특히 시스템 소프트웨어에 속하는 운영체제, 여러분이 사용하는 윈도우즈는 컴퓨터 전원을 켜면 맨 처음 실행되는 매우 중요한 소프트웨어이다. 이 윈도우즈가 실행되어야만 다른 시스템 소프트웨어와 응용 소프트웨어를 실행할 수 있다. 이렇게 운영체제가 중요하다는 것을 강조하기 위해 컴퓨터에서 동작하는 모든 소프트웨어를 그림처럼 추상화해서 그려볼 수 있다. 가장 중요한 운영체제가 중심에 있고, 그 주위에 다른 시스템 소프트웨어 감싸고, 맨 바깥쪽 원에 응용 소프트웨어가 위치해 있다.

P.14

컴퓨터 소프트웨어와 하드웨어에서 사용하는 자료 표현 방법, 수 체계(Number System)에 대해 설명한다. 컴퓨터 하드웨어의 부품들이 2진수를 기반으로 만들어져 있어서 소프트웨어를 만들때도 2진수가 기본이 된다. 고등학교 수학 시간에 배운 2진수를 사용한다. 1비트로 0과 1을 표현하고, 비트 수가 늘어나면 그에 따라 더 많은 조합을 만들어 낼 수 있다. N비트면 2의 N승 경우를 표현할 수 있다.

P.15~17

이진수가 컴퓨터의 기본 자료 표현 방법이지만 그 외에 8진수, 10진수, 16진수도 빈번하게 사용한다. 몇 진수라고 표현하는 것은 수 체계라고 부른다. 쉬운 얘기이지만 어렵게 설명하자면 수 체계는 디지트(digit)와 가중치(weight)로 정의할 수 있다. 예를 들어 10진수의 디지트는 0부터 9까지 이고, 2진수는 0과 1, 8진수는 0~7이다. 16진수는 0부터 15인데, 10부터 15까지를 디지트로 사용하면 이 디지트가 한자리 숫자인지 아니면 두자리 숫자인지 구별하기 어려우므로 A부터 F로 대신 사용한다. 정리하자면 16진수의 디지트는 0~9, A(10), B(11), C(12), D(13), E(14), F(15)다.

가중치는 자리수에 따라 늘어나는 배수다. 예를 들어 2진수로 11이면 첫번째 1은 2^1이고 두번째 1은 2^0 즉 1이다. 10진수 11은 10^1과 10^0을 더한 것이고, 8진수 11은 8^1과 8^0을 더한 것이고, 16진수의 11은 16^1 + 16^0이다. 16진수로 AF는 10x16^1 + 15x16^0.

요약하자면, 2진수, 8진수, 10진수, 16진수가 컴퓨터 프로그래밍에서도 자주 언급되므로 이해할 필요가 있다.

P.18

컴퓨터 소프트웨어를 작성할 때 사용하는 언어를 프로그래밍 언어라고 한다. 세계에 아주 다양한 프로그래밍 언어가 있고, 그 중에서 가장 많이 사용되는 C언어를 선택해서 우리가 배운다.

세계에 존재하는 프로그래밍 언어의 수가 몇 개일까? 답하기 어려우면 객관식으로 질문해본다. 프로그래밍 언어의 수라는 것이 어제 갑자기 누군가가 새로 만들었다면 그 전체 갯수가 달라지므로 정확하게 카운팅하기가 어려울 수 있다. 이럴 때 갯수를 세는, 컴퓨터 분야에서의 방법은 오더 오브 매규니튜드(Order of Magnitude)이다. 1번 10개 이내, 2번 11~10^2개, 3번 101~10^3개, 4번 1001~10^4개, 5번 10001개 이상. 답은 5번.

이렇게 많은 프로그래밍 언어 중에서 사람들이 가장 많이 사용해온 것이 우리가 배울 C언어이다.

프로그래밍언어를 분류하는 방법이 여러 가지가 있는데 그 중에서 얼마나 사람하고 가까운가 또는 얼마나 컴퓨터하고 가까운가를 기준으로 하는 분류 방법이 있다. 그 분류 방법에 의하면 컴퓨터와 가장 가까운 기계어, 사람과 가장 가까운 고급언어가 있고 그 둘 사이에 끼여 있는 어셈블리어가 있다. 대략 세가지로 분류한다.

고급언어의 예를 보면 X = Y + Z가 있다. X, Y, Z는 앞에서 우리가 살펴본 주 기억장치(메모리)의 셀에 붙인 이름이다. 그래서 Y라는 이름의 방에 있는 숫자와 Z라는 이름의 방에 있는 숫자를 더해서 X라는 방에 그 결과를 넣는 명령어이다. 우리가 배운 수학과 꽤 유사한 형태를 띄고 있다.

이 기능을 기계어로 표현하면 1001 0001에서 Y에 저장된 값을 가져오고, 1100 0010에서 Z에 있는 값을 또 가져와 더한 다음, 1010 0011에서 X에 저장한다. 사실 1000 0001이 이런 의미이어야 하는 이유는 사실 없다. 임의로 정한 약속일 뿐 그 비트 값과 순서가 우리가 의도하는 의미를 담고 있지는 않다. 컴퓨터는 이 비트 시퀀스가 나오면 그냥 아무런 해석 없이 정한 약속대로 동작할 뿐이다. 사람에게는 특별한 의미가 있는 비트 시퀀스는 아니다.

사람은 고급언어로 소프트웨어를 만드는 것이 더 적합해 보이고, 컴퓨터는 0과 1만을 알고 있으므로 기계어로 작성된 소프트웨어를 더 잘 알아들을 것 같다. 따라서 이 둘 사이에 차이를 메꿔주는 단계가 필요한데 시스템 소프트웨어인 컴파일러가 고급언어로 작성된 소프트웨어를 기계어로 자동으로 번역해준다.

앞으로 여러분이 C언어라는 고급 언어로 소프트웨어를 만들 것이고 비주얼 스튜디오에 포함된 컴파일러라는 시스템 소프트웨어를 통해서 실습실의 컴퓨터가 잘 이해하는 기계어로 자동 번역한 다음에 실행할 것입니다.

P.19

10^4개 이상의 프로그래밍 언어가 세계에 있다고 했는데 그 중에서 많이 사용하는 프로그래밍 언어들 몇 가지를 추려보면 Fotran, COBOL, BASIC, C언어, C++, Java 등이 있다.

Fortran은 세계 최초의 고급 언어다. COBOL은 은행에서 많이 사용하던 프로그래밍 언어이다. 그레이스 하퍼는 할머니로 매우 유명한 컴퓨터 과학자이다. Basic은 배우기 쉽고 간단하며, 마이크로소프트의 빌 게이츠가 특히 관심을 기울였다는 프로그래밍 언어라고 한다. C언어 소개는 1장에서 본격적으로 소개한다. C++와 Java는 소위 객체 지향 프로그래밍 언어라고 부르는데 매우 큰 규모의 소프트웨어를 작성할 때 용이하다. 보통 컴퓨터 전공 학생들은 이 두가지 언어들도 배운다.

P.20~21

SKIP

P.22~23

프로그램을 작성할 때 도와주는 소프트웨어가 있는데 이를 통합개발환경(Integrated Development Environment, IDE)라고 부른다. 앞으로 우리가 C언어 프로그래밍을 할때 사용하는 통합개발환경, 즉 IDE로 마이크로소프트 비주얼 스튜디오를 사용한다.

이 통합개발환경에 포함된 시스템 소프트웨어로 편집기, 컴파일러, 디버거가 있다. 편집기로 고급 언어로 작성된  프로그램 텍스트를 작성하고, 컴파일러로 고급 언어 프로그램을 기계어로 변환한다. 변환된 기계어 프로그램을 실행할 수 있다.

프로그램을 작성하다 보면 주어진 입력에 기대했던 출력이 나오지 않는 경우가 빈번하다. 다양한 원인이 있겠지만 주로 작성한 프로그램의 일부가 제대로 잘 작성하지 못해서 그렇다. 어느 부분이 잘못되었나 오류를 찾아가는 과정이 필요하다. 이러한 과정을 진행하는 것을 디버깅(debugging)한다고 부른다. 이 디버깅 과정을 하는데 도움을 주는 시스템 소프트웨어가 통합개발환경 IDE에 포함되어 있는데 이를 디버거(debugger)라고 부른다.

영어 단어 디버거를 분석해보면, de + bug +[g]  er와 같다. 여기서 버그(bug)는 무엇인가? 프로그램의 오류를 버그라고 부른다. 이 버그라는 용어는 앞에서 COBOL 프로그래밍 언어를 개발했다고 소개한 할머니 컴퓨터 과학자 그레이스 하퍼가 처음으로 사용했다. 그때는 정말로 나방이 컴퓨터 부품 사이에 끼여 죽어 있었고 그 나방으로 인해 합선이 일어나 컴퓨터로 계산하려는 미적분 결과가 틀리게 나와다고 한다. 그레이스 하퍼 할머니 컴퓨터 과학자가 이 나방을 발견해서 그 때부터 컴퓨터 프로그램 오류를 버그라고 불렀다.

de라는 접두사의 의미는 무엇인가? 분리하다라는 뜻이다. 예를 들어 detach의 de와 같다. 따라서 버그를 분리하다는 뜻이 debug이고 +er은 무엇하는 사람이라는 의미이므로 버그를 분리하는 소프트웨어를 debugger로 가리키게 되었다.

P.24

프로그램을 작성한 다음 실행하기 까지의 과정을 그린 그림이다. 교재 1장, 그림 1.1에서 다시 나오므로 그때 살펴본다. 매우 중요하다.

 

Leave a Reply

Your email address will not be published. Required fields are marked *