[CS50 2019] 1강. Computational Thinking, Scratch - 1

OFFDUTYBYBLO·2021년 11월 8일
0
post-thumbnail

0. Prologue

컴퓨터 과학은 단지 문제를 해결하는 과정이다. 어떠한 Input이 있을 때, 그로부터 어떠한 출력을, 그 문제에 대한 답을 찾는 것이다. 그 중간 과정이 바로 컴퓨터 과학이다.

우리는 이 과정을 다루기 위해서는 기계와 소통하기 위해 어떠한 약속이 필요하다. 따라서 컴퓨터 과학의 첫 번째 개념은 바로 정보 자체의 표현 방법이다.

1. 2진법 : 컴퓨터의 표현 방법

2진법

2진법은 0 과 1의 조합이다. 우리가 일상에서 접하는 숫자라는 기호는 10진법에 기초하여 표현하고 이해한다. 인간은 숫자라는 기호 체계를 이용하여 수학이라는 개념도 이해할 수 있다. 하지만 컴퓨터에게 주어진 숫자는 우리와 다르게 0과 1밖에 없다. 컴퓨터는 0과 1로 모든 숫자들을 표현해야하는 상황이다. 여기서 0과 1을 우리는 bit라고 부른다.

bit와 byte

bit는 단지 이진 숫자를 의미하고, 0 또는 1을 뜻한다. 컴퓨터는 bit를 통해서 전원을 통해서 전기가 들어옴과 들어오지 않음을 0과 1로 표현하고 구분할 수 있다. 다시 말해서, 어떤 컴퓨터 안에서 일어나는 일들을 bit로 표현하는 것이다. 하지만 본인의 스마트폰과 맥북을 들여다보면, 더 많은 경우의 수를 표현해야 한다. 컴퓨터는 이를 가장 효율적으로 관리할 수 있는 방법인 8bit를 하나로 묶어서 byte 단위를 사용한다.
다시 말해서, 큰 수들을 더 다양한 방법으로 표현하기 위해서 가장 효율적으로 사용할 수 있는 8bit를 하나의 단위인 byte로 묶어서 사용한다.

왜 굳이 8비트인가?
컴퓨터 아키텍쳐가 영문권인 곳에서 발전했기 때문이라고 전해진다. 0101010 로 이루어진 전자신호를 사람이 인식할 수 있는 문자로 저장을 했어야 했는데, 이런 문자를 표현하는 코드들의 숫자가 7bit ~8bit 으로 충분했기 때문이라고 한다. 그 이유로 1Byte에 문자 1개를 저장할 수 있는 8bit 구조가 된 것이라고 한다.

트랜지스터

컴퓨터는 트랜지스터라는 반도체에 소량의 전기를 저장해서 데이터를 판단한다. 트랜지스터는 전압과 전류를 증폭시키거나 스위칭하는 역할을 하는 반도체이다. 우리는 이 트랜지스터를 통해서 스피커를 만들 수도 있고, 컴퓨터의 cpu를 만들 수도 있다.
여기서 우리가 말하는 트랜지스터의 역할은 전기의 스위칭 역할을 의미한다. 컴퓨터는 각 트랜지스터에 전기가 저장되고 꺼지고 반복하면서 0과 1을 표현한다.

정리

  1. 컴퓨터는 다양한 데이터를 이진법(0과1)으로 표현한다.
  2. 여기서 0 과 1을 bit라고 부른다.
  3. bit로만 데이터를 표현하기에는 너무 부족하고 관리가 어렵다.
  4. 이를 해결하기 위해서 8bit를 1byte로 묶어서 사용하기 시작했다.
  5. 컴퓨터는 이 과정을 트랜지스터라는 반도체를 사용해서 연산에 사용한다.
  6. 트랜지스터는 전압과 전류를 증폭하는 역할과 스위칭하는 역할을 한다.

2. 정보의 표현

만약 컴퓨터가 수많은 스위치들을 끄고 켜서 숫자를 표현한다면 숫ㅏ가 아닌 문자 A와 같은 것들은 어떻게 표현할 수 있을까? 당연히 숫자로 표현할 수 있다. 우리 모두가 동의한다면 가능한 일이다.

알파벳 A를 숫자로 환산하면?

우리는 수십년 전에 대문자 A를 숫자 65로 표현하기로 정했다. 즉, 컴퓨터에 1byte의 정보가 있다면, 컴퓨터는 8비트 또는 8개의 스위치로 대문자 A를 저장하기 위해서 2의 7(64)제곱의 스위치와 2의 0(1)제곱 스위치를 켜서 대문자 A를 숫자 65로 표현할 것이다. 이를 다시 이진법 패턴으로 표현하면
'01000001'패턴이다.

ASCII

인간의 문자 체계는 생각보다 많이 복잡하다. 우리는 알파벳을 낱개로 사용하지 않고 이를 문자, 문장, 문단으로 확장해서 사용한다. 거기에 문자 기호까지 표현할 수 있어야 한다. 우리는 이 체계를 ASCII라는 체계를 가져와서 사용한다. ASCII는 정보 교환을 위한 미국 표준 코드로 전 세계 사람들이 수십년 전에 모두 동의한 잘 만들어진 지도라고 표현할 수 있다.

유니코드(UNICODE)

하지만 ASCII은 너무 미국 편향적인 체계이며, 더 다양한 국가의 언어를 표현하기에는 한계가 있다. 또한 우리가 최근에 많이 사용하는 이모티콘도 결국엔 코드로 이루어진 문자 표현이다. 이렇게 다양한 문자와 기호들을 사용하기 위해 우리는 더 큰 개념의 코드가 필요하다. 이게 바로 유니코드(UNICODE)이다.

유니코드는 8이나 16,24 혹은 32비트까지도 사용하므로 훨씬 더 많은 0과 1의 패턴들을 나타낼 수 있다.

그렇다면 이미지도 이진법으로?

컴퓨터의 이미지는 수많은 점들로 이루어져 있다. 컴퓨터는 각 점들을 어떻게 표현할까? 우리는 RGB라고 불리는 색의 체계에 의해 표현한다.
빨강/초록/파랑의 조합으로 모든 색을 표현한다. 우리는 각 색들의 숫자들을 약속하는 체계를 만들었고, 컴퓨터는 숫자를 통해서 RGB체계에 녹여서 우리에게 다시 색으로 표현해주는 것이다.

정리하면, 우리가 색을 표현하는 어떤 사진이나, 그림을 친구에게 보낼 때 사실 우리는 3개의 RGB값을 코드로 보내는 것이다. 그럼 컴퓨터가 받은 3개의 RGB값을 조합해서 숫자로 환산하고 이를 화면에 표현해준다. 여기서 숫자는 우리가 앞에 말한 약속한 색의 숫자이다. 이 숫자를 다시 컴퓨터는 0과 1로 저장하고 해석한다.

정리

이 모든 과정이 오늘날 컴퓨터에서 정보를 표현하는 거의 모든 방법이다.

  • 0과 1을 사용해서 2진수를 나타낸다.
  • 2진수를 사용해서 10진수를 나타낸다.
  • 10진수를 사용하여 화면상의 글자나 색깔을 나타낸다.
  • 색을 통해 이미지를 표현하고, 이미지를 빠르게 루핑시켜 영상을 만든다.

결국, 컴퓨터는 어떤 정보를 표현하더라도 2진법으로 표현하고 이해한다.

profile
블로그 운영 x

0개의 댓글