모두를 위한 컴퓨터 과학 (CS50 2019) 1강. 컴퓨팅사고

Daisy 🌼·2022년 7월 10일
0

Computer science

목록 보기
1/6
post-thumbnail

1. 2진법

컴퓨터 과학

컴퓨터 과학은 문제 해결에 대한 학문으로, 문제 해결은 입력(input)을 전달받아 출력(output)을 만들어내는 과정이며, 그 중간에 있는 과정이 바로 컴퓨터 과학이다.
이러한 입력과 출력을 표현하기 위해선 우선 모두가 동의할 약속(표준)이 필요하기 때문에,
컴퓨터 과학의 가장 첫 번째 개념은 어떻게 표현하는지에 대한 표현 방법이다.

https://cphinf.pstatic.net/mooc/20200607_118/1591509237959928I3_PNG/mceclip0.png

2진법

숫자 10을 2진법으로 표현하기 위해서 최소 4비트 필요

우리가 일상에서 사용하는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 총 10개의 기호로 표현하는 것이 10진법
하지만 컴퓨터에는 이렇게 많은 숫자가 없으며, 오직 0과 1로만 데이터를 표현한다.

이처럼 0과 1로만 표현하는 것을 2진법이라고 하며,
컴퓨터는 신기하게도 오로지 0과 1만으로 숫자 뿐만 아니라 글자, 사진, 영상, 소리 등을 저장할 수 있다.

다음과 같이 123을 보면 '백이십삼'으로 읽을 것이다.

https://cphinf.pstatic.net/mooc/20200607_185/1591510753380nYdg2_PNG/mceclip1.png

'백이십삼'으로 읽는 이유는 1을 백의자리, 2를 십의자리, 3을 일의자리로 보기 때문인데,
이것을 표현하면 '1x100 + 2x10 + 3x1 = 123'이 된다.

사람들은 이런 과정을 아주 당연하게 여기며, 이는 이러한 표현에 대한 약속이 있기 때문이다.
이 약속에서 자리수를 10의 거듭제곱으로 표현한다.

비슷하게 2진법에서는 두 개의 숫자만 있으므로 각 자리수가 2의 거듭제곱을 의미한다.
https://cphinf.pstatic.net/mooc/20200607_209/1591512453958WWybq_PNG/mceclip2.png

💡 그럼 이 방법으로 10진법의 3을 2진법으로 표현하면 어떻게 될까?
11로 표현할 수 있으며, 표를 보면 2진법에서는 두 번째 자리는 2¹로 2이다.

https://cphinf.pstatic.net/mooc/20200607_19/1591512545601J5dkm_PNG/mceclip3.png

따라서 2진법에서 11은 2¹x1 + 1x1 = 3이며,
마찬가지로 2진법에서 100은 2²x1 + 2¹x0 + 1x0 = 4이다.

이와 같은 2진법은 전기를 통해 연산하는, 즉 전기를 켜고 끄는 방식으로 작동하는 컴퓨터에게 적합한 방법이며, 컴퓨터에는 굉장히 많은 스위치(트렌지스터)가 있고 on/off 상태를 통해 0과 1을 표현한다.

컴퓨터는 2진법에서 하나의 자릿수를 표현하는 단위를 비트(bit)라고 한다.

비트

정보를 저장하고 연산을 수행하기 위해 컴퓨터는 비트(bit)라는 측정 단위를 쓴다. 비트는 이진 숫자라는 뜻을 가진 “binary digit”의 줄임말이며, 0과 1, 두 가지 값만 가질 수 있는 측정 단위이다. 디지털 데이터를 여러 비트들로 나타냄으로써 두 가지 값만을 가지고도 많은 양의 정보를 저장할 수 있으며, 또한 컴퓨터는 저장되어 있는 데이터를 수정하기 위해 비트에 수학적 연산을 수행할 수 있다.

비트열

하나의 비트는 0과 1, 이 두 가지의 값만 저장할 수 있다. 컴퓨터 내부에서 물리적 표현될 때는, 켜고 끌 수 있는 스위치라고 생각할 수 있다. (켜기=1, 끄기=0)

하지만 비트 한 개는 많은 양의 데이터를 나타내기에 턱없이 부족하다. 그렇기 때문에 여러 숫자 조합을 컴퓨터에 나타내기 위해 비트열을 사용한다. 바이트(byte)는 여덟 개의 비트가 모여 만들어진 것이다. 하나의 바이트에 여덟 개의 비트가 있고, 비트 하나는 0과 1로 표현될 수 있기 때문에 2^8 = 256 개의 서로 다른 바이트가 존재할 수 있다.

바이트가 모이면 더 큰 단위가 될 수 있다. 킬로바이트는 1,000 바이트, 메가바이트는 1,000 킬로바이트(100만 바이트), 기가바이트는 1,000 메가바이트(10억 바이트)이다. 테라바이트는 1,000 기가바이트(1조 바이트)이며, 심지어 페타바이트와 엑사바이트와 같은 더 큰 단위도 존재한다.

https://cphinf.pstatic.net/mooc/20171117_70/1510912069789p09Nl_JPEG/1.1_-01.jpg?type=w760

https://cphinf.pstatic.net/mooc/20170712_297/1499826249488D4i2V_PNG/1.1_-02.png?type=w760

다양한 데이터 표현하기

https://cphinf.pstatic.net/mooc/20170712_75/1499826291828lfvjK_PNG/1.1_-03.png?type=w760

하나의 비트로는 어떠한 값이 참인지 거짓인지, 예를 들면, 노트북이나 휴대전화가 충전 중인지 아닌지에 대한 정보만 컴퓨터에 저장할 수 있다. 하나의 바이트(8 bit)로 알파벳 하나를 표시할 수 있다.

더 큰 데이터 단위는 좀 더 복잡한 유형의 데이터를 저장할 수 있다. 오른쪽 표의 일부 예제를 보면 알 수 있듯이, 1 KB는 몇 문단의 문자를 나타낼 수 있고, 1 MB는 1분가량의 노래 파일의 크기와 같고, 1 GB는 약 30분 길이의 HD 영화 정도의 크기이다.

2. 정보의 표현

문자의 표현

💡 컴퓨터가 스위치를 ON/OFF하면서 숫자를 표현한다고 했다면, 문자는 어떻게 표현할까?

  • 바로 문자를 숫자로 표현 할 수 있도록 정해진 약속(표준) 이 있다.
    그 중 하나는 ASCII (아스키코드/American Standard Code for Information Interchange) 이다.
    128개의 부호로 정의되어 있는데, 가령 알파벳 A는 10진수 기준으로 65, 알파벳 B는 66로 되어있다.
    https://cphinf.pstatic.net/mooc/20200607_151/159151581039966Tkp_PNG/mceclip0.png

A를 2진법으로 표현해보면,
우선 10진법 기준으로 65이므로 26x1+25x0+24x0+23x0+22x0+2x0+1x1 (64+1)로 표현할 수 있다.
따라서 A를 2진법로 표현하면 1000001 이다.

이 외에도 Unicode라는 표준에서는 더 많은 비트를 사용하여 더 다양한 다른 문자들도 표현가능 하도록 지원하고 있다. ASCII로는 문자들을 표현하기에 충분하지 않았기 때문이다.

Unicode는 😂 이런 이모티콘 까지 표현할 수 있게 해주었다.
이 이모티콘은 10진법으로 128,514로, 2진법으로는 11111011000000010 이다.

만약 스마트폰으로 😂(기쁨의 눈물) 이모티콘을 스마트폰으로 보낸다면 11111011000000010 이라는 0과 1의 패턴을 보낸 것이다. 그럼 상대방의 스마트폰의 안드로이드 혹은 iOS는 0과 1의 패턴을 받아 노란색 얼굴에 눈물을 흘리고 있는 사진으로 보여줄 것이다.

그림, 영상, 음악의 표현

문자와 같이 그림도 역시 숫자로 표현할 수 있다. 우리가 스크린을 통해 보는 그림을 자세히 살펴 보면 수많은 작은 점들이 빨간색, 초록색, 파란색을 띄고 있다.이런 작은 점을 픽셀이라고 부른다. 각각의 픽셀은 세 가지 색을 서로 다른 비율로 조합하여 특정한 색을 갖게 된다. 예를 들어 빨간색 72, 초록색 72, 파란색 33을 섞게 되면 노란색이 되는 것과 같은 방식이다.

이 숫자들을 표현하는 방식을 RGB(Red, Green, Blue)라고 한다.
즉, 노란색의 커다란 이미지는 72 73 33 으로 정의되는 무수히 많은 픽셀들의 RGB코드(숫자)로 표현할 수 있다.

영상 또한 수많은 그림을 빠르게 연속적으로 이어 붙여놓은 것이기 때문에 숫자로 표현이 가능하며,
음악도 마찬가지로 각 음표를 숫자로 표현할 수 있다.

3. 알고리즘

컴퓨터에 정보를 입력하는 방식을 배웠다면 이 정보를 컴퓨터는 어떻게 가공하여 출력하는 걸까?
일상생활에서 다양한 문제를 처리하는 방식처럼, 컴퓨터 또한 순서대로 필요한 동작을 하며 문제를 처리한다. 이를 알고리즘이라고 하는데, 알고리즘은 어떻게 정의할 수 있고, 그 정확성과 효율성은 어떨까?

알고리즘

알고리즘이란 입력값을 출력값의 형태로 바꾸기 위해 어떤 명령들이 수행되어야 하는지에 대한 규칙들의 순서적 나열이다.

이러한 일련의 순서적 규칙들을 어떻게 나열하는지에 따라 알고리즘의 종류가 달라지며,
같은 출력값이라도 알고리즘에 따라 출력을 하기까지의 시간이 다를 수 있다.

의사코드

의사코드는 필요한 행동이나 조건을 잘 설정하여 컴퓨터가 수행해야 하는 일을 절차적으로 파악할 수 있게 도와준다.

https://cphinf.pstatic.net/mooc/20200608_180/1591579125976fF0NI_PNG/mceclip0.png

  1. 전화번호부를 집어 든다
  2. 전화번호부의 중간을 편다
  3. 페이지를 본다
  4. 만약 Mike Smith가 페이지에 있으면
  5. Mike Smith에게 전화한다.
  6. 그렇지 않고 만약 Mike Smith가 앞 페이지에 있으면
  7. 앞 페이지의 절반을 편다
  8. 3번째 줄부터 다시 실행한다
  9. 그렇지 않고 만약 Mike Smith가 뒷 페이지에 있으면
  10. 뒷 페이지의 절반을 편다
  11. 3번째 줄부터 다시 실행한다
  12. 그러지 않으면
  13. 그만둔다

의사코드를 보면 한 번씩 들어봤을 C언어나 파이썬과 같은 언어에서도 볼 수 있는 여러가지 공통점이 있다.

https://cphinf.pstatic.net/mooc/20200607_84/1591529602350iS3Ov_PNG/mceclip3.png

노란색으로 강조된 부분들은 앞으로 함수(functions)로 불린다.

함수는 컴퓨터에게 이 경우에는 사람에게 무엇을 할지 알려주는 동사와 같다.

https://cphinf.pstatic.net/mooc/20200607_42/15915298004182FtAt_PNG/mceclip4.png

다음으로 노란색으로 강조된 부분들은
조건이라고 부르며, 이 것은 여러 선택지 중 하나를 고르는 것 이다.

https://cphinf.pstatic.net/mooc/20200607_38/1591529873126cFy5P_PNG/mceclip5.png

앞서 말한 결정을 내리기 위한 질문이 필요하다. 이것을 불리언(Boolean)이라고 한다.

답이 Yes(예) 또는 No(아니오) 혹은 True(참) 또는 False(거짓)으로 나오는 아니면 2진법에서 0또는 1로 나오는 질문을 뜻한다.

https://cphinf.pstatic.net/mooc/20200607_179/1591530051741KueHW_PNG/mceclip6.png

마지막으로 노란색으로 강조된 부분은 루프(loop)라고 하며, 뭔가를 계속해서 반복하는 순환을 뜻한다.

profile
세상을 이롭게하는 AI Engineer

0개의 댓글