본문으로 건너뛰기

컴퓨터와 프로그래밍

개요​

컴퓨터·프로그램의 정의, 하드웨어/소프트웨어 구분, 2진수 기반 자료 표현(Bit·Byte·Word).

컴퓨터와 프로그램​

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: 함수 정의를 찾지 못할 때 발생. main을 Main으로 잘못 쓰는 경우 등.
  • Logic Error: 프로그램이 실행은 되나, 의도한 대로 동작하지 않는 경우. 출력 형식에서 \t(수평 탭)를 \n(개행) 대신 사용하는 경우 등. 이러한 오류는 Debugging을 통해 수정해야 한다.