[자료구조] 02주차

sunnylee·6일 전

[자료구조] 02주차 | 컴퓨터는 자료를 어떻게 표현할까?

이번 주 핵심 질문
컴퓨터는 숫자와 문자를 어떻게 저장하고, 복잡한 정보를 어떻게 다룰까?

1. 이번 주 학습목표

  • 비트와 바이트의 의미를 설명할 수 있다.
  • 숫자와 문자가 컴퓨터에서 표현되는 기본 원리를 이해한다.
  • 자료형이 필요한 이유를 설명할 수 있다.
  • 추상화와 구체화의 차이를 예시로 설명할 수 있다.

2. 컴퓨터가 사용하는 기본 단위

컴퓨터는 숫자, 문자, 사진, 소리 등 다양한 자료를 비트의 조합으로 표현한다.

비트(Bit)는 0 또는 1을 나타내는 기본 단위이다. 바이트(Byte)는 일반적으로 비트 8개를 묶은 단위이다.

단위의미예시
비트(Bit)0 또는 1을 표현하는 단위1
바이트(Byte)비트 8개를 묶은 단위01000001

비트가 하나라면 두 가지 상태를 표현할 수 있다. 비트가 두 개라면 네 가지 상태를 표현할 수 있다.

  • 1비트: 0, 1
  • 2비트: 00, 01, 10, 11
  • 3비트: 총 8가지 상태
  • 8비트: 총 256가지 상태

즉, n비트로 구분할 수 있는 비트 조합은 2ⁿ개이다.

다만 그 조합을 숫자, 문자, 색상 중 무엇으로 해석할지는 사용하는 규칙에 따라 달라진다.

3. 숫자를 표현하는 방법

3.1 십진수와 이진수

우리가 일상에서 사용하는 십진수는 0부터 9까지 열 개의 숫자를 사용한다. 이진수는 0과 1만 사용한다.

십진수에서 각 자릿값이 1, 10, 100으로 커지는 것처럼, 이진수의 자릿값은 오른쪽부터 1, 2, 4, 8로 커진다.

예를 들어 이진수 1101을 십진수로 바꾸면 다음과 같다.

자릿값8421
비트1101
계산8401

8 + 4 + 0 + 1 = 13

따라서 이진수 1101은 십진수 13이다.

3.2 음수와 2의 보수

정해진 비트 수 안에서 음수를 표현하는 대표적인 방법이 2의 보수이다.

8비트로 −5를 표현하는 과정을 살펴보자.

  1. +5를 이진수로 표현한다: 00000101
  2. 모든 비트를 반전한다: 11111010
  3. 1을 더한다: 11111011

따라서 8비트 2의 보수 표현에서 11111011은 −5이다.

같은 비트열도 해석 방식에 따라 값이 달라진다.

비트열해석 방식값
11111011부호 없는 8비트 정수251
111110112의 보수 부호 있는 8비트 정수−5

핵심은 비트열만으로 의미가 정해지는 것은 아니라는 점이다.

3.3 실수와 근삿값

소수점이 있는 수는 흔히 부동소수점(Floating Point) 방식으로 표현한다.

부동소수점은 제한된 비트 안에 수를 표현하므로 모든 실수를 정확하게 저장할 수는 없다. 특히 십진수에서 간단한 소수라도 이진수에서는 무한히 이어질 수 있다.

예를 들어 0.1은 일반적인 이진 부동소수점에서 정확하게 표현되지 않는다. 따라서 계산 결과에 아주 작은 오차가 생길 수 있다.

정수와 실수는 표현 방식이 다르며, 이 차이를 이해하면 프로그램의 계산 결과를 해석하는 데 도움이 된다.

4. 문자를 표현하는 방법

컴퓨터는 문자에도 번호를 부여해 저장하고 처리한다. 이때 사용하는 규칙이 문자 인코딩(Character Encoding)이다.

4.1 ASCII

ASCII는 영문자, 숫자, 기호, 제어 문자 등을 표현하는 문자 코드이다.

문자ASCII 십진수 코드8자리로 적은 이진수
A6501000001
B6601000010
a9701100001
04800110000

ASCII 자체는 7비트 코드이며, 위 표에서는 보기 쉽게 8자리로 표시했다.

여기서 숫자 0과 문자 '0'은 다르다. 하나는 계산에 사용하는 수이고, 다른 하나는 숫자 모양의 문자이다.

4.2 Unicode와 UTF-8

ASCII만으로는 한글을 비롯한 세계의 다양한 문자를 표현하기 어렵다.

Unicode는 다양한 문자에 코드 포인트라는 고유한 번호를 부여하는 표준이다. UTF-8은 그 번호를 바이트열로 표현하는 인코딩 방식 중 하나이다.

구분역할
Unicode문자에 코드 포인트를 부여
UTF-8코드 포인트를 바이트열로 표현

UTF-8에서는 문자에 따라 1~4바이트를 사용한다. 영문 기본 문자는 보통 1바이트, 완성형 한글 음절은 3바이트로 표현된다.

따라서 문자열의 바이트 수가 화면에 보이는 글자 수와 항상 같지는 않다.

5. 자료형은 왜 필요할까?

자료형(Data Type)은 값의 종류와 범위, 그리고 사용할 수 있는 연산을 정하는 데 도움을 준다.

C 언어의 대표적인 자료형을 살펴보자.

자료형주요 용도예시
int정수학생 수, 점수
float부동소수점 수측정값
double일반적으로 float보다 높은 정밀도의 부동소수점 수평균값, 과학 계산
char문자 코드 등을 담는 정수형영문 문자 한 개

자료형의 크기는 구현 환경에 따라 달라질 수 있다. C에서는 sizeof로 자료형이나 객체가 차지하는 바이트 수를 확인할 수 있다.

자료형을 정한다는 것은 단순히 저장 공간을 고르는 일이 아니다. 데이터가 어떤 의미를 가지며, 어떤 연산을 할 것인지 함께 결정하는 일이다.

6. 여러 자료를 하나로 묶기

학생 한 명을 표현하려면 학번, 이름, 성적처럼 서로 다른 종류의 자료가 필요하다.

C에서는 구조체(Structure)를 이용해 관련 자료를 묶을 수 있다.

struct Student {
    int id;
    char name[30];
    double score;
};
코드의미
struct Student학생 정보를 담는 구조체 정의
int id;정수형 학번 저장
char name[30];이름을 저장할 문자 배열
double score;성적 저장

name[30]은 char 원소 30개를 저장할 공간이다. C 문자열은 끝에 종료 문자 '\0'이 필요하므로, 이 배열에는 종료 문자를 제외하고 최대 29바이트의 내용을 담을 수 있다.

한글처럼 여러 바이트를 사용하는 문자가 포함되면 저장 가능한 글자 수는 더 적어진다.

또한 실제 시스템의 학번은 앞자리 0이나 문자 포함 여부를 고려해 문자열로 저장하는 것이 적합할 수도 있다.

7. 추상화: 필요한 특징에 집중하기

추상화(Abstraction)는 목적에 필요한 특징을 골라 표현하고, 불필요한 세부 사항을 감추는 과정이다.

성적 관리 프로그램에서 학생을 표현한다고 생각해 보자.

실제 학생은 다양한 특징을 가지고 있지만, 성적 관리에는 주로 다음 정보가 필요하다.

  • 학번
  • 이름
  • 수강 과목
  • 성적

반면 신발 색이나 좋아하는 음식은 성적 관리의 목적과 직접 관련이 없다.

추상화에서는 “모든 정보를 담을까?”보다 “이 문제를 해결하는 데 어떤 정보가 필요한가?”를 먼저 묻는다.

8. 구체화: 실제 구현으로 옮기기

구체화는 추상적으로 정한 개념과 기능을 실제로 동작하는 형태로 만드는 과정이다.

단계학생 성적 관리 예시
추상화학생은 학번, 이름, 성적을 가진다고 정함
구체화C 구조체의 각 멤버와 자료형으로 구현
처리학생 정보를 추가하고 성적을 조회하는 코드 작성

같은 학생 정보라도 프로그램의 목적과 환경에 따라 다른 방식으로 구현할 수 있다.

스택 역시 “마지막에 넣은 것을 먼저 꺼낸다”는 규칙을 먼저 정하고, 실제 저장 방식은 배열이나 연결 리스트로 구현할 수 있다.

이처럼 추상화와 구체화를 구분하면 내부 구현이 바뀌어도 필요한 기능을 중심으로 생각할 수 있다.

9. 이번 주 핵심 정리

핵심 개념한 문장 정리
비트0 또는 1을 표현하는 기본 단위
바이트일반적으로 비트 8개를 묶은 단위
이진수0과 1을 사용하는 수의 표현
2의 보수정해진 비트 수에서 부호 있는 정수를 표현하는 방식
문자 인코딩문자를 바이트열로 표현하는 규칙
자료형값의 종류와 표현 범위, 연산을 정하는 기반
구조체관련 있는 여러 자료를 하나로 묶는 C의 기능
추상화목적에 필요한 특징과 기능을 골라 표현하는 과정
구체화정한 개념과 기능을 실제 구현으로 옮기는 과정

컴퓨터의 자료를 이해하려면 저장된 비트뿐 아니라, 그 비트를 해석하는 규칙도 함께 알아야 한다.

10. 복습 질문

  1. 4비트로 표현할 수 있는 비트 조합은 몇 개인가?
  2. 이진수 1010을 십진수로 바꾸면 얼마인가?
  3. 같은 비트열이 서로 다른 값으로 해석될 수 있는 이유는 무엇인가?
  4. 숫자 0과 문자 '0'은 어떻게 다른가?
  5. 성적 관리 프로그램에서 학생을 추상화할 때 필요한 정보는 무엇인가?
  6. 추상화와 구체화의 차이를 스택이나 학생 정보의 예로 설명해 보자.

11. 나의 학습노트

  • 오늘 이해한 개념:
  • 아직 헷갈리는 개념:
  • 숫자와 문자의 표현에서 새롭게 알게 된 점:
  • 생활 속에서 발견한 추상화의 예:
  • 다음 수업에서 확인하고 싶은 질문:

12. 다음 학습과 연결하기

이번 주에는 개별 자료의 표현과 관련 자료를 묶는 방법을 살펴보았다.

다음에는 여러 데이터를 순서대로 저장하는 배열을 학습한다. 배열의 인덱스, 메모리 배치, 삽입과 삭제를 살펴보며 자료구조가 실제 프로그램에서 어떻게 동작하는지 확인한다.

태그: 자료구조 자료표현 이진수 자료형 추상화 C언어 수업노트 2주차

profile
sunshine

0개의 댓글