스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음 (4) - 카렐 신문 가져오기 (첫 프로그램)

스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음 (4) - 카렐 신문 가져오기 (첫 프로그램) 본문

스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음 (4) - 카렐 신문 가져오기 (첫 프로그램)

KRONNA 2016.06.24 14:33


첫 프로그램을 작성할 준비가 되셨나요? 프로그래밍은 자기가 직접 쓴 코드가 작동되는걸 보는 재미로 하는 겁니다. 그러니 바로 시작해보죠!


신문 가져오기 과제



아침이 밝아오고 카렐이 집 구석에서 일어났습니다. 오늘은 어떤 소식이 있을까? 신문을 읽고 싶은데 신문은 집 현관 앞에 놓여있네요. 여러분의 과제는 비퍼로 표현된 신문을 카렐이 주어올 수 있도록 프로그램 (명령들)을 적어주는 것입니다. 집 왼쪽 위(북서쪽)에 있는 카렐이 어떻게 집 오른쪽 (동쪽)에 있는 신문을 주어올 수 있을까요?



프로그래머 방식 접근법


프로그래머는 프로그래밍을 사용해 문제를 해결하는 사람입니다. 효과적인 프로그램을 적는 프로그래머는 한번에 문제 전체를 해결하는 것이 아니라, 문제의 각 부분을 해결하는 작은 프로그램들을 하나로 모아서 전체 문제를 해결하는 큰 프로그램을 만들죠. 우리 역시 문제를 해결하기 전 분석으로 시작해봐요.


우리가 해결해야하는 전체 문제는 무엇인가요? 그 문제는 어떤 작은 문제들로 이루어져 있나요? 오늘 카렐이 풀어야하는 문제는 "신문 가져오기"입니다. "신문 가져오기"는 "신문으로 이동하기", "신문 가져오기", "원래 자리로 돌아오기"로 이루어져 있죠. 원래 자리로 돌아온 다음에는 처음 시작했을 때 처럼 화면 오른쪽을 보고 서있어야 한다는 점 잊지 마세요!



코드 작성하는 방법



이클립스에서 karel 폴더 안에 src 폴더 안에 (default package) 안에 있는 CollectNewspaper.java 파일을 열면 위와 같은 화면을 볼 수 있습니다. (참고로 java 파일은 자바 프로그램이 적혀있는 파일입니다.) 


지금은 아직 "* TODO: comment this program.."부터 "// TODO: write the code to implement this program"까지 아무 걱정 없이 놔두시면 됩니다. 우리가 봐야할 곳은 바로 "public void run() {"과 첫번째 "}"이 위치한 10번, 11번, 12번 줄입니다. public void run()은 "이 프로그램이 시작됐을때 실행할 코드들이 바로 내 바로 뒤에 있는 { } 안에 있는 코드들이다"라는 의미입니다. 그래서 public void run() 바로 뒤에 있는 {가 위치한 10번 줄 끝, 그리고 public void run()을 닫는 }가 위치한 12번째 줄 시작, 이 둘의 사이에 있는 코드들이 프로그램이 시작되면 실행될 코드들이 되는거죠. (참고로 여기서 {와 }사이를 "블락"이라고 부릅니다). 



위 두 사진들은 코드의 예제입니다. 첫번째는 무브를 3번하고, 두번째는 턴레프트를 한번하는 코드입니다. 이렇게 코드를 public void run()의 { } 안에 적으시면 됩니다.



여러분이 프로그래밍할 차례


입니다! 프로그래밍을 성공적으로 하는 비결은 계속 테스트 해보는 것이니 프로그램이 완성되지 않았어도 생각하시는데로 작동하는지 Start Program을 누르며 확인하며 코딩해보세요. 이렇게 하면 프로그램이 다 완성되었다고 생각했을때 여러 부분이 생각대로 작동하지 않는 불상사를 막을 수 있어요. 아래 풀이 동영상을 보기 전에 꼭 직접 프로그램을 작성해보세요!



카렐 신문 가져오기 풀이



프로그래밍에는 정답이 없습니다. 하나의 문제를 해결하는데에는 여러가지 다른 방법들이 있을 수 있죠. 카렐 신문 가져오기도 여러가지 풀이 방법이 있습니다. CollectNewspaper.java를 실행하고 Start Program을 눌렀을 때 카렐이 신문까지 걸어가서, 신문을 줍고, 돌아와서, 처음 시작했을 때 보던 방향을 다시 바라보기만 한다면, 바로 신문만 줍고 돌아오던 신문을 주운 뒤 집을 한바퀴 돌고 돌아오던 상관없이 모두 해결 성공인거죠. 그래서 제 방법은 여러분이 참고하실 수 있도록 올린 한가지 풀이 방법일 뿐입니다. 



멋진걸요? 벌써 프로그래머가 되셨네요. "프로그래밍"과 "코딩"이 생소한 단어라 매우 어려운 것처럼 느껴졌을 수 있습니다. 하지만 직접 해보시니 생각보다 훨씬 쉽지 않나요? 스탠포드의 카렐 없이 자바 그 자체로만 프로그래밍 할 때는 자바의 메소드들을 인터넷에서 검색해보면 됩니다. 실력있는 프로그래머는 문제에 대한 해결 방법, 즉 메소드들을 어떻게 조합할 것인지를 잘 아는 사람이지 메소드를 잘 외우는 사람이 아니니까요. 


이제부터 배울 것들은 프로그래밍을 단순히 해내기만 하는게 아니라 스타일리시하게 해내는 테크닉들입니다. 미래에 어렵고 복잡한 프로그램도 작성하기 위해선 필요한 테크닉들이죠. 다음 수업에는 같이 카렐에게 새로운 명령을 가르쳐보도록 하죠. 왼쪽으로 3번 회전하는 대신 바로 오른쪽으로 도는 명령이 있다면 우리 프로그램이 간결해질 수 있을테니까요. 그럼 다음 글에서 뵈요! ^^


다음 글은 다음 주 금요일 (7월 1일) 오전 10시까지 준비해 올리겠습니다.


Stanford CS106A 수업에 대한 모든 권리는 스탠포드 대학교가 가지고 있습니다. "스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음"은 스탠포드 대학교의 CS106A 수업을 남녀노소 누구나 쉽게 배울 수 있도록 각색하고 한국어로 번역한 내용이며, 본글에 대한 모든 권리도 스탠포드 대학교가 가지고 있습니다. CS106A 수업에 사용되는 교재인 Karel the Robot Learns Java와 The Art & Science of Java를 작성해주신 Eric Roberts 교수님과 CS106A 수업을 가르치고 계시며 해외로 수업 내용 반출을 허락해주신 Mehran Sahami 교수님 그리고 Marty Stepp 교수님께 감사드립니다.


스탠포드 대학교에서 컴퓨터 과학을 전공중인 박준원이라고 합니다. 질문은 junwonpk@stanford.edu로 보내주시면 24시간 내로 답변 드리겠습니다. 설명을 따라했는데도 똑같이 작동하지 않거나 설명에 이해하기 어려운 부분이 있으면 주저하지 말고 질문 보내주세요! ^^

6 Comments
댓글쓰기 폼