스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음 (6) - if문 (조건문)

스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음 (6) - if문 (조건문) 본문

스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음 (6) - if문 (조건문)

KRONNA 2016.07.01 10:01


* 이번 글부터 SuperKarel을 사용하셔도 됩니다. 여러분의 카렐 코드에서 public void run() {} 메소드 위에 있는 public class CollectNewspaper extends 다음에 있는 "Karel"을 "SuperKarel"으로 바꾸시면 turnRight와 turnAround를 새로 작성하지 않으셔도 괜찮습니다. 




이번 강의에서는 주어진 상황에서만 코드를 실행하도록 하는 "if문 (조건문)"을 배워보겠습니다. 벽이 앞에 있는데도 카렐이 move();를 실행하면 카렐은 고장나고 말죠. 이걸 방지하기 위해서 카렐이 move를 실행하기 전 앞이 벽으로 막혀 있지 않다는걸 확인한 후 그 상황에서만 move();를 실행하면 안전하지 않을까요? if문은 그걸 가능하게 해줍니다. if문은 이렇게 작성하면 됩니다:

if (어떤 상황) {

move();

}

카렐에게 이 코드의 의미는 이렇습니다: "만약에 [어떤 상황]이라면, move();를 실행해라". 어떤 상황 대신에 앞이 벽 없이 비어있다는 의미의 "frontIsClear()"을 적으면 "앞이 비어있는 상황이라면, move();를 실행해라"가 되죠.



위 동영상은 아래 코드를 실행한 모습입니다:

if (frontIsClear()) {

move();

}



프로그래머는 이미 카렐의 세계가 어떻게 생겼는지 아는데 왜 카렐이 직접 판단하도록 해야할까요? "신문 가져오기"에서는 여러분이 카렐의 세계를 정확히 알 수 있었지만, 다음 과제인 "기둥 수리"에서는 하나의 프로그램으로 여러가지 세계에서 기둥을 수리해야 합니다. 수 많은 세계에 맞춰 하나 하나 프로그래밍할 수는 없으니 카렐이 그때 그때 상황을 보고 실행하도록 해야하는 거죠. 카렐의 if문에서 사용할 수 있는 [어떤 상황]들의 리스트는 카렐 레퍼런스(클릭)에서 확인하실 수 있습니다. if문을 이해하셨나요? 그렇다면 연습 문제를 한번 풀어보세요!


연습 문제: 카렐에게 "동쪽을 보고 있을 뿐만 아니라 앞에 벽도 없는 경우에만 앞으로 전진해라!"라고 명령하려면 어떻게 코딩 해야하나요?


정답은 댓글로 적어두겠습니다. (힌트: if문 안에 또 다른 if문을 적는 것도 가능하답니다. 코드 블락 {} 안에 또 다른 코드 블락을 적는 것을 "nesting (네스팅)"이라고 부릅니다.



위 로봇은 Tufts 대학교에서 개발한 로봇입니다. 이 로봇들은 자기가 다칠 위험이 있으면 인간의 명령에 불복종하죠. 예를 들면 책상 끝에 서있을때 인간이 낭떠러지 방향으로 걸어가라 명령하면 거절합니다. 여러분도 벌써 앞에 벽이라는 위험이 있다면 move();라는 명령을 무시하는 로봇을 프로그래밍 하실 수 있다는게 신기하지 않나요? 이제 "loop(루프)"라 불리는 반복문만 배우시면 드디어 카렐의 모든 기능을 다 배우시게 됩니다. 그러면 "신문 가져오기"보다 길고 복잡한 과제들을 시도해볼 수 있게 되는거죠. 기대되지 않나요? 다음 강의에서는 바로 반복문을 배워보겠습니다.


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시간 내로 답변 드리겠습니다. 설명을 따라했는데도 똑같이 작동하지 않거나 설명에 이해하기 어려운 부분이 있으면 주저하지 말고 질문 보내주세요! ^^

5 Comments
댓글쓰기 폼