-
Scratch | Harvard CS50 Week 0Computer Science/CS 50 Harvard 2021. 10. 30. 18:54
Harvard 대학교 CS50 2021년 강의를 한글로 정리한것입니다.
"Hello world"
C로 "Hello, world"라는 메세지를 내뱉기 위해서는 아래와 같은 코드를 작성하면 된다.
#include <stdio.h> int main(void) { printf("hello, world\n"); }
만약 이것을 Python으로 하려면 이렇게 하면 된다.
print("hello, world")
Scratch
처음 프로그래밍을 배우는 사람이라면, 이것이 어떻게 다른지, 왜 다양한 언어가 존재하는지 모를것이다. 그런 사람들을 위해 시각화된 언어들이 존재하는데, 그중 Scratch라는 언어를 이용해서 블록을 움직이고 엮어서 알고리즘을 만들어볼것이다. 앞에서 보았던 C나 Python의 예시보다는 조금 친숙한 이미지이다. Scratch는 MIT에서 개발한 블록으로 만든 코딩 커뮤니티이고, 어린이들이 코딩을 쉽게 할 수 있도록 만든것이다. 스크래치로 가서 코딩을 어떻게 할 수 있는지 살펴보자.
이미지에서 보여지듯, 왼쪽에는 퍼즐들이 있는데 이것은 functions(함수들)과 variables(값들) 또는 다른 컨셈들이 있고, 가운데 있는 공간에 떨어뜨려놓을 수 있다. 오른쪽 아래에는 캐릭터를 가져와서 사용할 수 있다. 오른쪽 위에는 프로그램을 확인할 수 있다.
위에 보여지는것처럼 Scratch(스크래치)는 coordinate-based이다. 즉, 좌표를 이용해서 캐릭터를 움직일 수 있다. 2D의 공간에서, 가운데는 x가 0, y가 0이고, 위 아래로 180까지, 양 옆으로 240까지 갈 수 있다. 즉, 캐릭터를 상하좌우로 x, y값을 바꿔주면서 움직일 수 있다.
파란색 블록들은 Motion을 나타낼 수 있는데, 어떤것을 움직이게 할 수 있다. Events는 무언가 액션이 발생하는것에대한 블록이다. 예를들어, 녹색 깃발을 클릭했을 때, 스페이스 키를 눌렀을때 등 조건을 만들어줄 수 있다.
보라색 블럭들은 생김새나 색깔, 옷을 바꿔줘나 무언가를 말하게 해주는 것들이다.
노란색 블럭들은 이벤트 카테고리의 블럭인데, 이 블럭은 어떤 것들을 조건에 해당하면 일어나게 할 수 있게끔 도와주는 블럭들이다. 예를을면 깃발이 눌렸을 때, Space키가 눌렸을 때 등의 이벤트를 감지할 수 있도록 해준다.
컨트롤은 conditions를 나타내는데, 이는 앞서 말한 Boolean expressions이 true일때 어떠한 행동을 하게끔 해주거나, 잠깐 멈추는 등의 동작을 할 수 있게 하고, 10번을 반복하는등의 컨트롤을 해준다.
Sensing 블럭들은 Boolean expressions나 질문이 들어있다.Control과 함께 쓰여진다.
Operators블럭은 수학적 처리를 하거나 랜덤하게 숫자를 골라주거나 또는 숫자가 큰지 작은지 Boolean expressions를 해주기도 한다.
Variables 블럭은 값들을 저장할 수 있도록 해주고, 그 값에 무엇이 들어있는지 저장한다. 숫자 뿐만 아니라 단어도 저장할 수 있다.
이렇게 다양한 블럭을 가지고 기본적인 지식 없이도 코딩을 해볼 수 있다.
Hello World
Events 와 Looks에서 위와같은 블럭을 가져와서, 말하고싶은 메세지를 넣어준 후, 초록 깃발을 눌러주면 고양이가 "Hello World"라고 말하게 만들 수 있다. say옆에 문장을 원하는대로 바꾸면, 바꾸어진 문장대로 고양이가 말한다.
What is your name?
이번에는 조금더 복잡한 것을 시도한다. 답을 줄때까지 기다린 후, Hello! ㅇㅇ(이름)이라고 말하는 고양이를 만들어보자. ask and wait이라는 블럭이 있는데, 어떤 질문을 묻고, 사용자가 입력을 할때까지 기다려주는것이다. 사용자가 어떤 질문에 대한 답을 하고 오른쪽에 있는 파랑색 체크표시를 눌렀을 때, 사용자가 입력한 값은 "answer"이라는 블럭에 저장된다.
위와같이 블록을 배치해본다. 여기서 say Hello!는 Hello를 말하게 하고, say answer는 입력한 이름을 말하게 한다. 여기서 "answer"블록은 variable이다. 즉, 어떠한 값을 저장하는데 이것은 프로그램을 실행시긴 이후, 그것을 사용하는 유저가 넣은 값이고, 우리가 문장을 넣는것이 아니라, 유저에게 받은 값으로 말하도록 할 수 있다.하지만, 이런 배치로 깃발을 눌렀을 때, Hello!는 보이지않고 Jieun이라고만 말하는 고양이를 볼 수 있다.
무엇이 문제일까? 여기서 쓸수 있는것이 바로 join 블럭이다.
위에서처럼, join블럭을 이용해서 hello, 와 anwer에 저장된 유저가 준 정보를 합쳐서 문장을 만들고, 그것을 말하도록 하는것이다. 자, 그러면 join이라는 Operators블럭을 가지고 다시한번 시도해보자.
위와같이 블록을 배열하고, Jieun이라는 이름을 주게되면,
고양이가 친절하게 인사를 해주고, 원하는 "Hello, 이름"의 포맷으로 문장을 만들어냈다. 그렇다면, 고양이를 실제로 말하게 할 수 있을까? Speak블럭을 이용하면 가능하다. 왼쪽 아래에 보면 Extension을 추가할 수 있는 옵션이 있다.
위와같이 여러가지 기능을 추가할 수 있는데, 여기서 Text to Speech기능을 추가한다.
speak블럭을 추가하면, 고양이는 Hello, Jieun 이라는 텍스트 메세지를 보여줌과 동시에, 소리로도 문장을 읽어준다. 이것은 cloud(인터넷에 있는 컴퓨터 서버)가 우리의 텍스트를 오디오로 변환해서 실시간으로 보내주는것이다.
Reference
'Computer Science > CS 50 Harvard' 카테고리의 다른 글
C | Harvard CS50 Week 1 (0) 2021.11.04 Abstraction, Condition and More in Scratch | Harvard CS50 Week 0 (0) 2021.10.31 Pseudocode | Harvard CS 50 Week 0 (0) 2021.10.30 Algorithms | Harvard CS 50 Week 0 (0) 2021.10.29 Images, video, sounds | Harvard CS 50 Week 0 (0) 2021.10.28