본문으로 건너뛰기

컴퓨터와 프로그래밍

컴퓨터와 프로그램

Computer(컴퓨터)는 전자적으로 계산을 수행하는 장치이다. Program(프로그램)은 Computer의 행동을 지시하는 명령어의 집합을 의미한다.

Computer는 Program에 따라 Input(입력)으로 Data(데이터)를 받아 Processing(처리) 과정을 거쳐 Output(출력)으로 Information(정보)를 만들어낸다.

하드웨어와 소프트웨어

Computer는 Hardware(하드웨어)와 Software(소프트웨어)로 구성된다.

  • Hardware: Computer를 구성하는 물리적인 장치를 의미한다.
  • Software: Computer가 수행할 작업을 지시하는 명령어들의 집합, 즉 Program이다. Software는 다시 Application Software(응용 소프트웨어)와 System Software(시스템 소프트웨어)로 나뉜다. System Software는 Hardware를 작동시키는 기본 Software이다.

자료 표현 원리

Computer는 자료를 표현하기 위해 Binary(2진수) 체계를 사용한다.

Bit, Byte, Word

  • Bit(비트): Binary Digit의 줄임말로, 0 또는 1의 두 가지 정보를 표현하는 정보의 최소 단위이다.
  • Byte(바이트): 연속된 8개의 Bit로 구성되며, 총 282^8인 256가지의 정보를 표현할 수 있다.
  • Word(워드): 일반적으로 연속된 4개의 Byte, 즉 32개의 Bit로 구성된다. 단, Word의 크기는 시스템마다 다를 수 있다.

저장 단위의 크기

정보 저장 용량 단위는 다음과 같다.

  • B(Byte): 202^0 Byte, 1 Byte
  • KB(Kilo Byte): 2102^{10} Byte, 1,024 Byte
  • MB(Mega Byte): 2202^{20} Byte, 1,048,576 Byte
  • GB(Giga Byte): 2302^{30} Byte, 1,073,741,824 Byte
  • TB(Tera Byte): 2402^{40} Byte, 1,099,511,627,776 Byte
  • PB(Peta Byte): 2502^{50} Byte, 1,125,899,906,842,624 Byte

진법과 수의 표현

다양한 진법

  • Decimal(10진법): 0에서 9까지 10개의 숫자를 사용한다.
  • Binary(2진법): 0과 1의 조합으로 숫자를 표시하며, Computer의 기본 자료 표현 방식이다.
  • Octal(8진법): 0부터 7까지의 숫자를 사용한다.
  • Hexadecimal(16진법): 0부터 9, 그리고 A부터 F까지의 문자를 사용하여 수를 표현한다.

Binary, Octal, Hexadecimal은 상호 변환이 용이하다. Binary 3자리는 Octal 1자리로, Binary 4자리는 Hexadecimal 1자리로 쉽게 변환할 수 있다.

음수 표현: 2의 보수

Computer에서 음수를 표현하는 가장 일반적인 방식은 **2's Complement(2의 보수)**이다. 1의 보수 방식과 달리 0의 표현이 하나뿐이고, 표현할 수 있는 수의 범위가 하나 더 넓다는 장점이 있다.

2의 보수 계산 방법

n-bit에서 음수 '-a'에 대한 2's Complement를 구하는 방법은 두 가지가 있다.

  1. 2n

    에서 a의 절댓값을 뺀다.

    • 예시: 4-bit에서 -4를 표현하려면 24−4=16−4=12 이므로, 결과는 11002 이다.
  2. 양수 a의 Binary 표현에서 모든 Bit를 반전(0은 1로, 1은 0으로)시킨 후, 1을 더한다.

    • 예시: 4-bit에서 -4를 표현하는 과정
      1. 양수 4를 4-bit Binary로 표현: 0100
      2. 모든 Bit를 반전 (1's Complement): 1011
      3. 1을 더함: 1100

2's Complement를 사용하면 뺄셈 연산을 덧셈 연산으로 처리할 수 있어 연산 회로를 단순화할 수 있다.

문자와 논리

문자 코드

**Character Code(문자 코드)**는 Bit의 조합에 특정 문자를 할당한 약속이다. 국제 표준으로는 ASCII, EBCDIC, Unicode 등이 있다.

  • ASCII(아스키 코드): American Standard Code for Information Interchange의 약자로, 7-bit를 사용하여 128개의 문자, 숫자, 특수 기호를 규정한 국제 표준이다. 예를 들어, 대문자 'A'는 1000001이고 소문자 'a'는 1100001이다.

논리

**Logic(논리)**은 참(True)과 거짓(False)을 다룬다. Computer에서는 보통 숫자 1을 참으로, 0을 거짓으로 대응시켜 논리 연산을 수행한다.

프로그래밍 언어

**Programming Language(프로그래밍 언어)**는 사람과 Computer가 의사소통하기 위한 언어이다. 사람이 Computer에 내릴 명령을 Programming Language로 기술한다.

저급 언어와 고급 언어

  • Low-Level Language(저급 언어)

    : 기계가 직접 이해하거나 기계와 가까운 언어이다.

    • Machine Language(기계어): 0과 1로만 이루어져 Computer가 직접 이해할 수 있는 유일한 언어이다.
    • Assembly Language(어셈블리어): Machine Language의 명령어를 사람이 이해하기 쉬운 기호(Mnemonic)로 일대일 대응시킨 언어이다.
  • High-Level Language(고급 언어): 사람이 사용하는 자연어와 유사한 문법 구조를 가져 프로그래머가 이해하고 사용하기 쉬운 언어이다.

고급 언어의 종류

  • FORTRAN: 과학, 공학, 수학 계산용으로 개발된 최초의 High-Level Language이다.
  • BASIC: 초보자를 위해 개발된 대화형 언어이다.
  • COBOL: 사무 처리용으로 개발된 언어이다.
  • PASCAL: 구조적 프로그래밍 및 교육용으로 개발된 언어이다.
  • C: UNIX 운영체제를 개발하기 위해 설계된 시스템 프로그래밍 언어이다. Hardware 제어가 용이하고 이식성이 높아 널리 사용된다.
  • C++: C 언어에 Object-Oriented Programming(객체지향 프로그래밍) 개념을 추가하여 확장한 언어이다.
  • Java(자바): 운영체제나 CPU 종류에 관계없이 Virtual Machine(가상 머신) 위에서 독립적으로 실행되도록 설계된 객체지향 언어이다.

프로그램 개발 과정

프로그램과 소프트웨어

  • Program

    : 특정 작업을 수행하도록 지시하는 명령어의 집합이다.

    • Source File(소스 파일): 프로그래머가 Programming Language로 작성한 원본 파일이다.
    • Executable File(실행 파일): Source File을 컴퓨터가 이해할 수 있는 Machine Language로 변환한 파일이다.
  • Software: Program뿐만 아니라 관련된 데이터와 문서를 모두 포함하는 포괄적인 개념이다.

소프트웨어 공학

**Software Engineering(소프트웨어 공학)**은 신뢰성 있고 효율적인 Software를 경제적으로 개발하기 위한 공학적 원리와 방법론을 다루는 학문이다. Software 개발은 일반적으로 분석, 설계, 구현, 검사, 유지보수의 생명주기를 따른다.

프로그램 개발 도구

  • Compiler(컴파일러): High-Level Language로 작성된 Source File 전체를 Machine Language로 된 **Object File(목적 파일)**로 번역하는 프로그램이다.
  • Assembler(어셈블러): Assembly Language로 작성된 파일을 Machine Language로 번역한다.
  • Linker(링커): 여러 Object File과 Library(라이브러리) 함수들을 연결하여 하나의 Executable File을 생성한다.
  • Loader(로더): Executable File을 주기억장치(메모리)에 적재하여 실행될 수 있도록 준비하는 프로그램이다.
  • Debugging(디버깅): 프로그램의 오류(Error)를 찾아내고 수정하는 과정이다.
  • IDE(통합 개발 환경): Editor, Compiler, Linker, Debugger 등 프로그램 개발에 필요한 도구들을 하나로 통합하여 제공하는 환경이다.

C 프로그래밍 첫걸음

C 언어의 역사

C 언어는 1972년경 미국 AT&T 벨 연구소의 데니스 리치(Dennis Ritchie)가 켄 톰슨(Ken Thompson)이 개발한 B 언어를 기반으로 UNIX 운영체제 개발을 위해 만들었다. C++, Java, C# 등 많은 현대 언어에 큰 영향을 주었다.

C 프로그램 개발 과정

  1. 소스 작성: 에디터를 사용하여 .c 확장자를 가진 Source File을 작성한다.
  2. 컴파일: Compiler를 사용하여 Source File을 Object File(.obj)로 변환한다. 이때 문법 오류가 있으면 **Compile Error(컴파일 에러)**가 발생한다.
  3. 링킹: Linker를 사용하여 Object File과 표준 Library를 연결하여 Executable File(.exe)을 생성한다. 필요한 함수를 찾지 못하면 **Link Error(링킹 에러)**가 발생한다.
  4. 실행: Loader를 통해 Executable File을 메모리에 올려 실행한다.
  5. 디버깅: 실행 중 의도와 다른 결과가 나오면 **Logic Error(논리 에러)**를 찾아 수정한다.

C 프로그램 분석

/* myname.c */
#include <stdio.h>

int main(void)
{
printf("Hello World !!!\n");
return 0;
}
  • /* ... */: Comment(주석). 프로그램 설명문으로, Compiler는 이 부분을 무시한다.
  • #include <stdio.h>: Preprocessor directive(전처리기 지시자). 컴파일 전에 stdio.h라는 **Header File(헤더 파일)**을 소스에 포함하라는 명령이다. stdio는 표준 입출력(Standard Input/Output)을 의미한다.
  • int main(void): 프로그램의 실행이 시작되는 main Function(함수). 모든 C 프로그램은 반드시 하나의 main 함수를 가져야 한다.
  • { ... }: 함수의 시작과 끝을 나타내는 중괄호이다.
  • printf(...): 표준 출력 함수로, 괄호 안의 문자열을 화면에 출력한다.
  • \n: Newline Character(개행 문자). 다음 출력은 새로운 줄에서 시작하라는 의미이다.
  • ;: Semicolon(세미콜론). C 언어에서 하나의 문장이 끝났음을 나타낸다.
  • return 0;: main 함수가 정상적으로 종료되었음을 운영체제에 알린다.

주요 에러 유형

  • Compile Error: 문법 오류. 세미콜론 누락, 함수 이름 오타 등.
  • Link Error: 함수 정의를 찾지 못할 때 발생. mainMain으로 잘못 쓰는 경우 등.
  • Logic Error: 프로그램이 실행은 되나, 의도한 대로 동작하지 않는 경우. 출력 형식에서 \t(수평 탭)를 \n(개행) 대신 사용하는 경우 등. 이러한 오류는 Debugging을 통해 수정해야 한다.