본문 바로가기
IT/자료구조

컴퓨터와 프로그램| 데이터, 자료구조, 프로그램, 알고리즘

by anuglyduckling 2024. 9. 25.
728x90
반응형

1. 컴퓨터와 데이터

컴퓨터의 정의와 구성 요소

  • 컴퓨터는 전자 회로를 이용해 데이터를 처리하는 고속 계산기입니다. 인간의 계산 능력과 지적 작업을 돕기 위해 발명되었습니다.
  • 하드웨어: 컴퓨터를 구성하는 물리적 장치들을 의미한다.
    예시: CPU(중앙처리장치), 메모리(주기억장치), 입력 장치(키보드, 마우스), 출력 장치(모니터, 프린터) 등
  • 소프트웨어: 컴퓨터가 동작하는 데 필요한 프로그램과 명령어.
  • 데이터: 컴퓨터가 처리하는 정보로, 0과 1의 이진수 형태로 저장됩니다.

데이터 처리 단위

  • 비트(bit): Binary Digit의 약자이며 컴퓨터가 데이터를 표현하는 가장 작은 단위
    컴퓨터는 전자 회로로 구성되어 있고 이 회로는 전류가 흐르는 상태와 흐르지 않는 상태, 즉 두가지 상태(0 또는 1)로 데이터를 표현 할 수 있습니다. 그래서 컴퓨터는 모든 정보를 0과 1의 조합으로 저장하고 처리합니다.
  • 바이트(byte): 8개의 비트가 모인 단위
    컴퓨터는 데이터를 더 효율적으로 처리하기 위해 여러 비트를 묶어서 사용합니다.
    8개의 비트를 묶어서 하나의 바이트를 만들면, 이 바이트로 표현할 수 있는 조합의 수는 256개(2의 8제곱)입니다.
    컴퓨터는 바이트로 알파벳, 숫자, 특수문자 등을 표현하는데 활용합니다. 예를들어 문자 'A'를 컴퓨터에서 저장하려면 8비트 즉, 1바이트를 사용하여 01000001 이라는 이진수로 표현하며 이와 같이 컴퓨터는 8비트를 묶어서 하나의 문자를 저장합니다.
  • 버스(bus): 컴퓨터 내부에서 CPU와 메모리, 그리고 기타 장치들 간에 데이터를 주고받는 고속 통신선
    - 데이터 버스: 데이터를 주고받는 역할
    - 주소 버스: 데이터가 어디로 가야 하는지 지정
    - 제어 버스: 데이터의 흐름 제어
  • 워드(word): CPU가 한 번에 처리할 수 있는 데이터 크기. 32비트, 64비트 등으로 표현됩니다.
    32비트 CPU는 한 번에 32비트(4바이트)의 데이터를 처리할 수 있고, 64비트 CPU는 64비트(8바이트)의 데이터를 처리 할 수 있습니다.

진법 변환

  • 10진수: 우리가 일상에서 사용하는 수 체계(0-9).
  • 2진수: 컴퓨터에서 사용하는 수 체계(0과 1).
    • 10진수를 2진수로 변환: 10진수를 2로 나누고 나머지를 기록.
    • 2진수를 10진수로 변환: 각 자리에 2의 제곱수를 곱해 더함.
더보기

프로그램이 실행되는 과정


프로그램 파일은 하드 드라이브(또는 SSD)에서 주기억장치(메모리)로 로드된 후 CPU에서 처리됩니다.
이때 주기억장치는 CPU가 데이터를 빠르게 읽고 쓸 수 있도록 데이터를 임시로 저장하는 공간으로 사용됩니다.

더보기

하드 드라이브에서 주기억장치로 로드하는 이유

하드 드라이브는 대용량 데이터를 영구적으로 저장할 수 있지만 읽고 쓰는 속도가 매우 느립니다. 
반면, 주기억장치는 데이터를 매우 빠르게 읽고 쓸 수 있는 임시 저장 공간입니다.
CPU는 매우 빠르게 데이터를 처리하기 때문에 하드 드라이브에서 직접 데이터를 가져와 처리하면 병목 현상이 발생하게 됩니다. 
하지만 주기억장치를 사용하면 필요한 데이터와 프로그램을 빠르게 접근 할 수 있어 CPU의 속도에 맞게 데이터를 공급할 수 있습니다. 따라서 프로그램이 실행 될 때 하드 드라이브에서 주기억장치로 데이터를 옮긴 후, CPU가 그 데이터를 주기억장치에서 빠르게 읽어 작업을 수행하는 구조로 사용하는 것입니다.

더보기

병목 현상

병목 현상(bottleneck)은 시스템의 한 부분이 전체 성능을 제한하는 상황을 의미합니다.

쉽게 말해, 시스템의 여러 부분 중 한 부분이 너무 느려서 전체적인 작업 흐름이 방해를 받는 것입니다.

병목현상 예시
1. CPU와 하드 드라이브 간의 속도 차이
CPU는 데이터를 매우 빠르게 처리할 수 있지만 하드 드라이브는 데이터를 읽고 쓰는 속도가 느립니다. 
만약 CPU가 하드 드라이브에서 데이터를 바로 처리하려 한다면 하드 드라이브의 느린 속도 때문에 CPU는 그 데이터를 기다리면서 놀게 되고, 이로 인해 전체 시스템 성능이 크게 떨어집니다.

2. 네트워크 속도
서버가 많은 데이터를 빠르게 처리할 수 있지만 네트워크 속도가 느리면 데이터를 전송하는 데 시간이 오래 걸립니다.
이 경우, 네트워크가 병목이 되어 서버의 성능을 제대로 발휘하지 못하게 합니다.

병목현상을 해결하는 방법

1. RAM 사용

 하드 드라이브에서 직접 데이터를 처리하지 않고, 빠른 속도의 RAM에 데이터를 로드한 후 CPU가 RAM에서 데이터를 처리하면 병목현상을 줄일 수 있습니다.

 

2. 성능이 낮은 부품 업그레이드

 예를 들어, 네트워크 속도가 때문에 병목현상이 발생한다면 더 빠른 네트워크 장비로 업그레이드 해야합니다.

더보기

입력한 문자가 화면에 출력되는 과정

 

사용자가 키보드에서 'A'를 누르면, 그 신호가 버스를 통해 CPU로 전달되어  CPU가 이를 처리하고 화면에 'A'를 표시하게 됩니다.


2. 자료의 표현

정수와 실수의 표현 방식

  • 정수 표현: 컴퓨터는 정수를 이진수로 표현합니다. 부호를 포함해 숫자를 표현할 수 있는 다양한 방식이 존재합니다.
    • 부호와 절대값: 숫자의 부호(양수 또는 음수)를 0과 1로 나타냅니다. 예를 들어, 0은 양수, 1은 음수로 표현합니다.
    • 1의 보수: 음수를 나타낼 때 모든 비트를 반전시켜 표현하는 방식입니다.
    • 2의 보수: 음수를 표현하기 위해 1의 보수에 1을 더한 방식으로, 현대 컴퓨터에서 주로 사용됩니다.

실수의 표현

  • 고정 소수점: 소수점 위치가 고정된 방식으로 실수를 표현합니다. 주로 간단한 연산에서 사용됩니다.
  • 부동 소수점: 소수점의 위치가 변할 수 있는 방식으로, 복잡한 실수를 표현할 때 사용됩니다. 부동 소수점 표현은 더 넓은 숫자 범위를 처리할 수 있지만, 정밀도 문제가 있을 수 있습니다.

3. 프로그램과 자료구조

프로그램이란?

  • 프로그램은 컴퓨터가 실행할 명령어들의 순서화된 집합입니다. 컴퓨터는 이 명령어들을 순차적으로 실행하며, 이를 통해 다양한 작업을 수행합니다.

자료구조란?

  • 자료구조는 데이터를 효율적으로 저장하고 처리하는 방법입니다. 다양한 형태의 자료구조를 사용해 프로그램의 성능을 높일 수 있습니다.
    • 배열: 고정된 크기의 동일한 데이터 타입을 저장하는 연속된 메모리 공간.
    • 구조체: 다양한 데이터 타입을 하나의 묶음으로 관리하는 구조.
    • 스택: 데이터를 후입선출(LIFO) 방식으로 저장하는 자료구조. 마지막에 들어온 데이터가 먼저 나갑니다.
    • : 데이터를 선입선출(FIFO) 방식으로 저장하는 자료구조. 먼저 들어온 데이터가 먼저 나갑니다.
    • 트리: 계층적으로 데이터를 구성하는 자료구조로, 부모-자식 관계를 가집니다.
    • 그래프: 데이터를 노드와 엣지로 표현하여 네트워크를 구성하는 자료구조입니다.

4. 프로그램과 알고리즘

알고리즘이란?

  • 알고리즘은 문제를 해결하기 위한 단계적인 절차나 방법을 의미합니다. 좋은 알고리즘은 명확하고, 실행 가능한 명령어들로 이루어져 있으며, 반드시 종료됩니다.
    • 명확성: 각 명령어는 애매하지 않고 명확해야 합니다.
    • 유한성: 알고리즘은 무한히 반복되지 않고 끝나야 합니다.
    • 유효성: 모든 명령어는 실제로 실행 가능해야 합니다.

알고리즘의 표현 방법

  • 자연 언어: 알고리즘을 일상 언어로 설명하는 방법.
  • 의사 코드(Pseudo Code): 프로그래밍 언어와 유사하지만 코드보다는 간결하게 알고리즘을 설명하는 방법.
  • 프로그래밍 언어: 실제 코드로 알고리즘을 구현하는 방법.

조건문과 반복문

  • 조건문: 특정 조건에 따라 실행할 명령어를 결정합니다.
    • if-else: 조건이 참일 경우와 거짓일 경우 실행할 명령을 나누어 처리합니다.
  • 반복문: 조건이 만족될 때까지 명령어를 반복 실행합니다.
    • for: 정해진 횟수만큼 반복.
    • while: 조건이 참일 때까지 반복.

5. 알고리즘의 성능 분석

시간 복잡도와 공간 복잡도

  • 시간 복잡도: 알고리즘이 실행되는 데 걸리는 시간을 분석하는 방법.
  • 공간 복잡도: 알고리즘이 실행되는 동안 사용하는 메모리 양을 분석하는 방법.

Big-O 표기법

  • O(1): 입력 크기와 상관없이 항상 일정한 시간이 걸리는 알고리즘.
  • O(n): 입력 크기에 비례하여 시간이 증가하는 알고리즘.
  • O(log n): 입력 크기가 증가할수록 시간이 로그 형태로 증가하는 알고리즘.
  • O(n²): 입력 크기가 커짐에 따라 시간이 제곱에 비례해 증가하는 알고리즘.

6. 정렬과 탐색 알고리즘

탐색 알고리즘

  • 순차 탐색: 데이터를 처음부터 끝까지 차례대로 탐색하는 방법.
    • 시간 복잡도: O(n)
  • 이진 탐색: 데이터가 정렬된 상태에서 중간값과 비교하여 탐색 범위를 절반씩 줄여가는 방법.
    • 시간 복잡도: O(log n)

정렬 알고리즘

  • 버블 정렬: 인접한 두 요소를 비교하여 큰 값을 뒤로 보내는 방식으로 정렬.
  • 퀵 정렬: 기준 값을 정한 후 작은 값은 왼쪽, 큰 값은 오른쪽으로 분할하여 정렬.
728x90
반응형