75
Chap ter 1 어디서부터 시작해야 하는가 ? 초보 프로그래머를 위한 C# 프로그래밍 C#

초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

Embed Size (px)

Citation preview

Page 1: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

Chapter 1어디서부터

시작해야 하는가?

초보 프로그래머를 위한 C# 프로그래밍C#

Page 2: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

학생들은 종종 어디서부터 시작해야 하는지 묻는다. 이것은 이 책의 도입부에서 다룰만한 적절

한 질문이기도 하다. 이 장에서 여러분은 내가 대학에서 가르치는 학생들의 입장이 되어, 수업

에서 주어지는 프로젝트를 통해 프로그램의 실제 개발 과정을 보게 된다. 이 책에서는 전체에

걸쳐서실생활에서 사용하는응용프로그램의개념정리부터최종 완성까지의전과정을살펴볼

것이다.

Note

때로, 학생들은바로코딩부터시작하지않을것이라는필자의말에당황한다. 그러나프로그래밍은보고서를쓰는

것처럼계획을세우고그 다음에만들어내는, 두 단계의과정임을상기시키면그들은보통진정한다.

어디서부터 시작해야 하는가?어디서부터 시작해야 하는가? 라는 질문에 대해 대답하기 위해 이 장은 SDLC(Syst ems

Development Life Cycle , 시스템 개발 생명 주기)를 살펴본다. SDLC는 시스템이 규칙적,

논리적, 단계적으로 개발되도록 해주는 방법론이다. 이 책은 그 대부분을실세계의 응용 프로그

램을 개발하는 데 할애하기 때문에, 우리는 SDLC의 세부사항까지 살펴보게 된다. 이 장에서

우리는 잠재 고객을 만나서 인터뷰를 한다. 그 인터뷰로부터 요구사항 명세서를 만드는 데, 이

것은 그 프로그램이무엇을 해야 하는가에대한 세부사항을 기술한다. 그요구사항 명세서는 우

리가 이 책의 나머지에 걸쳐서 개발할 응용 프로그램의 토대가 된다.

Note

이지점부터독자들은내가대학에서실제C# 수업을이끈다고생각하고나를따라야한다. 여러분은 13주간의C#

프로그래밍코스를 마칠 때까지그수업의 일원이되어필자의학생들과 함께 배우게될 것이다.

컴퓨터 프로그래밍에 대한 많은 책들은, 아마도 첫 번째 장에서부터 돌아가는 프로그램 코드를

소개할 것이다. 그 프로그램은 보통 Hello World 라는 메시지를 출력한다. 그리고 저자는 책

을 읽기 시작한 지 몇 분 안되어 독자가 이미 동작하는 프로그램을 작성했다고 치켜세운다. 그

러한프로그램을쓸수있다고해서프로그래머가되는것은아니다. 그렇기때문에, 나는더천

천히 접근한다. 그런 간단한 프로그램은 자만심만 키울 뿐, 실세계에서는 발견할 수 없다. 실세

계의 프로그램은 누군가의 요구를 만족시키기 위해 쓰여지는 데, 이러한 요구는 종종 복잡하고

2 0

Page 3: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

말로표현하기조차어렵다. 이책에서우리는실세계의 프로젝트의프로토타입을완성해나가는

여행을 함께 떠난다. 나는 이것이 프로그래밍을 배우는 최선의 방법이라고 믿고 있다.

대학 수업에서, 나는 보통 학기의 처음 수 주일 동안은 프로젝트를 내주지 않는다. 수 주일 후

프로젝트를내줄때는 학생들에게요구사항명세서를제공한다. 수업의프로젝트는이벤트중심

의 패러다임을 갖는 C# 응용 프로그램을 개발하는 것인데, 학생들에게 그 응용 프로그램의 정

확한 모양이나 프로그래밍하는 방법을 말해주지는 않는다. 단지 요구되는 기능만 알려줄 뿐이

다. 다시말하면, 나는프로젝트의가장어려운부분, 즉사용자의요구사항을수집하는일을담

당하는 것이다.

프로그래밍하는 쉬운 방법

필자가 프로그래밍을처음으로 가르치기 시작했을때, 학생들 중 몇명이 프로그래밍 과제를시

작할 때 어디서부터 시작해야 하는지 모르겠다고 말하곤 했다. 그들은 프로그램을 쓰기 시작하

고곧중지할수밖에없었다. 또 ,일부는코드를다시쓰고응용프로그램을다시설계하기를여

러 번 반복하기도 했다. 이런 경우에 나는 그들이 옳은 방향으로 나아가도록 약간의 자극이나

힌트를 준다. 그러나 그들의 작업은 일정한 방향성을 보이지 못했는데, 보통은 계획을 세우지

않는 것이 문제였다.

이런 점을 깨닫고, 단지 프로그래밍뿐이 아닌 그 이상을 가르치기 시작했다. 앞에서 언급한 방

법론인 SDLC(시스템 개발 생명 주기)를 가르치기 시작한 것이다. 사람들은 일을 하는데 상세

한 계획이나 이정표를 필요로 한다. 학생들 또한 프로젝트를 시작하기 전에 주로 글로 표현된

명백한 계획을 필요로 한다. 상세한 계획을 가짐으로써 학생들은 분명히 훨씬 쉽게 프로그램을

개발할 수 있다.

나는 때때로 이전에 가르치던 학생들을 만나 다른 프로그래밍 수업은 어떤지 물어본다. 그들은

다른 수업에서 가끔 규모가 있는실세계의 응용 프로그램을 만드는 과제를 부여받지만, 어디서

부터 시작해야할지 모르겠다고 대답하곤한다. 그런 경우에는 내가수업에서 한 말을상기시킨

다. 그러니까, 먼저 사용자 인터페이스를 설계하고, 그 설계된 것의 기본 동작을 관찰하고 나서

그 공백을 채우기 위해코드를 추가해야 한다고 조언한다. 하지만, 그들은 그것보다도 시스템에

대한 사용자의요구사항을 수집하는 방법을모르는 것이 더큰 문제라고 한다. 그들은만들고자

하는 시스템이 무엇을 해야 하는지를 모르는 것이다.

12 1

Page 4: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

진짜 문제는, 고객이 프로그래머에게 충분히 상세한 요구사항 명세서를 줄 준비가 되어있지 않

다는 것이다. 수업에서는 교수가 잘 정의된 요구사항 명세서를 제공하지만, 실세계에서는 프로

그래머가 이것을 스스로 만들어 내야한다. 불행히도, 그들 상당수는요구사항을 수집하기 위해

장래의 시스템 사용자와 협력해서 일하는 방법을 모른다.

프로그래밍 코스이든 시스템 분석과 설계, 혹은 데이터베이스 관리 코스이든 간에, 나의 모든

컴퓨터수업에서는 사용자에게귀기울이고그들의필요를파악하는 그러한요구사항수집기술

을 어느 정도 가르친다.

프로그램을 계획하는 것은 집을 짓는 것과 같다

나에게는 주택 건설업자인 친구가 있다. 그의 일은 프로그래머나 시스템 설계자의 일과 유사하

다. 최근에그는한고객의집을증축하였는데, 그는고객의요구를파악하기위해그고객을만

난후에야일을시작할수있었다. 고객을만나기전에는그가원하는바를추측조차도할수없

었을 것이다. 고객과의 만남에서 건설업자의 역할은 대개 잘 듣고 조언을 하는 것이다.

그 친구의 말에 따르면, 어떤 고객은 안전하지 않거나 관련 주택 법규를 위반하는, 즉 건축상으

로 불가능한 설계를 원하기도 한다고 한다. 어떤 경우에는, 확실히 나중에 후회할 만한 사항을

고객이 요구하기도 하는데, 이런 경우 나중에 그 친구가 책임을 떠 안게 될 수도 있다고 한다.

고객에게 이러한 문제점들을 알려주는 것이 조언자로서 그가 하는 일이다.

고객의 요구사항을 파악하면, 내 친구는 바로 고객에게보여줄 설계도를 준비한다. 고객은 종이

에 쓰여진 그의 계획을 보고 보통 창문의 위치나 벽장의 크기 같은 것들을 바꾸기로 결정한다.

이런 식으로, 구체적인 설계도는 건축가와 고객이 쉽게 합의점에 도달하도록 도와준다.

프로그램을작성하거나 시스템을개발하기위한구체적인계획도이와 마찬가지이다. 종이위의

계획은 구현하기 전에는 비교적 쉽게 수정할 수 있다. 그러나 집이 한 번 지어지면 고치기 어렵

듯이 컴퓨터 프로그램도 프로젝트가 한참 진행된 후에는 수정하기가 쉽지 않다.

비록 물리적으로 못 박혀지거나 볼트로 연결된 것은 아니지만, 일단 프로그래머가 프로그램을

작성하기시작하면, 그것을수정할때는더큰노력을필요로한다. 코드를한줄도쓰지않았다

면 시스템의 설계를 수정하는 것이 훨씬 쉬울 것이다.

2 2

Page 5: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

얼마나많은소프트웨어 개발자가사용자의요구를듣기도전에개발을 시작하는지를알면여러

분은 분명 놀랄 것이다. 심지어는 고객으로부터 전화를 받고 전화로 간단하게 설명을 들은 후,

그 고객과 한 번도 만나지 않은 채 응용 프로그램을 개발해서 전달하는 경우도 있다. 물론 고객

의 요구사항이 이전에 개발한 어떤 프로그램과 명백히 유사해서, 새로운 프로그램에 그대로 적

용할 수 있는 경우일 수도 있다.

고객과 만나 요구사항을 토의한다면 좀 나은 경우이다. 그렇지만 개발자가 고객의 요구를 자세

히 듣지 않거나 고객 또한 자신의 요구사항을 대충 전달하는 경우가 많다. 결과적으로, 고객은

원하던 바와 다르게 동작하는 프로그램을 받게 된다.

이코스에서우리는 성적계산프로젝트라는실세계응용프로그램을 위한프로토타입을개발한

다. 그리고 그것을 완전한 결과물로 만들 것이다. 이 코스는 한 가지 가능한 해결 방안을 향해

진행된다. 하지만, 내가 학생들에게 항상 말하는 것처럼, 같은 대상이라도 여러 방법으로 그려

질 수 있듯이 C# 프로그래밍에서 해결 방안의 수는 거의 무한하다. 나는 아직 한 번도 한 프로

젝트에대해같은결과물을받아본적이없고, 모든결과물은각기독특한특성을갖는다. 이때

문에 나는 C#을 가르치는 것이 좋다.

여러분이 성적계산 프로젝트를 나와는달리 진행해 나가더라도걱정할 필요가 없다. 사실나는

그렇게하도록권한다. 하지만이장에서구현해나갈요구사항명세서는충실히고수해야한다.

우리의 고객 으로부터 전화를 받다

가을 학기에 Visual Basic 수업을 하는 동안에는 운이 좋게도 불리나 그릇 가게의 주인인 조

불리나 씨로부터 연락을 받았다. 그는 가게에서 고객에게 그릇 가격을 계산해주는 첨단 컴퓨터

프로그램을 필요로 했고, 나는 그 프로그램을 개발하는 것을 Visual Basic 코스의 프로젝트로

활용했다.

C#은본질적으로 Visual Basic보다배우기가약간더어렵다. C# 수업학생들이같은그릇가

게 프로그램을 C#으로 만들게 할수도 있겠지만, 이 프로그램의 Visual Basic 버전에서 볼 수

있는 특성을 한 학기의 C# 수업에서 모두 다루기는 어려울 것이다. 게다가 이전의 Visual

Basic 수업 학생들 상당수가 이 C# 수업을 수강하는데, 그들은 그릇 가게 프로그램을 다시 만

드는 것보다는 새로운 도전거리를 원할 것이다.

12 3

Page 6: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

그래서, C# 코스를 시작하기 일주일 전 월요일 아침에 대학의 동료 교수이자 영문과 학장인 프

랭크 올리 교수님으로부터 전화를 받았을 때 내심 기뻤다. 올리 교수님과는 서로 잘 아는 사이

이다. 사실 그 분은 나의 스승님이셨다.

올리 교수님은 내가학생 성적을 산출하는프로그램을 만들 수있는지 물으셨다. 성적을 산출하

기위해서는 엑셀같은스프레드시트프로그램이적당할것 같아서그런프로그램을사용하시는

건 어떤지 물었다.

교수님은 엑셀을 사용하는 것도 생각했으나, 엑셀 같은 것으로는 프로그램을 대학의 웹 페이지

에서 사용할 수가 없다고 하셨다.

그래서 화요일 오후에 프랭크 올리 교수님 사무실로 찾아뵙기로 했다.

고객을 만나다

햇빛이 내리쬐는 화요일 오후 2시, 나는 올리 교수님의 사무실에 도착했다. 큰 벽돌 건물인 문

과 대학에 들어서자 대학 시절의 즐거웠던 기억이 떠올랐다. 몇 년 전 졸업한 이후로는 이 건물

에 처음 왔다. 지금은 컴퓨터학과 건물이 내 아지트이다.

올리 교수님의 사무실에 들어서자 비서가 나를 응대했다.

안녕하세요, 저는 존 스마일리입니다. 프랭크 올리 교수님을 뵈러 왔습니다.

잠시 기다려주세요. 교수님께서 기다리시고 계십니다.

잠시 후 올리 교수님께서 사무실에서 나오셨다.

기다리게해서미안하네, 존. 하고교수님께서손을내밀며따뜻하게맞아주시고말을이어갔다.

로빈 아론스트람하고 데이비드 버튼과 통화중이었는데, 자네도 누군지 알지?

실제로 아는사람들이었다. 로빈아론스트람은수학과 학과장이고, 데이비드 버튼은자연과학과

의 학과장이다.

우리만남에아론스트람교수와버튼교수도오기로했는데, 언짢게생각하지않았으면좋겠네.

그분들이 내 요구사항에 더해서 몇 가지 요구사항을 추가하고 싶어하시거든.

2 4

Page 7: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

추가 요구사항이요?

그래, 존. 오늘 점심 때 교직원 식당에서 그분들을 만나서, 자네가 학생 성적을 계산하는 프로

그램에대해논의하러 오기로했다고했더니자신들의요구사항도포함시킬 수있을지궁금해하

시더라고.

안 될 이유야 없죠.

바로 그 때, 아론스트람 교수와 버튼 교수가 도착했다. 그 후 20여분 동안 세 교수님들은 자신

들의 요구사항을 제시했다. 세 분 모두 공통적으로 각각 자신의 학과 학생들의 최종 성적을 계

산하는 프로그램을 필요로 하셨다. 반면에 각기 다른 요구사항들도 있었다.

Note

이프로젝트는, 실세계에서사용되는 것이긴하지만학습목적이므로 약간 단순화될 것이다.

영문과는 최종 성적에 중간고사는 25%, 기말고사도 25%, 연구 보고서는 30%를 반영하고,

학생들의 구두 발표 능력을 향상시키기 위해 30분간의 발표를 20% 반영한다네. 하고 올리 교

수가 말했다.

자연과학과도 비슷한데, 다만 수업에서 발표는 시키지 않습니다. 중간고사, 기말고사를 각각

40% 반영하고 학기 연구 보고서를 20 % 반영하여 성적을 계산합니다. 하고 버튼 교수가 말

했다.

그리고 나서아론스트람 교수가 수학수업의 점수 계산방법을 설명했다. 수학 수업에서는단지

중간고사와 기말고사 점수만 반영된다고 한다.

각각 50%의 비중으로 최종 점수를 계산합니다.

요구사항이 심하게 복잡하지는 않습니다. 프로그램이 어떻게 생겨야 할지 특별히 생각하고 계

신 점이 있나요?

그렇지는 않지만 이런 점들을 좀 신경 썼으면 하는데, 일단 프로그램은 학생 점수를 계산해야

한다는 것을 명심하고, 그 외에 가장 중요한 점은 프로그램이 사용하기 쉬워야 한다는 것일세.

12 5

Page 8: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

다른 건 없나요?

언젠가는 그 프로그램을 웹에서 사용할 수 있었으면 합니다. 하고 버튼 교수가 말하고는 잠시

머뭇거리다가 덧붙였다.

이 프로그램을 어떻게 생각하시나요? 그렇게 어려워 보이지는 않는데, 그렇지 않습니까?

나는 유명한 맺음말을 생각해냈다.

그렇지는 않습니다. 아마 이 프로그램을 만드는 데 한 시간 정도면. . .

내가 말꼬리를 흐리는 것을 버튼 교수가 알아차렸다.

무슨 문제가 있나요?

문제없습니다. 그냥 생각 좀 하느라고요.

세 교수님께 토요일에 봄 학기 기초 C# 코스의 첫 수업을 할 것이라고 말했다. 그리고 지난 가

을 학기 Visual Basic 코스에서, 웨스트 체스터에 사는 한 고객을 위해 실세계 프로그램을 개

발했던 것을 언급했다.

아마 이번에도 교수님들께서 원하시는 프로그램을 학생들의 수업 프로젝트로 활용할 수 있을

것 같습니다.

올리 교수님께서 흥미를 가지면서도 걱정하는 표정을 지었다.

어떻게 하려는 건가?

글쎄요. 이번 학기에 제 C# 프로그래밍 수업 학생들에게 프로젝트를 내 줄 예정입니다. 지난

가을 학기에 Visual Basic 수업에서 했던 같은 프로젝트를 내 줄까 생각도 해봤는데, C#은

Visual Basic보다 약간 더 복잡해서 전에 했던 프로젝트는 기초 C# 수업에서는 조금 벅찰 것

같습니다. 그런데 이 성적 계산 프로그램은 딱 적당할 것 같고, 학생들이 좋아할 것 같습니다.

이 프로젝트는 고객이 실재하는 실세계 프로젝트라서 제가 생각했던 다른 어떤 프로젝트들보다

도 훨씬 좋습니다. 그리고 교수님들의 요구사항은 사용자 입장에서 보면 아주 간단할지 모르지

만 다양한 면이 조금 있어서 C# 프로그래밍 관점에서 보면 꽤 도전적이 될 듯합니다.

세 분의 반응을 살폈다. 올리 교수님께서 약간 걱정하시는 것을 볼 수 있었다.

2 6

Page 9: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

이요구사항들을이번토요일에학생들에게나눠줄것이고, 학생들은이학기코스전체에걸쳐

서 교수님들을 위해 프로그램을 만들어 나갈 것입니다. 교수님들께선 이 학기가 끝날 때까지는

프로그램을 받아보실 수 있을 것이고, 학생들은 좋은 실재 경험을 하게 될 것입니다. 물론 아주

급하시지 않다면 그렇게 할 수 있다는 것입니다.

급하지는 않아. 봄 학기가 끝날 때까지 프로그램이 완성된다면 그 프로그램으로 성적을 계산할

수 있겠지. 물론 자네 학생들이 만든 프로그램이 자네가 직접 만든 것보다 복잡하지 않아야 할

텐데. 학생들은 모두 초보자들일텐데 말야. 하고 올리 교수가 말했다.

전혀 그렇지 않습니다. 제가 그들과 모든 과정을 함께 할 것입니다. 일류 프로그램을 기대하셔

도 좋습니다. 그리고 확실히 5월까지는 마칠 수 있습니다.

올리 교수가 웃으며 말했다.

괜찮은 거래 같은데.

한 가지 말씀드릴 것이 더 있습니다. 하고 조심스레 말했다.

뭔가?

학생들에게 프로그램 개발에 대한 대가를 지불해주실 수 있으신가요? 많이는 필요 없습니다.

하지만 그렇게 한다면 학생들이 이 프로젝트를 경력에 정당하게 포함시킬 수 있을 것입니다.

영문과는 지불할 수 있는 예산이 있는데, 수학과와 자연과학과는 어떤가요?

그건 별 문제가 안됩니다. 가을 학기 Visual Basic 수업에서 한 가게를 위해 프로그램을 만드

셨다고 하셨는데, 그 때는 얼마나 받으셨나요?

그 분은 $450를 지불하셔서 학생들에게 각각 $25씩 나눠주었습니다.

내게는 유리한 조건 같은데. 각 과가 $ 150씩 부담하면 되겠군.

떠날 준비를하면서 우리가지금까지 논의한것은 SDLC로알려진 여섯단계의 개발과정의 첫

번째 단계일 뿐이라고 일러두었다. 첫 번째 단계인 예비 조사 단계는 초기 인터뷰와 함께 시작

되어서 지금 끝났고, 이제 SDLC의 다섯 단계가 남았다.

12 7

Page 10: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

문으로걸어가면서, 오늘모임에서논의한사항들을요구사항명세서(Requirement Statement )

로 정리해서 일주일쯤 후에 올리 교수님께 전달하기로 했다. 그리고, 그 요구사항 명세서를 읽

고 내가 잘못 이해한 것이 있는지, 오늘 언급했지만 반영이 안 된 사항이 있는지 확인해야 한다

고 말했다. 또, 그 요구사항 명세서가 프로젝트의 시작점 역할을 하므로, 요구사항 명세서가 정

확하다는 확인을 받기 전까지는 프로그램 개발을 진행할 수 없다고 말했다.

올리교수님 사무실을나서면서, 우리는서로 따뜻하게인사를했다. 올리, 아론스트람, 버튼 교

수님 모두 호감이 가는 분들이셨다. 나는 이 프로젝트가 그분들과 학생들 모두에게 득이 되길

바라면서 저녁 강의를 하기 위해 대학으로 향했다.

SDLC (시스템 개발 생명 주기)강의실로가면서 올리교수님의프로그램에대해생각해보았다. 생각할수록학생들이그시스템

을 개발하게 하는 것이 좋은 생각 같았고, 학생들 또한 그렇게 생각하리라고 확신했다. 실세계

의 응용 프로그램을 만들어 보는 것은 그들에게 매우 실용적인 과제이다. 이 프로젝트는 내가

생각해 낸 어떤 과제들 보다 SDLC의 다양한 면을 더 깊이 경험할 기회를 제공할 것이다. 예를

들면,

학생들 중 누군가는 사용자의 요구사항과 관련된 일을 할 것이다.

다른 누군가는 성적 계산 프로그램의 세부사항을 분석할 것이다.

모두 다 코딩에 참여할 것이다.

일부 학생은 소프트웨어의 설치와 관련된 부분을 담당할 것이다.

일부 학생은 교육에 관여할 것이다.

나흘 후, 토요일 아침에 C# 프로그래밍 입문 수업의 첫 강의를 하였다. 학과 학생들은 지난 몇

학기동안 Visual Basic과 C#을기본프로그래밍언어로사용해왔다. 아마 Visual Basic처럼

쉬운 언어는 없을 것이고, C#처럼 새롭고 유망한 언어는 없을 것이다.

보통때처럼 학생들에게종이한장에간단히자기 소개를적도록 시켰다. 이렇게하면수업에서

그들이 낯선 사람들에게 자신을 소개하는 괴로움을 겪지 않고도 그들에 대해 더 잘 알 수 있다.

난 가능하면 수업에서더 친숙한 분위기를만들기 위해 학생들의이름만으로 그들을 부른다. 대

개 수강생 중에 이름이 중복되는 학생들이 있지만, 이번 학기에는 문제가 되지 않았다.

2 8

Page 11: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

발레리, 피터, 린다, 스티브, 캐서린 로즈.

괜찮으시면 그냥 로즈라고 불러주세요. 하고 그녀가 말했다.

론다, 조, 존.

잭이라고 불러주세요.

바바라, 캐씨, 데이브, 와드, 발레인, 케이트, 메리, 쳐크, 루, 밥.

이상 18명이다.

학생들에게 15분간 자기 소개를 적을 시간을 준 후에, 적은 것을 걷어서 읽기 시작했다. 몇 명

은 약간 구식의 언어로 프로그래밍을 해본 경험이 이었다. 상당수가 직장에서 프로그래밍 일을

해봤거나 바로 하게 될 것이기 때문에, 흥미 있는 컴퓨터 프로그래밍을 경험해보고자 했다. 두

세 명은 몇 년 뒤에 컴퓨터와 관련된 일을 할 계획을 가지고 있었다. 쳐크는 이제 열 다섯 살이

고 고등학생이다. 루는장애인이고 언젠가는 장애로인해 휠체어 신세를지는 것이 끝날것이라

고 적었다.

강의실은 12m×6m 크기이고 PC를 포함하는 세 줄의 테이블들이 있다. 각 학생은 자신만의

PC를가지고있고, 강의실앞에는내가사용하는컴퓨터가있다. 이컴퓨터는화면을모두함께

볼 수 있도록 프로젝터와 연결되어 있다.

첫 번째 강의는 대개 일반적인 수준에서 이루어지기 때문에, 강의의 용어와 사용되는 PC 기반

의 환경을 모두 쉽게 받아들인다. 하지만, 이번에는 수업의 프로젝트에 대해 말하기 위해 몇 주

를 기다릴 수 없었다. 그래서 수업을 시작한 지 얼마 안되어 학생들에게 성적 계산 프로젝트를

소개하였고, 거의 모두가 실세계의 응용 프로그램을개발하는 것에 상당히 흥미를 보였다. 이익

금을모두함께나누어가질것이라고하자더좋아하였다. 그들은첫 C# 코스에서부터, 이력서

에 적을 수 있는 프로젝트를 수행하면서 마치 전문가들처럼 비용을 지불 받을 것이다.

이 코스는 보통의 수업들처럼 책을 보고 예제를 코딩하는 방식이 아니란 말씀인가요? 하고 와

드가 물었다.

맞아, 우리는 실세계의 응용 프로그램을 개발하고 그 대가를 받게 될 거야!

어떻게 우리가 할 일을 알 수 있죠? 하고 로즈가 물었다.

12 9

Page 12: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

오늘 수업에서 요구사항 명세서를 만들 것이라고 설명해주었다.

요구사항 명세서는 개발자(이 경우는 우리)와 고객(올리·아론스트람·버튼 교수)사이의 합

의, 즉 정확히 해야할 일이 무엇인지, 언제까지 해야하는지, 그리고 비용은 얼마인지 등의 세부

사항을 나타냅니다.

이렇게 말하고, 프로젝트와 관련되어지금 가지고 있는것은 초기 인터뷰를통해 기록한 노트가

전부임을 설명해주었다. 대부분의 경우에 이 초기 인터뷰 기록 노트는 단지 프로그램의 간단한

밑그림을 정도일 뿐이다. 다음 시간에 사용자 인터페이스에 대한 간단한 밑그림 정도를 생성해

낼수있을지는모르지만, 아직은 C#으로단한줄이라도프로그램을쓰는방법을알지못했다.

아직 배울 것이 많았다! 게다가 세 교수님께서 가르쳐주신 성적 처리 규칙도 생각해봐야 했다.

TIP

처리규칙(processing rules)은 업무규칙(Business Rules) 혹은작업규칙(Work Rules)으로 알려져 있다.

업무 규칙 하나만 예를 들어주세요. 하고 피터가 말했다.

그래, 피터. 웹기반의티켓구매사이트가좋은예가될것같습니다. 그런사이트들은한번에

많은 수량의 티켓을 구입할 수 없도록 막기도 합니다. 이 경우에 한 번의 구매에서 같은 고객이

네 개 이상의 티켓을 구입하지 못하도록 하는 게 업무 규칙이 될 수 있겠습니다.

제가지난주에 바로그런경험을 했어요. 엘튼 존콘서트티켓을 한줄모두 구입하려고했는데

그 웹 사이트가 네 장으로 제한하던데요. 하고 발레리가 말했다.

다음 토요일 수업 이전에 프랭크 올리 교수님께 요구사항 명세서를 전달하기로 했다고 말했다.

그리고 그 요구사항명세서에 잘못 이해된사항이나 누락된 사항이있을 수 있음을알려주었다.

올리 교수님은 요구사항 명세서에서 생각했던 것과 다른 점을 쉽게 발견하실 수 있을 것이다.

학생들에게 벌써부터 프로젝트에 대해 너무 성급하게 생각하지 말라고 했다. 우리는 여전히 계

획할 일이 많았다!

3 0

Page 13: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

그러한 조급함 때문에 SDLC가 생겨난 것입니다.

Note

개발된많은시스템들이사용자의요구사항을충족시키지못했고, 사용자의요구사항을충족시키는프로젝트들은예

산이나비용을초과했다. 이때문에SDLC가개발되었다.

몇 명이 혼란스러워 했다. SDLC는 시스템이 규칙적·논리적·단계적으로 개발되도록 보장하

기 위해 만들어졌음을 설명해주었다. SDLC의 여섯 단계는 다음과 같다.

예비 조사 단계

분석 단계

설계 단계

개발 단계

완성 단계

유지 단계

Note

회사에따라다른버전의SDLC를가지고있을지모른다. 중요한점은어떤형태이든구조적인개발과정을 이용하

는 것이프로그램개발자들에게도움이된다는 것이다.

SDLC의각단계마다구체적인산출물이만들어진다는점을설명하였다. 요구사항명세서나정

해진 시간과비용으로 프로젝트가완료될 수있음을 알려주는보고서가 이런산출물이 될수 있

다. SDLC의 중요한 요소 중 하나는, 각 단계에서 프로젝트를 계속 진행할지 아니면 중단할지

결정할 수 있다는 것이다. 과거에 SDLC의 안내 없이 개발된 프로젝트들은, 더 이상 진행해 나

가는 것이 무모하다고 판단되는 경우에도 그대로 진행되곤 하였다.

많은 사람들이 SDLC는 단지 상식이라고 말합니다. 여기서 SDLC의 구성 요소를 살펴봅시다.

그러면 여러분은 SDLC가 무엇인지 스스로 판단할 수 있을 것입니다.

13 1

Page 14: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

1단계 : 예비 조사

수업에서 올리·아론스트람·버튼 교수를 만난 것에 대해 말했다. 그런 만남은 본질상 예비 조

사 단계가 된다.

이단계는고객의전화를받는것으로부터, 혹은부사장이개발책임자에게주는시스템요약으

로부터 시작될 수 있습니다. 또는, 고객이 느끼는 문제점이나 단점에 대한 편지로부터 시작할

수도 있고, 기존의 시스템에 새로운 기능을 추가하도록 요청하는 내용의 편지로부터 시작할 수

도 있습니다. 성적 계산프로젝트의 경우는 프랭크올리 교수님께서 학과학생들의 성적을 계산

하는 프로그램을 필요로 하여 예비 조사 단계가 시작되었습니다.

예비 조사 단계의 목적은 시스템을 개발하는 것이 아니고, 문제점이나 단점이 실제로 존재하는

지 검증하거나 새로운 요구사항이 실현 가능한지 판단하는 것임을 계속해서 설명했다.

예비 조사 기간은 큰 프로젝트의 경우에도 보통은 하루 이틀 정도면 충분하다. 이 성적 계산 프

로젝트의 경우는 한시간 정도 소요되었다. 예비조사 단계의 결과물은프로젝트의 진행 여부를

결정하는것이다. 이시점에서프로젝트를하지않기로결정하는요인은무엇일까? 보통다음과

같은 세 가지 요소로 진행 여부를 판단한다.

기술적 제한 프로젝트가 현존하는기술로는완료될수없다. 이제한은레오나르도다빈치

가 16세기에헬리콥터를설계했다고인정되지만, 당시로서는헬리콥터를만들수없었다는

것으로 상징된다.

시간 제한 프로젝트가 완료될 수 있지만, 사용자의 요구사항을 충족시킬 만한 시간 안에는

완료될 수 없다. 자주 이런 이유로 예비 조사 단계 이후 프로젝트를 포기하게 된다.

예산상의 제한 프로젝트가사용자의요구사항을충족시킬만한시간안에완료될수있지만

비용이 과중하다.

성적 계산 프로젝트의 경우에 올리 교수님과 나는 프로젝트를 포기할 생각은 전혀 하지 않았습

니다. 우리 모두 이 프로젝트를 꼭 완성하고자 했습니다. 그리고 프로그램 개발에 대해 비용을

지불 받는 것은 별 문제가 되지 않았습니다!

말할 것도없이 학생들과나는 그프로젝트에 착수하여 SDLC의두 번째단계를 진행하기로결

정하였다.

3 2

Page 15: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

2단계 : 분석

SDLC의 두 번째 단계인 분석 단계는 때로 자료 수집 단계라고도 불린다.

학생들에게 이 단계에서는 문제점과 단점 그리고 새로운 요구사항을 상세하게 조사한다고 말

했다. 이 단계는 프로젝트의 크기에따라 예비 조사 단계처럼 짧게 끝날수도 있고 몇 달이 걸

릴 수도 있다.

그 말은학생들이 문과 대학건물에 가서 올리·아론스트람·버튼교수님을 만나, 예비 조사단

계에서 수집한 정보를 명확히 하거나 더 세부적인 요구사항을 수집해야 할 수도 있다는 뜻이라

고 설명했다.

개발자들은예비조사 단계만으로프로젝트에대해알아야할모든 사항을알아냈다고생각하는

경향이 있다. 하지만, 여러분은 사용자와 단지 약간 만이라도 더 시간을 보내 본다면 상당히 많

은 추가 사항을 알아야 한다는 점을 깨닫고 놀라게 될 것이다.

여러분은 SDLC에 대한 내용을 건너뛰려 할지 모르지만, SDLC는 프로그램과 시스템의 표준

화된 개발 방법을 따르도록 해준다. SDLC 부분을 건너뛰는 것은 큰 실수인 반면, SDLC를

따르는 것은 프로젝트를 성공으로 이끄는 데 큰 힘이 될 것이라는 점을 곧 알게 될 것이다.

일부 개발자들은 SDLC의 1단계에서 프로그래밍을 시작하기 위한 충분한 정보를 수집했다고

말하지만, SDLC는 2단계까지 마치고 나서야 프로그램을 작성하기 시작하도록 요구한다고 말

했다.

이시점에서우리가저지를수있는최대의실수는코딩을시작하는것입니다. 왜그럴까요? 곧

보게 되겠지만, 우리는 고객으로부터 업무에 대한 더 많은 정보를 수집해야 합니다. 하지만 여

전히 의문점들이 남습니다.

SDLC에 대해토의하면서 린다가시스템 분석경험이 있다는사실을 알게되었다. 린다는 올리

교수님께연락해서영문과의 성적을집계하는사람과대화를해보겠다고제안했다. 그만남으로

분석 단계의 데이터 수집 작업을 할 수 있을 것이다. 대화를 통해 린다가 의사소통 능력이 매우

뛰어나다고 느꼈고, 분석 단계를 안심하고 그녀에게 맡길 수 있었다.

13 3

Page 16: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

대개 첫수업은짧게 끝낸다. 그리고 SDLC의 2단계를 마치려면시간이좀 걸리기때문에여기

서 수업을 종료하였다. 린다가 올리 교수님을 만나기 이전에, 나는 교수님께 다음과 같은 내용

을 이메일로 보냈다.

안녕하세요? 올리 교수님.

지난 화요일 오후에 저에게 시간을 내주신 것에 감사 드립니다. 그 때 논의한 것처럼 저는

영문과·수학과·자연과학과 학생들의 성적을 계산하는 프로그램을 개발하고자 합니다.

그 시스템은 저의 C# 프로그래밍 입문 수업의 일부로써 개발될 것입니다. 말씀드린 대로,

비용은 450 달러가 될 것이고 최종 프로그램을 전달받을 때 주시면 됩니다. 대신에 교수님

께서는실세계의프로그램을개발하는귀중한 학습경험을갖도록제학생들에게계약 내용

을 제공하시기로 약속하셨습니다.

다음주쯤, 린다 스와쳐라는 제 학생이 영문과의 성적 집계 담당자와 만나기 위해 교수님께

연락을 드릴것입니다. 또만날 필요는 없을 것이라고 생각하실지 모르겠지만, 전에 말씀드

린 SDLC의다음 단계를위해 꼭필요한 일입니다. SDLC를엄격히 따라야최상의 시스템

을 개발할 수 있습니다.

지난주에논의한 핵심사항들을 다시확인해 보겠습니다. 저희는 PC 기반으로 시스템을개

발할 것이고 향후 웹으로 확장시킬 수 있도록 할 것입니다.

시스템의 주요 기능들은 다음과 같습니다.

1. 시스템은학생들의 성적을쉽게계산할 수있도록사용자에게 친숙한인터페이스를

제공할 것입니다.

2 . 사용자가 성적을 계산하고자 하는 학생의 학과를 수학과, 영문과, 자연과학과 중에

서 하나를 지정하게 해야 합니다.

3 . 사용자가 영문과학생의 성적을계산하고자 한다면, 프로그램은사용자에게 중간고

사·기말고사·연구보고서·발표점수를물어야합니다. 그리고최종성적은중간

고사 25%, 기말고사 25%, 연구 보고서 30%, 발표 20%의 비중으로 계산해야

합니다.

- 계속 -

3 4

Page 17: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

4 . 사용자가 자연과학과학생의 성적을계산하고자 한다면, 프로그램은 사용자에게중

간고사·기말고사·연구 보고서점수를물어야합니다. 그리고최종성적은중간고

사 40%, 기말고사 40%, 연구 보고서 20%의 비중으로 계산해야 합니다.

5 . 사용자가 수학과학생의 성적을계산하고자 한다면, 프로그램은 사용자에게중간고

사·기말고사점수를물어야합니다. 그리고최종성적은중간고사 50%, 기말고사

50%의 비중으로 계산해야 합니다.

6 . 계산된 성적은 인터페이스를 통해 보여주어야 합니다.

이상지난 화요일에 논의했던모든 내용을 언급한것 같습니다. 빠진 내용이있다면 린다가

방문하면 알려주십시오.

존 스마일리 드림.

이 메일은 실제로, 간단한 정식 요구사항 명세서로 만들어질 것이다.

다음날 올리 교수님으로부터 다음과 같은 이메일을 받았다.

존!

자네 메일을 봤는데 맘에 드는군.

지난 화요일에 점수가 문자로 된 등급으로 바뀌어서 성적표에 기록되어야 한다는 것

을 말한다는 걸 잊었는데, 학과마다 등급별 점수 기준이 달라서 문제가 좀 복잡해질

것 같군. 여기 점수 등급표가 있네.

학점 영문과 수학과 자연과학과

A 93 이상 90 이상 90 이상

B 85∼93 83∼90 80∼90

C 78∼85 76∼83 70∼80

D 70∼78 65∼76 60∼70

F 70 미만 65 미만 60 미만

프랭크 올리.

13 5

Page 18: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

프로그램이 복잡해질까? 물론 약간 그렇다. 린다가 다른 더 놀라운 사실을 알아내리라 확신한

다. 이 새로운 요구사항 정도는 이 코스에서 잘 해결할 수 있을 것이다. 노트를 검토해보았고,

올리 교수님께서 이 점을 언급하지 않았다고 한 말이 옳다는 것을 알았다. 물론 훌륭한 프로그

래머라면 이런 요구사항을 예상했어야 했다. 나는 단지 기회를 놓쳤을 뿐이다.

린다가 월요일 아침에 나에게 전화를 해서 올리 교수님과 목요일 오전에 만나기로 했다고 알려

왔다. 목요일저녁, 린다가세학과의성적처리방법을잘관찰했다고전화했다. 생각했던것과

는 달리, 린다는 세 학과의 일상적인 업무에서 나의 예비 조사 기록과 상반되는 점을 찾아내지

못했다.

린다는 아무런 특이점도없었다고 보고했고, 린다의 관찰을통해서 이 프로그램이큰 도움이 될

것이라는 것을 명백히 느낄 수 있었다. 세 학과 모두 근로 장학생들이 수작업으로 성적을 계산

하고 있었고 많은 실수가 있었다.

그 주 토요일 수업시간이 되었다. 모두 출석한 것을 확인하고 SDLC의 세 번째 단계에 대해 논

의하기 시작했다.

3단계 : 설계

SDLC의 3단계는 설계 단계입니다.

SDLC의 설계는 다음과 같은 여러 가지 다른 요소로 구성된다고 설명했다.

3 6

Page 19: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

일반적으로 설계 단계에 너무 적은 시간이 사용됩니다. 프로그래머는 빨리 프로그래밍을 시작

하고 싶어하죠.

프로그램을작성하는것은 재미있는일이고모두가바로코딩을시작하고 싶어하기때문에그런

프로그래머를 탓할 수는 없다는 말로 계속했다. 하지만 불행히도, 즉시 코딩을 시작하는 것은

중대한 실수이다.

여러분은 상세한설계도 없이는 집을 짓기 시작하려 하지않을 것입니다. 안 그런가요? 마찬가

지로 완전한 설계 없이는 프로그래밍을 시작할 수도 없고 시작해서도 안됩니다.

SDLC를 혹평하는 사람들도, 집을 완성하는 데는 수 개월이 걸리고 집을 짓는 데 실수를 하는

것은 큰 문제임을 동의한다는 점을 지적했다. 반면, C# 프로그램은 몇 시간 내에도 완성될 수

있고, 실수가 있다면 바로 고칠 수 있다.

수강생들은이 시점에서 C#에 대해거의 모르지만, 마이크로소프트 윈도우즈, 매킨토시, 리눅

스, 웹프로그래밍 중에서하나 이상의응용 프로그램분야에 대해서는이미 익숙한상태이다.

응용 프로그램의 모양을 설계하고 만들어 내는 것은 프로그램 개발 도구와는 무관한 것이다.

설계단계에서 나는학생들에 대한안내자의 역할을할 것임을밝혔다. 다른 고객들처럼, 올리

교수님은 프로그램의 기능에 대해 이해하시는 대로 기능적인 용어로 묘사하셨다. 학생들은 응

용프로그램에는익숙하지만, C#에는익숙하지못하고그들지식으로는올리교수님의요구사

항을 C# 프로그래밍 용어로 바꾸기에는 역부족이다. 결국 그게 바로 내가 할 일이다.

SDLC를 혹평하는사람들은 완벽하게설계를 하다보면 제한시간 내에프로젝트를 마칠수 없

다고 주장한다. 나는 여러분이 전에 들어봤음직한유명한 말을 인용하면서 다음과 같이 말했다.

나는 이런 식으로 대답합니다. 처음에는 제대로 할 시간이 없어 보이지만, 하다보면 항상 해낼

시간이 있습니다.

예외적이고미련한프로그래머들만이 제대로설계하지않고코딩을시작한다. 그렇게하는프로

그래머들은 프로젝트를진행해 나감에 따라이미 쓴 코드를계속 수정한다. 그들은 처음에통합

하려고했던프로젝트를 통해적당한기술을발견하고이전으로돌아가서 코드를수정할지모른

다. 더 나쁜 경우는 프로그램이 실행되지만 제대로 작동하지 않아서, 거의 처음으로 다시 돌아

가야 하는 경우일 것이다.

13 7

Page 20: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

설계를 잘 하면 이런 상황이 발생할 가능성은 극적으로 줄어들어서 의도된 대로 돌아가는 프로

그램을 최종 결과로 얻을 수 있는데, 보통은 총 소요 시간이 오히려 더 단축됩니다.

나의 예비 조사 기록과 린다의 세부사항 분석 기록, 그리고 요구사항 명세서에 대한 올리 교수

님의 메일을 토대로우리는 설계 단계에본격적으로 착수하였다. 설계 단계를마칠 때까지 정식

의 요구사항 명세서와 프로그램 인터페이스의 개략적인 밑그림을 작성할 것이다.

그 요구사항 명세서가 올리·아론스트람·버튼 교수님과의 합의의 기초가 될 것임을 상기시켰

다. 때로 그 요구사항 명세서는 개발자와 고객이 합의하고 서명하는 계약서가 되기도 한다.

린다가 목요일에 영문과, 수학과, 자연과학과에서 서너 시간 동안 관찰하고요약한 내용을 수업

에서 말하는 것으로, 설계 단계를 시작했다. 린다는 나의 기록이나 올리 교수님께 보낸 이메일

과 상반되는 점을 발견하지 못해서 편하게 느꼈다고 말했다.

수강생들 모두 그 기록과 메일을 본 것은 아니기 때문에 내 노트와 올리 교수님께 보낸 메일과

그 회신 메일의 복사본을 나눠주었고, 몇 분간 그 내용을 각자 살펴볼 시간을 주었다.

우리는 프로그램의 요구사항을 논의하기 시작했다. 학생들이 어디서부터 시작해야 할지 망설여

서 다음과 같은 말로 시작했다.

우리가 하려는 것에 관한 말들을 만들어 내는 것부터 시작해봅시다.

영문과·수학과·자연과학과학생의최종학점을계산하여보여주는프로그램을만들어야합니

다. 하고 데이브가 말했다.

그렇지.

데이브가 핵심을 찔렀다. 이 프로그램의 주요 목적은 성적을 보여주는 것이다. 정확히는 그 이

상이 필요하겠지만, 올리 교수님의입장에서 보면 프로그램이할 일은 학생성적을 보여주는 것

이 전부이다.

명확히 말하자면, 우리는 학생의 점수가 아니라 학점 등급을 보여줘야 합니다.

좋은 지적이다, 케이트. 올리 교수님께서 그런 내용을 메일에 포함시키시지 않은 것 같네.

초보 프로그래머들은, 종종 설계 단계에서 어디서부터 시작해야 할지 파악하는 데 어려움을 겪

는다. 대부분의 프로그램은 처음에 그 프로그램의 출력을가지고 설계되는데, 그 이유는 출력을

3 8

Page 21: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

알면 그것을 만들기 위한 입력을 쉽게 파악할 수 있기 때문이다. 일단 프로그램의 입력과 출력

을 알면, 그 입력을 출력으로 변환하기 위한 처리과정을 결정할 수 있다.

출력 설계

이 수업의 첫 번째 프로젝트는 출력 요구사항이 학점 계산이라는 말로 쉽게 기술될 수 있기 때

문에 운이 좋은 편이라고 말했다.

계산된 학점은 어디로 갈까요?

프린터? 하고 잭이 제안했다.

컴퓨터 화면요. 하고 로즈가 받아쳤다.

로즈 말이 맞습니다. 아마 컴퓨터 화면으로 가겠죠.

일부 학생들이 내 대답에 혼란스러워했다.

아마라뇨? 하고 데이브가 물었다.

계산된성적이어디에 보여져야하는지에대해서는올리교수님과공식적으로 합의를하지않았

다고 설명했다. 이것은 아직 다루어지지 않은 사항이다.

성적 표시에 대해 요구사항 명세서에 명시하도록 합시다. 누구 요구사항 명세서에 관한 내용을

기록할 사람 없나요?

데이브가 자원했고, 마이크로소프트 워드를 띄워서 타이핑하기 시작했다.

론다가 성적을보여줄 폰트의 색깔과크기를 정하자고 했지만, 피터가설계 단계에서 그런점을

언급하는 것은 시기 상조인 것 같다고 지적했다. 나는 피터에게 동의하면서 요구사항 명세서는

세부사항을 많이 포함하지는 않는다고 말했다.

프로그램에 다른 출력 사항이 있나요? 하고 물었고 잠시 시간이 흘렀다.

화면에 날짜와 시간을 보여줬으면 합니다. 하고 발레리가 말했다.

좋은 생각이야. 하고 마리가 말했다.

13 9

Page 22: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

하지만, 대학에있는 PC에는모두윈도우즈가깔려있고윈도우즈에는작업표시줄에현재시간을

보여주기 때문에, 날짜와 시간을 따로 또 보여주는 것은 불필요하다면서 린다가 이를 반박했다.

현재 날짜와 시간을 보여줄 수 있지만, 린다 말이 더 맞는 것 같습니다. 대학의 거의 모든 PC

에는 마이크로소프트 윈도우즈가 깔려 있고 자체적으로 날짜와 시간을 표시해줍니다. 그리고,

이 수업에서 배울 프로그래밍 언어인 C#의 경우는 거의 모든 운영체제와 웹 페이지 내에서도

실행될 수 있다는 장점이 있긴 하지만, 어떤 환경이든 간에 사용자가 현재 날짜와 시간을 알아

낼 수 없는 경우는 없을 것입니다.

대부분의 학생이 이 말에 동의했다.

성적 표시로 돌아가서, 학점 외에도 점수를 표시하는 게 좋을까요? 하고 피터가 말했다.

좋은 생각이네. 하고 캐씨가 말했다.

잠시 생각하고 말했다.

나도 같은 생각입니다. 그러면 이제 출력 요구사항이 두 가지가 되었습니다. 하나는 계산된 점

수이고 다른 하나는 그 점수에 상응하는 학점입니다. 출력 관점에서 보면 이 정도면 된 것 같은

데, 뭐 더 생각나는 사람 있나요?

성적을구성하는개개의요소들은어떤가요? 그런것들도보여줘야할까요? 하고론다가물었다.

조금 후에 보게 되겠지만 성적을 구성하는 각 요소가 윈도우(창)에 보여질 것입니다.

윈도우라 하면, 마이크로소프트 윈도우즈를 뜻하나요? 하고 조가 물었다.

꼭 그렇지는 않습니다. 윈도우(창)라는 말은 일반적인 C# 용어입니다. C#을 이용하면 C# 컴

파일러를 가지고 있는거의 모든 운영체제에대해 프로그램을 만들수 있습니다. 이 수업에서는

마이크로소프트 윈도우즈에서 실행되는 프로그램을 생성하려고 만든 C# 컴파일러를 이용할 것

입니다. 하지만 같은 프로그램을 리눅스 기반의 C# 컴파일러를 이용해서도 만들 수 있고, 리눅

스에서도창을만들수있습니다. 사실우리학교의고급 C# 코스에서는같은프로그램을웹브

라우저에서도 실행시켜 봅니다.

질문이 있는지 기다렸지만, 아무 질문도 없었다.

4 0

Page 23: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

이 정도 정보면 다음 단계로 넘어가기에 충분하겠습니다. 다음 단계는 뭡니까?

바바라가 출력 요구사항이 도출되었으니 이제 처리과정을 논의하자고 제안했다.

앞에서 설명했듯이, 처리과정에 앞서 프로그램의 입력에 대해 생각해보는 것이 더 쉬울 것입니

다. 입력이 뭔지 모르는 상태에서 처리과정을 결정하는 것은 거의 불가능합니다.

입력 설계

어떤 입력 요구사항이 필요한지 누가 제안해 보겠습니까?

데이브가 재빨리 중간고사·기말고사·연구 보고서·발표 점수를 언급했다.

좋아. 물론 그런 요구사항은 학생의 학과에 따라 변하겠죠.

다른 입력은 없나요? 성적을 계산할 학생의 학과는요?

잘 관찰했구나, 마리. 영문과 학생들만 네 가지 점수 모두 있어야 하고, 자연과학과 학생은 중

간고사·기말고사·연구 보고서 점수로 성적을 산출합니다. 그리고 수학과는 중간고사·기말고

사 점수만으로 최종 성적을 산출합니다. 또 있나요?

입력 내용이 어떻게 프로그램에 전달되나요? 사용자가 학생의 학과를 프로그램에게 어떻게 알

려주죠?

학생의 학과 지정

키보드를 이용해서 학생의 학과를 타이핑할 수 있다고 몇몇 학생들이 제안했다.

가능하면 고객이 타이핑하지 않도록 하자는 게 내 모토입니다. 사용자가 키보드를 이용하여 학

생의 학과를 입력하게 한다면 모든 사용자가 그것을 똑같이 입력하게 만들어야 합니다. 그래서

신뢰성이 떨어집니다. 예를 들어, 사람에 따라 수학이라고 입력하기도 하고 수학과라고 입력

하기도 합니다.

무슨 말씀인지 알겠는데, 그러면 어떻게 해야 하나요?

일부 학생들이 PC의 키보드를 통해 입력하는 대신다른 방법을 쓸 거라는 말에 놀라는듯했다.

그것은 그들중 다수는 도스를주로 사용해 왔고, 사용자가거의 타이핑을 해야하는프로그램을

쓰는 데 익숙해져 있기 때문이다.

14 1

Page 24: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

윈도우즈 프로그래밍에서는 선택할수 있는 것이유한 개인 경우, 선택목록을 보여주고 사용자

가 선택하게 하는것이 가장 좋다고설명했다. C#으로 마이크로소프트 윈도우즈외의 운영체제

의 프로그램도 만들 수는 있지만, 윈도우(창) 기반 C# 프로그램에 대해 논의할 때는 마이크로

소프트 윈도우즈를 기준으로 삼기로 했다.

윈도우즈에서 사용자가 선택하도록 선택 목록을 보여주는 것을 본 적 있나요?

마리가 워드의 도구모음에서 폰트 이름과 폰트 크기의 목록을 본 적이 있다고 말했다.

그게 바로 선택 목록입니다. 하고 그녀가 말했다.

맞아. 마리.

이 목록은 사실 윈도우즈의 리스트 박스 개체이고 C#도 비슷한 개체를 만들 수 있다고 알려주

었다. 리스트 박스는 우리 프로그램에서 학생의 학과를 보여주는 데 가장 적합하다. 그 외에도

라디오 버튼이라는 것도 사용할 수 있다.

누구 워드에서 라디오 버튼을 찾을 수 있나요?

툴 메뉴 아래 옵션 하위 메뉴의 박스에서 문서 저장에 대해 설정하는 것이 그러하다고 와드가

말했다. 나는학생들이이메뉴를보도록했고, 거기에는마우스로선택될수있는여러개의문

서 저장 옵션 체크 박스가 있었다.

4 2

Page 25: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

이건 체크 박스 아닌가요? 라디오 버튼은 둥근 걸로 알고 있는데요.

맞아, 데이브. 이건체크 박스이고, 라디오 버튼하고비슷한한 가지인터페이스개체 유형입니

다. 체크 박스는 선택될 수도 있고 선택이 해제될 수도 있습니다. 체크 박스는 사용자가 마우스

로 클릭하여 선택할 수 있고, 다시 클릭하면 선택이 해제됩니다.

우리 프로그램에서는 체크 박스를 사용할 수 없나요? 영문과, 수학과, 자연과학과에 대해 각각

체크 박스 하나씩 두면 안되나요?

학생의학과를표현하기 위해체크박스를 사용할수있긴 하지만, 그렇게 하면문제가좀 있습

니다. 곧 보겠지만, 라디오 버튼은 한 그룹에서 한 번에 단 한 개만 선택될 수 있고, 그건 우리

가 원하는 동작입니다. 한 학생이 영문과 학생이면서 수학과 학생일 수는 없겠죠? 사용자가 한

학생의 학과로 영문과를 지정했다면, 다른 학과도 선택할 수 있기를 원하지는 않겠죠? 하지만,

불행히도 체크 박스의 경우는 동시에 한 개 이상이 선택될 수 있습니다.

그러니까체크박스를이용하면한학생의학과로동시에여러개가선택될수있는건가요? 당

연히 그러면 안되겠죠? 하고 론다가 물었다.

정확히 맞습니다. 체크 박스는 두 개 이상을 선택할 수 있는 경우에 적합합니다.

예를 들면요? 하고 쳐크가 말했다.

14 3

Page 26: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

예를 들어서, 사용자에게 좋아하는 스포츠를 선택하게 하는 프로그램을 만들어야 한다면 체크

박스를 이용하여야구, 농구, 축구, 하키를선택하게 할수 있습니다. 당연히한 사람이여러 스

포츠를 좋아할 수도 있기 때문에 이런 경우는 체크 박스가 딱 좋을 것입니다. 하지만 사용자에

게단하나의가장좋아하는스포츠를묻는경우라면, 근본적으로두개이상선택될수없는라

디오 버튼으로 네 가지 선택을 표현하는 것이 좋을 것입니다.

개체(obj ect )라는 말을 여러 번 사용하셨는데, C#은 개체지향(obj ect -orient ed) 프로그래밍

언어 아닌가요?

맞아, 발레리. C#에서 라디오 버튼을 사용할 때는 사실 기존에 만든, 클래스(class)라고도 불

리는 라디오 버튼 템플릿(t emplate)으로부터 라디오 버튼 개체를 생성하는 것입니다. 클래스

는 내부에 기본 동작을 가지고 있는데, 라디오 버튼 개체의 경우에는 동시에 두 개 이상 선택되

는 것을 막는 동작이 내재되어 있습니다. 이 수업에서 나중에 라디오 버튼 개체와 다른 유형의

C# 개체들에 대해 논의할 것입니다.

라디오 버튼 개체의 예를 볼 수 있을까요? 하고 조가 물었다.

물론. 워드의 인쇄 하위 메뉴를살펴보세요. 하고 말하면서 그 메뉴를 프로젝트로보여주었다.

페이지 범위 프레임을 보세요. 좀 생소하겠지만, 프레임은 창의 한 부분입니다. 여기서는 페이

지범위프레임에라디오버튼세개가있습니다. 그중에서한개의라디오버튼만이선택된것

을 볼 수 있을 것입니다.

4 4

Page 27: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

학생의 학과를 표현하기에 딱 좋은 개체 같네요. 하고 데이브가 말했다.

맞습니다. 타이핑할 필요가 없겠습니다. 하고 피터가 말했다.

모두가 학생의 학과를 표현하는 데 라디오 버튼을 사용하는 것이 좋겠다고 동의했고, 데이브가

이런 내용을 요구사항 명세서에 추가했다.

개별 점수 지정

이제 학생의 학과를 알아냈습니다. 그런데 사용자가 중간고사·기말고사·연구 보고서·발표

점수를 어떻게 넣게 만들죠? 이제까지 둘러본 개체로는 할 수 없을 것 같은데요.

맞아, 와드. 사용자가 개별 점수를 넣을 수 있게 하는 방법이 있어야겠습니다. 누구 워드에서

적당한 걸 찾은 사람 없나요?

인쇄하위메뉴의인쇄할페이지라디오버튼옆의박스는어떨까요? 제가확인해봤는데, 거기

에 뭔가를 입력할 수 있습니다.

맞아, 루. 윈도우즈에서 이런 박스는 텍스트 박스라고 합니다. 이것은 사용자 입력을 허용하기

때문에 우리에게 딱 적당할 것입니다.

그걸 각 점수에 대해 하나씩, 총 네 개 사용하나요?

그렇지. 선택된 학과에 따라 필요 없는 텍스트 박스를 선택적으로 숨기는 것을 나중에 보게 될

것입니다.

그러니까 수학과를 선택하면 단 두 개의 텍스트 박스만 보인다는 말씀이시죠?

그렇습니다. 그리고 자연과학과를 선택하면 세 개의 텍스트 박스가 보일 것입니다.

정말 재미있을 것 같은데요. 인터페이스가 어떻게 생겨야 할지 구상해보고 싶습니다. 인터페이

스가 실제로 어떻게 생겨야 할지 보려면 프로그램을 만들 때까지 기다려야 하나요?

좋은 질문이구나, 론다. 그렇진 않습니다. 그 전에 종이와 연필로 사용자 인터페이스를 그려보

지 말라는 법은 없겠죠?

14 5

Page 28: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

첫 번째 인터페이스 설계

알고 보니, 이제까지의 수업시간 동안 바바라가 인터페이스 초안의 밑그림을 그려왔다. 내 말을

듣고, 바바라가이제까지그린밑그림을모두에게보여주고싶다고해서프로젝터로보여주었다.

멋지다, 바바라. 인터페이스 설계가 종이에 그려진 것을 보니 구상하기가 더 쉬운걸.

맞아, 론다. 그리고이런설계도가있어야나중에인터페이스를프로그래밍하기가더쉽다는것

을 알게 될 것입니다.

바바라에게 나머지 학생들을 위해 이 인터페이스 설계를 설명해줄 수 있는지 물었다.

제가 창을 사용한 경험을 살려서, 프로그램을 창 스타일로 구상해 봤습니다. 하지만 반드시 이

럴 필요는 없겠죠.

좋은 지적이구나, 바바라. C#으로 창 스타일의 프로그램을 만들 수도 있지만, 콘솔(Console)

프로그램이라는 것도 만들 수 있습니다.

콘솔 프로그램은 예전의 도스 프로그램 같은 거죠. 하고 와드가 말했다.

그런식으로생각해볼수있겠네. 하지만 C#으로거의모든운영체제에서돌아가는프로그램을

만들 수 있다는 걸 기억하세요. 마이크로소프트 윈도우즈, 리눅스, 매킨토시의 창 스타일은 사

용자가 쉽게 사용할수 있도록 설계된인터페이스입니다. C#은 사용자 인터페이스보다낮은 레

벨에서 작동하도록 설계되었기 때문에, C# 프로그램은 꼭 창을 가질 필요가 없고 콘솔 프로그

램으로 만들어질 수 있습니다.

4 6

Page 29: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

이 수업에서도 콘솔 프로그램을 작성하나요?

그렇습니다. 사실우리는콘솔프로그램으로시작할것입니다. 실제로성적계산프로그램을콘

솔 프로그램으로 작성해볼 것입니다. 그리고 그것을 테스트한 후 창 스타일의 사용자 인터페이

스를 추가하여 나갈 것입니다.

바바라에게인터페이스의밑그림에 대한설명중에끼여든것에대해사과하고 계속하도록요청

했다.

라디오 버튼에 대해 논의한 것을 기초로, 영문과, 수학과, 자연과학과 등 세 학과 각각에 대해

적당한 레이블을가진 라디오 버튼을그렸습니다. 그리고 네 가지점수 요소에 대해서는적당한

레이블을 가진텍스트 박스를 그렸습니다. 하지만앞서 논의한 것처럼텍스트 박스가 항상모두

보여질 필요는없기 때문에그 중에어떤 것이보여질지는 사용자가어떤 라디오버튼을 선택하

느냐에 따라 달라집니다.

잘 했다, 바바라. 성적 계산이라는 버튼도 포함시켰네.

클릭하면학생의최종점수를계산해서 보여주는버튼이하나있어야할거라고 생각했습니다.

하고 바바라가 말했다.

학생의 최종 점수를 어디에 어떻게 보여줄지에 대해서는 생각해 봤어? 하고 데이브가 물었다.

그건 깜빡했네. 내 생각에는 인터페이스 자체에 성적을 보여주거나, 메시지를 보여주면 될 것

같은데. C#으로 메시지 박스를 보여줄 수 있나요?

물론, C#으로 메시지 박스를 보여줄 수 있습니다.

메시지 박스를 사용하면 사용자의 주목을 끌 수 있습니다. 인터페이스 자체에 보여주는 정보는

놓치는 경우를 많이 봤습니다. 게다가 메시지 박스는 사용자가 확인 버튼을 클릭하기 전까지는

계속 보여지지 않나요?

맞아, 데이브. 메시지 박스는 사용자가 확인 버튼을 클릭해야 사라집니다.

메시지 박스에 한 표! 하고 론다가 말했다.

대다수가 같은 의견인 듯했다. 계산 결과를 C# 레이블이나 텍스트 박스 개체로 보여주기를 원

한다면 이 설계와 다르게 해도 된다고 강조하기는 했지만, 일단은 메시지 박스로 하기로 했다.

14 7

Page 30: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

Note

C# 레이블과 텍스트 박스에대해서는 12, 13장에서 더배운다.

학생의 최종 점수가 메시지 박스에 나타난 다음에는 어떻게 되나요? 그러니까 다음 학생을 위

해서 텍스트 박스를 자동으로 지워야 하나요? 하고 쳐크가 물었다.

저도같은 생각입니다. 다음 학생에대비해서텍스트 박스를자동으로지워야 할것같지만, 원

래대로라는 또 다른 버튼을 두어서, 라디오 버튼 선택을 해제하고 네 개의 텍스트 박스를 모두

지우면서 동시에 보이게 만드는 것이 낫겠습니다.

그게 더 낫겠네요. 하고 바바라가 말했다. 모두 같은 생각이어서 바바라에게 밑그림에 원래대

로 버튼을 추가하라고 요청했다. 바바라가 그렇게 했고 수정된 사용자 인터페이스 밑그림을 프

로젝터로 보여주었다.

모두에게 이 인터페이스를 주의 깊게 잘 살펴보라고 했다.

내가 앞서 말한 것을 기억하세요. 이제 잘못된 점을 찾아봅시다. 설계를 종이에서 수정하는 것

은 코드를 작성한 후 바꾸는 것보다 훨씬 쉽습니다.

까다롭게 굴고 싶은 건 아니지만, 밑그림의 창에 제목 표시줄이 없습니다. 그리고 C# 창에는

제어 메뉴 아이콘, 최소화·최대화·닫기 버튼이 있지 않나요?

4 8

Page 31: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

마리 말이 맞습니다. 그런 것들을 밑그림에 넣지 않았습니다. 여기서 그렇게까지 세세하게 할

필요가 있나요? 하고 바바라가 말했다.

문제될 것 없습니다. 실제로 코드를 쓸 때 그런 사소한 것들을 잊기 쉽습니다.

최소화·최대화·닫기 버튼은 창의 제목 표시줄에 있는 버튼들이라는 건 알겠습니다만, 제어

메뉴 아이콘은 뭔가요?

제어메뉴아이콘은창의제목표시줄의왼쪽에있는아이콘입니다. 그것을클릭하면이전크기

로·이동·크기 조정·최소화·최대화·닫기 메뉴 아이템을 포함하는 하위 메뉴가 나타납니다.

제어 메뉴 아이콘도 밑그림에 포함시키는 게 좋겠습니다.

메뉴는요? 성적 계산 프로젝트의 메뉴도 있어야 하지 않나요? 하고 스티브가 물었다.

좋은 질문이구나. C#에서 메뉴를 만드는 것은 약간 어렵기 때문에, 그건 고급 C# 수업에서나

다루는 내용입니다. 우리가만드는 프로그램은 단한 가지 기능만수행하기 때문에 메뉴를사용

하지 않겠습니다. 사실 메뉴에 넣을 만한 것으로는 [파일 | 끝내기] 메뉴가 전부일 것 같은데,

제목 표시줄의 닫기 버튼을 클릭해도 같은 기능이 수행됩니다.

바바라가 밑그림에 마지막 변경 사항을 반영시킨 것을 알아채고, 그 밑그림을 가져다가 프로젝

터로 보여주었다.

모양이 잡히기 시작했습니다. 뭐 빼먹은 것 없나요? 하고 와드가 말했다.

14 9

Page 32: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

더 이상 생각나지 않네요. 하지만 먼저 종이 위에 설계를 하면, 뭔가 바꿔야 할 경우 프로그램

코드를 건드릴 필요 없이 간단히 바꿀 수 있습니다.

질문 있습니다. 캡션들은 창 개체 자체에 넣나요, 아니면 라디오 버튼이나 텍스트 박스에 포함

되나요?

좋은질문이구나, 론다. 라디오버튼옆의캡션은 RadioBut t on 개체에포함됩니다. 한참후에

수업에서 라디오 버튼을 생성할 때 캡션도 함께 지정하는 것을 보게 될 것입니다. 하지만 텍스

트 박스 옆의 캡션은 다릅니다. 이 캡션들은 TextBox 개체에 포함되어 있지 않기 때문에 C#

Label 개체로 만들어야 합니다.

질문이 있는지 물었으나 더 이상 없었다.

요구사항 명세서(Req uire m ent s St at e me nt )

우리는 열심히 했고, 많이 진행되었다. 휴식시간이 되었고, 그 전에 데이브에게 이제까지 작성

한 요구사항 명세서를 보여달라고 요청했다. 그가 작성한 것을 복사해서 휴식이 끝난 후 다른

학생들에게 나눠주었다. 내가 나눠준 요구사항 명세서는 다음과 같다.

요구사항 명세서

성적 계산 프로그램

개괄적인 묘사

프로그램은 다음과 같은 것들을 포함하는 인터페이스를 가질 것이다.

성적을 계산할 세 학과를 나타내는 라디오 버튼 세 개.

각각중간고사, 기말고사, 연구보고서, 발표라는레이블이달리고, 사용자가 학생의최

종 성적을 계산하기 위해 점수들을 넣을 네 개의 텍스트 박스

클릭되면 학생의 최종 점수와 학점을 메시지 박스에 보여주는 성적 계산 버튼

클릭되면 텍스트 박스 네 개의 내용을 지우는 원래대로 버튼

시스템의 출력

학생의 최종 점수와 학점이 메시지 박스에 나타난다.

- 계속 -

5 0

Page 33: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

시스템의 입력

고객이 다음과 같이 지정한다.

성적이 계산될 학과를 라디오 버튼으로 선택한다.

영문과 학생이면 중간고사·기말고사·연구 보고서·발표 점수를 적당한 텍스트 박

스에 넣는다.

수학과 학생이면 중간고사·기말고사 점수를 적당한 텍스트 박스에 넣는다.

자연과학과 학생이면 중간고사·기말고사·연구 보고서 점수를 적당한 텍스트 박스

에 넣는다.

업무 규칙

영문과 학생의 점수는 중간고사 25%, 기말고사 25%, 연구 보고서 30%, 발표 20%를

반영하여 계산한다.

수학과 학생의 점수는 중간고사 50%, 기말고사 50%를 반영하여 계산한다.

자연과학과학생의점수는중간고사 40%, 기말고사 40%, 연구보고서 20%를반영하여

계산한다.

각 학과는 학점 등급별 점수 구간이 각기 다르다. 학점 구간 표는 다음과 같다.

등급 영문과 수학과 자연과학과

A 93 이상 90 이상 90 이상

B 85∼93 83∼90 80∼90

C 78∼85 76∼83 70∼80

D 70∼78 65∼76 60∼70

F 70미만 65 미만 60 미만

요구사항 명세서는쉽게 고객과 개발자사이에 계약의 근거가될 수 있다. 요구사항명세서에는

프로그램의 모든 주요한 세부사항을열거해야 한다. 그리고, 화면끝손질에 대한 내용을 포함시

키면 프로그래밍하는 데 곤란을 겪을 수도 있으므로 주의해야 한다.

15 1

Page 34: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

예를 들어, 여기서 여러 가지 C# 개체를 놓을 위치에 대해서는 언급하지 않았다. 두 버튼을 인

터페이스의밑 부분에나란히두기로명시했지만, 나중에마음이바뀌어서수직으로정렬하기로

결정했다고 가정해보자. 이론상으로, 이처럼 요구사항 명세서를 벗어나는 것은 계약 내용에 대

한 위반으로 간주될 수 있다.

학생들에게 이 요구사항 명세서에 대한의견을 들어봤는데, 모두 괜찮게 생각하는 듯했다. 하지

만 몇몇 학생들이 사용자 인터페이스의밑그림으로 주의를 돌려서, 몇 가지 문제점을 지적했다.

발레인은밑그림에몇가지캡션이없다고했다. 특히, 라디오버튼열과텍스트박스열을위한

캡션이 있어야 할 것이라고 생각했다.

괜찮은 생각이네.

바바라에게 밑그림을 또 수정하라고 요청했다.

C# 레이블을 두 개 넣어서 캡션을 보여줄 수 있습니다. 또 다른 점 없나요?

아무도 말이 없어서 인터페이스 설계가 완료되었음을 선언했다. 물론 필요하면 나중에 바꿀 수

도 있다. 바바라가 재빨리 밑그림을 수정했고, 나는 최종 인터페이스를 프로젝터 위에 올렸다.

이런내용은 요구사항명세서에서언급할만한내용이아니어서 데이브는아무것도바꾸지않았

다. 모두 인터페이스가 꽤 멋지다고 생각했다. 하지만, 그들 말처럼 백문이 불여일견이다. 이

것을보고 결정하는사람은고객인것이다. 우리는올리·아론스트람·버튼교수가어떻게생각

5 2

Page 35: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

하는지 알아보아야 한다. 요구사항 명세서와 인터페이스에 대한 아무런 추가 언급과 제안이 없

어서 SDLC의 설계 단계를 마치고 다음 단계로 넘어갔다.

처리과정 설계

처리과정은 입력을 출력으로, 즉 데이터를 정보로 바꾸는 것입니다. SDLC의 설계 단계인 이

시점에서 모든 출력 사항(학생 성적)과 그 출력을 만들어 내기 위해 필요한 모든 입력(점수 요

소)이 도출되어 있어야 합니다.

마치 좋은 소설들이 부차적인 줄거리들을 가지고 있는 것처럼, C# 프로그램 또한 부차적인 처

리과정을 가지고있다고 설명했다. 우리는 성적계산이라는 핵심 줄기외에 다음과 같은부차적

인 줄기들을 가지고 있다.

성적을 계산할 학생의 학과 알아내기

텍스트 박스를 선택적으로 숨기거나 나타내기

텍스트 박스에 0부터 100까지의 유효한 수가 들어갔는지 확인하기

적당한 성적 계산

계산된 성적 보여주기

처리과정설계에서실제로 프로그램을작성하지는않는다는것을유의해야한다. 그것은나중에

할 것이다. 처리과정 설계에서는 입력을 출력으로 바꾸기 위해 수행되는 과정을 정한다.

세부 처리과정 들여다보기

성적 계산 프로젝트 외에 다른 간단한 예를 살펴봅시다. 월급 계산에 대해서는 아마 여러분 모

두 친숙하게 느낄 것입니다.

순 수입을 계산하기 위해서는 여러 과정을 거쳐야 한다는 말로 계속했다. 순 수입을 계산하기

위해 필요한 단계 혹은 과정은 다음과 같다.

1. 총 수입 계산

2 . 세금 공제액 계산

3 . 순 수입 계산

15 3

Page 36: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

Note

프로그래밍은SDLC의다음단계인개발단계에서 이루어진다. 지금이단계에서는어떻게처리되는가보다는무엇

을처리하는가에중점을둔다. 처리과정의 어떻게에대한내용보다는 무엇을에대한내용을도출해내는것이다.

어떻게 부분은개발단계에서할 일이다.

이런과정은심지어더쪼개질수있다. 예를들어, 총수입을계산하는방법은정규직근로자인

지 시급 근로자인지에 따라 다르다. 시급 근로자의 총 수입은 시간당 수입과 일한 시간을 곱한

값과 같다. 설계 단계에서 설계자는 이런 기능들의 명세를 세세하게 작성해야 한다.

처리 규칙을 말로표현하는 것은 혼동과오해를 불러일으킬 수있기 때문에, 처리과정 설계에서

처리 규칙을 꼭 문서화해야 한다.

시스템설계자들은 문서화를돕는다양한도구들을오랫동안사용해왔다. 일부는순서도라는도

구를 사용한다. 순서도는 시스템의 처리 규칙을 도식적으로 문서화하기 위해 기호들을 사용한

다. 순서도로 표현된 순 수입 계산 처리과정은다음과 같다(이 계산 과정은 설명을 위해간략화

된 것이다) .

다른 설계자들은의사코드(pseudocode)를 선호한다. 의사코드는 프로그램이 실행되는 과정을

비 도식적으로 묘사한, 영어 같은 언어이다. 의사코드를 이용해서 순 수입을 묘사하면 다음과

같다.

5 4

Page 37: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

가정: 수입은 매주 계산된다(연간 52회 지급 받는다) .

가정: 정규직 근로자의 수입은 연간 수입 나누기 52이다.

가정: 시급 근로자의 수입은 시급 곱하기 일한 시간이다.

1. 고용인이 정규직 근로자이면 4단계로 간다.

2 . 고용인이 시급 근로자이면 시급과 급료 계산기간 동안 일한 시간을 곱한 값을 총 수입으로

한다.

3 . 5단계로 간다.

4 . 고용인이 정규직 근로자이므로 총 수입은 연간 수입 나누기 52로 한다.

5 . 연방 정부 세금을 총 수입 곱하기 0 .28로 한다.

6 . 주 정부 세금을 총 수입 곱하기 0 .03으로 한다.

7 . 총 세금을 연방 정부 세금 더하기 주 정부 세금으로 한다.

8 . 순 수입을 총 수입 빼기 총 세금으로 한다.

이두 가지기술 모두절차형 프로그램(procedural program)에서 많이사용된다. 절차형 프

로그램은 사실상 중단 없이 처음부터 끝가지 실행되는 프로그램이다. 절차형 프로그램은 사용

자가 프로그램과 상호작용하는 과정을 정확히 정할 수 있게 해준다. 예를 들면, 성적 계산 프

로젝트에서 고객은 학과를 선택하고 중간고사·기말고사 점수와 같은 유효한 점수값을 넣는

다. 학생들중에는절차형프로그램을써본경험이많은경우가꽤있다. 베이직, 포트란, 코볼

과 같은 언어를 사용하는 절차형 프로그래밍은, 마치 미리 정해진 순서대로 모든 정류장을 통

과하는 유람 버스를 타는 것과 같다.

윈도우즈프로그램은이벤트중심으로동작한다. Visual Basic, C#, C+ +와같은언어를사

용하는이벤트중심의프로그램은사용자가특정순서대로행동하도록만들지않고, 대신사용

자의행동에반응한다. 그리고사용자에게프로그램에서언제무엇을해야하는지지정하지않

고, 대신 프로그램과 상호작용하도록 눈에 보이는 인터페이스를 제공한다. 이것은 유원지에서

놀이기구를 타는 것에 비유될 수 있다. 일단 입구로 들어서면, 가는 방향과 타는 순서는 전적

으로사용자에게달려있다. 이벤트중심의프로그램은모든예측가능한예외적인상황에대비

해야 한다.

15 5

Page 38: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

수업에서순서도와의사코드를꼭사용하도록요구하지는않겠습니다. 내가요구하는것은, C#

으로 코딩을 시작하기 전에 문제를 해결하기 위해 필요한 모든 처리과정을 숙고해보라는 것이

전부입니다.

몇몇 학생들이 기뻐하는 것을 볼 수 있었다. 하지만 코딩 전에 종이에 해결 방안을 기록해야 하

는것은변함없다고계속말했다. 시각적인것을좋아하는학생들은시각적인기호를선호하고,

그렇지 않은 학생들의 해결 방안은 주로 앞에서 살펴본 의사코드 형식이다. 중요한 점은, 계획

을 종이에 쓰지 않고는 프로그래밍 과정이 뒤틀어진다는 것이다.

몇 년 전에 코볼이라는 언어를 수업에서 가르쳤었고, 수업에서 다음의 프로그래밍 문제를 냈던

것을 예로 들었다.

시급 $5로 40시간을 일한 근로자의 순 임금을 계산하는 프로그램을 작성하라. 총 수입에서

20%는 소득세로 공제된다. 순 수입은 얼마인가?

정답은 $ 160이다. 40시간 곱하기 시간당 $5를 하면 $200의 총 수입을 얻을 수 있다. 그것의

20%인 $40는 소득세로 공제된다. 따라서 $200에서 $40을 빼면, 순 수입은 $ 160이 된다.

많은 학생들이 순수입이 $240라고 계산했다. 소득세를총 수입에서 빼지않고 반대로 더한것

이다. 내가그런잘못된결과를얻은이유를묻자, 그들대부분은해결방안을종이에쓰지않은

것이 문제인 것 같다고 했다. 그들은 코딩부터 시작한 것이다. 먼저 종이에 해결 방안을 작성했

다면, 결과가 어떻게 나와야 하는지 알았을 것이고, 잘못 계산하는결과물을 제출하지도 않았을

것이다.

이것이제가여러분에게요구하는것입니다. 시간을가지고종이에해결방안을작성하세요. 그

렇게 하면 여러분 스스로도 만족하게 될 것입니다.

성적 계산 프로그램으로 돌아가다

계속 처리과정 설계에 대해 논의했다. 설계는 보통반복적인 작업임을 상기시켰다. 설계자나 프

로그래머가 처음부터 정곡을찌르는 일은 매우드물다. 설계 단계를 진행해나감에 따라 출력을

만들어내기위해필요한, 일부입력을빠뜨린것을발견할공산이크다. 이런경우입력부분을

다시 살펴보아야 한다. 예를 들어, 성적 계산 프로젝트의 경우 사용자에게 성적을 계산할 학생

의 학과를 지정하도록 하는 것을 잊는다면, 재앙과 같은 결과를 가져올 수도 있다.

5 6

Page 39: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

처리과정 논의의 시작점으로써, 학생의 학점을 계산하는것을 대상으로 잡았다. 우리는 이미 그

것을 계산하기위해서는 학과와최종 성적을도출해 내기위한 점수요소들을 알아야한다는 것

을 알고 있다.

우리는 가상의 학생 정보를 입력하는 가상의 사용자를 생각하였다.

중간고사 점수가 88점이고, 기말고사 점수가 90점이고, 연구 보고서는 85점이고, 발표는 75점

인영문과학생의최종학점은어떻게될까요? 그리고어떻게결과를도출해냈는지말해보세요.

종이와 연필을 가지고 이 문제를 풀어보면, 중간고사 점수 88점 곱하기 0 .25는 22가 됩니다.

일단이건놔두고, 그다음기말고사점수 90점곱하기 0 .25는 22 .5가됩니다. 그리고 연구보

고서점수 85점과 0 .3을곱하면 25.5이고, 발표점수 75점과 0 .2를곱하면 15가됩니다. 최종

적으로 네 가지 결과, 22 , 22 .5, 25.5, 15를 모두 더하면합계가 85가 되는데, 요구사항 명세

서를 참조하면 영문과 학생의 경우 85점은 B 학점에 해당합니다.

아주 잘했다, 와드.

제생각에는조금문제가있는것같은데요. 저도와드와같은과정을거쳤는데, C 학점이나왔

습니다. 하고 쳐크가 말했다.

맞는 말이다. 문제가 좀 있었다. 요구사항 명세서를 보면 영문과 학생의 경우 85점은 B 학점과

C 학점 모두에 해당된다.

어떻게 그럴 수 있나요? 하고 케이트가 물었다.

이수들은프랭크올리교수님께서이메일로보내주신것입니다. 그런데, 내가문제점을알아채

지 못했습니다. 오늘문제가 있다는 걸알아냈지만 올리 교수님께서사무실에 안 계셔서해결하

지 못했습니다. 올리 교수님께서 이 문제를 해결해 주셨으면 좋겠네요.

휴대 전화를꺼내서(세상 참좋아졌다!) 올리교수님께 전화를걸었다. 그리고이메일에서 학점

의 점수구간을 언급할 때영문과 학생의 C 학점은 78부터 85까지이고 B 학점은 85부터 93

까지라고 하셨다고 설명했다. 딱 85점을 받은 학생은 어떤 학점을 받아야 할까?

이 문제를 교수님께 한 번 더 설명했고, 올리 교수님께서는 미안하다고 하시면서 85점은 B 학

점의 시작 지점이라고 하셨다. 85보다 작으면 C가 된다. 나는 다른 부분도 같은 규칙이 적용되

는지 물었고, 교수님께서 그렇다고 대답하셨다. 이상 논의한 것에 기초하여 요구사항 서술문의

표를 다음과 같이 수정했다.

15 7

Page 40: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

학점 영문과 수학과 자연과학과

A 93 이상 90 이상 90 이상

B 85 이상 93 미만 83 이상 90 미만 80 이상 90 미만

C 78 이상 85 미만 76 이상 83 미만 70 이상 80 미만

D 70 이상 78 미만 65 이상 76 미만 60 이상 70 미만

F 70 미만 65 미만 60 미만

나는 내 작품을 감탄하며 말했다.

좋군요.

교수님께는 좋겠지만, 저는 이걸 보니 수학이 생각납니다. 제 생각에는 이런 식으로는 표가 읽

기 어려운 것 같습니다. 학점 계산 규칙을 꼭 이런 식으로 표현해야 하나요? 저는 이상, 미만이

라는 말이 혼동되거든요.

결국은 그게 더 낫습니다. 학점을 도출해 내는 규칙을 설명한 문구는 우리가 쓰게 될 C# 코드

와 크게 다르지 않습니다. 게다가 점수가 중복되었던 이전 표와는 달리, 문구들이 확실한 용어

로 표현되어 있습니다.

학점 계산과 관련하여 우리가 놓친 것이 있지 않나요? 사용자가 학생의 학과로 영문과를 선택

하고 중간고사·기말고사·연구 보고서 점수를 입력했지만 발표 점수를 입력하는 것을 잊었다

고 생각해봅시다. 그러면 프로그램이 어떻게 해야 할까요?

성적을 계산하기 위해 필요한 모든 재료가 준비되지 않으면 일종의 에러 메시지를 보여줘야 한

다는 데 모두 동의했다. 에러 메시지는 출력의 한 형태이다.

우리가 이미 이런 것에 동의했다고 생각합니다만, 성적을 언제 어떻게 계산해야 할까요?

성적의 마지막 요소가 입력되면 성적 계산을 실행시키자고 마리가 제안했다.

텍스트 박스에 발표 점수가 입력된 후 바로 영문과 학생의 성적을 보여주면 꽤 멋지지 않을까

요? 그래도 되나요?

그래도 되지. 하지만 프로그램 사용자가 창 위의 개체와 어떤 순서로 상호작용할지 예측해서는

곤란합니다. 사용자가 여러 텍스트 박스들에 위에서 아래로 입력할 걸로 가정한 것 아닌가요?

5 8

Page 41: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

마리가 그렇다고 했다.

사용자가프로그램에서개체들을사용하는순서를섣불리예측해서는안됩니다. 중간고사·기말

고사·연구보고서·발표점수 순서로 입력할 수는 있지만, 모든 사용자가그런 것은 아닙니다.

사용자가 특정한 순서로 행동할 것으로 기대하는 것은 절차형 프로그래밍의 경우처럼 들린다고

말했다. 다음과 같은 순서로 현금 지급기를 따라가는 것처럼 말이다.

1. 카드를 삽입한다.

2 . 비밀번호를 입력한다.

3 . 입금 혹은 출금을 선택한다.

4 . 수량을 지정한다.

5 . 현금을 넣거나 받는다.

6 . 영수증을 받는다.

7 . 카드를 받는다.

가능하면절차형프로그래밍은 피해야한다고말했다. 절차형 프로그램사용자들은종종압박감

과 조급함을 느끼고, 잘 제어하지 못하고 있다고 생각한다. 창으로 이루어진 프로그램을 만들

때는 사용자가 프로그램을 잘 제어한다고 느낄 수 있게 하는 것이 좋다.

그래서 성적 계산이라는 버튼을 두어서, 사용자가 프로그램에게 성적을 계산할 준비가 되었다

는 것을 알리게 하자고 제안한 것입니다. 이렇게 하면, 프로그램이 무언가를 하기 위해 기다리

고 있다는 느낌을 받지 않게 됩니다.

학생들이 잠시이런 내용을 생각하고는내 말에 동의했다. 우리는성적 계산이라는 버튼을두기

로 확실히 정했고, 더 나아가서 사용자가 그 버튼을 클릭하기 전까지는 성적 계산을 수행하지

않기로 했다.

이제 점차 정리되어 가는 듯했다. 앞서 언급했듯이, 이처럼 처리과정 설계 동안 입·출력 설계

의 결함이 드러나게 된다. 코딩 과정에서 이런 결함을 결국 발견하겠지만, SDLC의 설계 단계

에서 이런 결함들을 수정하는 것이 프로그래밍 중간에 수정하는 것 보다 훨씬 쉽고 간단하다.

큰 프로젝트에서는 프로젝트의 일부가 각각 다른 프로그래머, 혹은 다른 팀에게 할당되어 코드

를 쓰게 된다. 설계 단계에서 결함이 발견되지 않은 상태에서 업무가 분배되면 그 결함을 발견

15 9

Page 42: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

하는데수주일혹은수개월이걸릴수도있다. 결함을늦게발견할수록일부코드를버리고다

시 쓰게 될 가능성이 커진다. 면밀한 설계는 문제를 상당히 경감시킨다.

우리는 성적 계산과정에서 발생할 만한결함들을 예방한 것이다. 이제는처리과정 설계와 관련

하여 다루지 않은 것이 있는지 확인하는 것이 남았다.

프로그램을 종료하는 것은 어떤가요? 그것에 대해서도 코드를 써야 하나요?

프로그램을종료하기위해서몇줄의 C# 코드를써야하지만그런내용은요구사항명세서에서언

급할 필요가 없다고 설명했다. 잠시 침묵이 흘렀다. SDLC의 설계 단계가 마무리 된 것 같았다.

수업에서 모두 동의한 요구사항 명세서의 최종은 다음과 같다.

요구사항 명세서

성적 계산 프로그램

개괄적인묘사

프로그램은 다음과 같은 것들을 포함하는 인터페이스를 가질 것이다.

성적을 계산할 세 학과를 나타내는 라디오 버튼 세 개.

각각중간고사, 기말고사, 연구보고서, 발표라는레이블이달리고, 사용자가 학생의최

종 성적을 계산하기 위해 점수들을 넣을 네 개의 텍스트 박스

클릭되면 학생의 최종 점수와 학점을 메시지 박스에 보여주는 성적 계산 버튼

클릭되면 텍스트 박스 네 개의 내용을 지우는 원래대로 버튼

시스템의 출력

학생의 최종 점수와 학점이 메시지 박스에 나타난다.

시스템의 입력

고객이 다음과 같이 지정한다.

성적이 계산될 학생의 학과를 라디오 버튼으로 선택한다.

영문과 학생이면 중간고사·기말고사·연구 보고서·발표 점수를 적당한 텍스트 박스

에 넣는다.

- 계속 -

6 0

Page 43: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

수학과 학생이면 중간고사·기말고사 점수를 적당한 텍스트 박스에 넣는다.

자연과학과 학생이면 중간고사·기말고사·연구 보고서 점수를 적당한 텍스트 박스에

넣는다.

업무 규칙

영문과학생의 점수는중간고사 25%, 기말고사 25%, 연구보고서 30%, 발표 20%를 반

영하여 계산한다.

수학과 학생의 점수는 중간고사 50%, 기말고사 50%를 반영하여 계산한다.

자연과학과 학생의 점수는 중간고사 40%, 기말고사 40%, 연구 보고서 20%를 반영하여

계산한다.

각 학과는 학점 등급별 점수 구간이 각기 다르다. 학점 구간 표는 다음과 같다.

학점 영문과 수학과 자연과학과

A 93 이상 90 이상 90 이상

B 85 이상 93 미만 83 이상 90 미만 80 이상 90 미만

C 78 이상 85 미만 76 이상 83 미만 70 이상 80 미만

D 70 이상 78 미만 65 이상 76 미만 60 이상 70 미만

F 70 미만 65 미만 60 미만

모두가 이 서술문에 동의하는지 확인하고 SDLC의 설계 단계의 종료를 선언했다. SDLC의 설

계 단계는 반복적인 작업임을 한 번 더 상기시키고, 나중에 이 지점에 또 돌아올지도 모른다고

말했다. 그리고는 SDLC의 네 번째 단계에 대한 토의로 넘어갔다.

4단계 : 개발

코스의 나머지부분은, 학생들의 활발한 참여를통한 성적 계산프로젝트 개발에 할애될것이기

때문에, 여기서 개발 단계에 대해 많이 논의하지는 않을 것이라고 말했다.

여러면에서개발단계는 SDLC에서가장흥미있는단계입니다. 이단계동안, 필요하면컴퓨

터 하드웨어를 구입하고 소프트웨어를 개발합니다. 그렇습니다. 개발 단계에서 코딩을 실제로

시작하는 것입니다. 그리고, 이 수업에서는 개발 툴로 C#을 사용할 것입니다.

16 1

Page 44: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

개발 단계에서 요구사항 명세서를 끊임없이 검토해서, 그대로 진행하고 있는지 확인할 것이다.

그들에게도 그렇게하라고주문했다. 또, 요구사항명세서에서벗어나려면 프로젝트리더(나)와

고객(올리·아론스트람·버튼 교수)의 승인을 얻어야 한다고 말했다.

나는 개발 단계는 두 부분으로 나누어진다고 말했다. 먼저, 최종 창 버전 프로그램과 같은 성적

계산을 하는 콘솔 프로그램을 개발할 것이다. 콘솔 프로그램은 창으로 된 사용자 인터페이스가

없다는 차이가 있다.

콘솔 프로그램으로 프로그램 이면에서 돌아가는 로직(logic)을 검증할 수 있게 해줍니다. 일단

검증이 되면 마지막 몇 주 동안 사용자 인터페이스를 만들고 이미 만든 로직을 합칠 것입니다.

학생들이 바로 시작하기를 열망했지만, 최종 두 단계를 설명할 때까지 참기로 약속했다.

5단계 : 완성

완성 단계는 프로젝트가 결실에 도달하는단계이다. 개발단계가 끝난 후에, 프로그램을 실제로

완성시켜 나가기 시작한다고 설명했다. 전형적인 프로젝트의 경우, 이것은 구입한 하드웨어를

고객에게 배달하고 거기에 프로그램을 설치하는 것을 의미한다.

우리 고객의 경우는 이미 장비를 갖추고 있습니다. 그래서, 완성 단계에서는 우리가 만든 C#

프로그램을 그들의 PC에 설치할 것입니다.

당연히 모두가 그 날의 흥분을 그곳에서 경험하고 싶어했다.

바바라가 테스트 문제에 대해 언급했다. 완성 단계 동안 하드웨어와 소프트웨어를 모두 테스트

한다. 우리가개발한소프트웨어를고객이실제로 사용하면서테스트하기를기대하는것은부적

절하기 때문에, 대부분의 소프트웨어 테스트는 학생들이 하기로 하였다. 당연히, 소프트웨어가

수학과, 영문과, 자연과학과에 설치될 때 버그(문제)가 없게 하는 것이 우리의 목표이다.

하지만 거의 항상, 개발자가생각지 못했던 문제가고객에 의해 드러난다는점을 주의해야 한다

고 말했다. 이런 유형의 문제들을 에러 처리 수업시간에 더 자세히 다룰 것이라고 말했다.

프로그래머들이 디버깅이라는 용어를 사용하는 것을 들었는데, 우리가 할 게 그런 건가요?

그렇고 말고. 디버깅은 프로그램을 실행시켜서 철저하게 테스트하고, 발견되는 에러를 제거하

는 과정입니다. 우리는 이것을 세 교수님들께 프로그램을 전달하기 전에 할 것입니다.

6 2

Page 45: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

어디서부터 시작해야 하는가? Chapter 1

그리고, 완성 단계에서 프로그램 사용자들을 교육시키는 일도 할 것이라고 말했다. 프로그램을

주로사용하게 될수학과, 영문과, 자연과학과의 근로장학생들을교육시켜야겠지만 올리·아론

스트람·버튼 교수님도 교육시켜야 할것이다. 모두가교육에 참여하고 싶어했다. 린다가 두 가

지수준의교육이 이루어져야한다고특별히언급했다. 한가지는올리·아론스트람·버튼교수

를 위한 간단한 수준이고, 다른 하나는 실제 프로그램 사용자를 겨냥한 좀더 세부적인 수준의

교육이다.

프로그램 사용자의 시스템 사용을 돕고 사용자가 겪을지 모를 컴퓨터 문제를 해결해주기 위해,

시스템 운영 첫 주 동안 학생 한 명이 영문과에 상주하는 것이 좋겠다는 의견들이 나왔다. 나는

좋은 아이디어라고 생각했고, 이렇게 하면 시스템에 있어 가장 중요한 사람들인 최종 사용자들

로부터 시스템 운영에 관한 귀중한 피드백을 얻을 수 있을 것이라고 지적했다.

사실 이런 피드백은 자연스럽게 SDLC의 최종 단계, 즉 심사(혹은 피드백) 및 유지 단계에 대

한 논의로 이어지게 만든다.

6단계 : 심사 및 유지

SDLC의 6단계는 심사와 유지 단계이다. 이 단계에서는 고객이나 때로 검수자 같은 제 3자가

시스템이 요구사항 명세서를 충실히 만족시키는지 조사한다. 조사에서는 시스템이 SDLC의 첫

단계인 예비 조사에서 도출된 문제점이나 단점을 해결했는지, 그리고 요구사항을 충족시키는지

를 가장 중요하게 여긴다.

경우에 따라서는 원래의 요구사항을 전혀 만족시키지 못하는 프로그램이나 시스템이 결과물로

개발되는 경우도 있다. 이 단계의 유지 부분은 이루어져야 할, 시스템의 변경 사항에 대해 다루

어서 이런요구사항을 충족시키게 할수 있다. 이런 변경은시스템이 원래의 요구사항을완전히

달성하지 못한 경우 이를 달성하기 위해, 혹은 고객 만족을 위해 이루어진다. 때때로 고객은 추

가 요구사항을 들어주면 매우 좋아한다. 세법이 개정된다거나 고객의 업무 규칙이 바뀌어서 시

스템이 꼭 변경되어야 하기도 한다.

앞부분에서 언급했듯이, 시스템 운영 첫 주 동안 수업의 구성원 한 명 이상이 수학과, 영문과,

자연과학과에 머물게 할 생각이다. 고객이 개발 팀 구성원에게 직접 피드백을 준다면 그것은 6

단계의 심사 부분에 해당하게 될 것이다.

우리는 올리·아론스트람·버튼 교수님이 프로젝트 결과물에 대해 매우 만족해하고, 수업을 위

해 더 도전적인 요구사항을 생각해 내기를 바란다.

16 3

Page 46: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

여기서 어디로 갈 것인가?길지만모두에게도움이되는내용이었다. 다음시간에는 C#을실제로시작해볼것이라고말했다.

와드가 프로젝트가 어떻게 진행될 것인지, 그러니까 마지막 수업시간에 한꺼번에 마칠 것인지

아니면 매주 조금씩해 나갈 것인지궁금해했다. 나는 프로그램을 점차적으로개발해 나가는 것

이더도움이될것같다고말했다. 매주프로젝트의일부를할것이다. 이렇게단계적으로프로

젝트를개발하는 것은모두의흥미를유지시키고수업의마지막 주이전에문제점들을파악하게

해줄 것이다.

요약

이 장의 목적은 어디서부터 시작해야 하는가? 라는 질문을 다루는 것이었다. 응용 프로그램의

설계는 정해진 수행계획이 있어야 구조적으로잘 이루어진다는 것을알았다. 정해진 대로 따라

가면서 필요한 모든 사항을 고려할 수 있었다.

요구사항 명세서는 프로그램의할 일 목록을포함하는 좋은 시작지점이다. 보통그 정보는 프로

그램 개발 의뢰인으로부터 얻을 수 있다. 큰 문제가 생기기 전에 프로젝트의 진행 방향을 제대

로 바꾸도록 의뢰인과 계속 접촉을 유지하는 것이 좋다. 다음의 여섯 단계로 이루어진, SDLC

(Systems Development Life Cycle , 시스템 개발 생명 주기)는 한 가지 훌륭한 구조적인 접

근방법이다.

예비 조사 단계 기술적 제한, 시간 제한, 예산상의 제한을 고려하고 응용 프로그램 개발을

지속할지 결정한다.

분석 단계 진행하기 위해 필요한 정보를 수집한다.

설계 단계 프로그래밍을시작하지않고프로그램의모양과구조에대한계획서를작성한다.

개발 단계 인터페이스를 만들고 코딩을 하여 프로그램을 만든다.

완성 단계 프로그램을 사용해보고 테스트한다.

유지 단계 발견되는 문제점들을 해결하고 새로운 필요를 충족시킴으로써 프로그램을 개선

시켜 나간다.

SDLC 방법을 사용하면 언젠가는 직면하게 되는 많은 문제점들을 설계 단계에서 미리 다루게

된다. 이런식으로하면코드를수정하는일없이문제들을해결할수있어서, 일을쉽고여러모

로 유리하게 진행할 수 있다.

6 4

Page 47: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

Chapter 2C#에 익숙해지기

초보 프로그래머를 위한 C# 프로그래밍C#

Page 48: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

이 장에서 독자들은 C# 개발환경을 처음으로 살펴보는 수업을 따라가게 된다. 이 장의 목적은

윈도우즈 메모장으로 C# 프로그램을 만들어서 컴파일하고 실행시키는 방법의 개요를 보여주는

것이다. 이장전체에걸쳐서, 학생들과나는다양한명령어를 PC에입력하여그결과를프로젝

터로 보여줄 것이다.

C# 에 익숙해지기

오늘 배울 것을 소개하며 두 번째 수업을 시작했다.

오늘의 수업에서는첫 번째 C# 프로그램을 만드는 것에집중할 것입니다. 그럼 시작해봅시다.

그리고 나서 윈도우즈 메모장을 실행시켰다.

이 프로그램을 메모장에 쓰실 건가요? C#은 Visual Basic 같은 통합개발환경(Integrated

Development Environment , IDE)이 없나요?

좋은 질문입니다. 모두 아는 것처럼 마이크로소프트 C# 컴파일러(compiler)를 다양한 방법으

로 얻을 수있습니다. 그 한 가지는 Visual St udio .NET을구입하는 것입니다. C#은 Visual

Stu dio .NET에 포함된 제품 중 하나입니다. 사실 Visual St udio .NET을 가지고 있다면 그

통합개발환경(IDE)으로 C# 프로그램을 작성할수 있습니다. C# 컴파일러를 얻는저렴한 다른

방법은 마이크로소프트 홈페이지에서 .NET 프레임워크를 무료로 다운받는 것입니다. .NET

프레임워크를 설치하면 C# 컴파일러가 포함되어 있습니다.

Visual Studio 통합개발환경으로 우리 프로그램을 작성하나요? 하고 마리가 물었다.

그렇지않습니다. 그리고그렇지않기때문에 C#이여러운영체제에서실행되는프로그램을만

들 수 있게 해주는 것입니다. 현재는 C# 컴파일러가 마이크로소프트 것 하나뿐이지만 조만간

유닉스, 리눅스, 매킨토시 같은 다른 플랫폼을 위한 컴파일러도 나올 것입니다. 그래서 여러분

이 Visual Stu dio 환경에서만 작업하기를 바라지 않습니다. 이런 이유로 모든 개발은 텍스트

에디터로 할 것이고, 이 수업에서는 메모장이라는 윈도우즈 텍스트 에디터를 이용할 것입니다.

그렇게 나쁘지 않은데요. 우리 자바 수업에서도 그렇게 했죠. 하고 데이브가 말했다.

맞습니다. 자바 프로그램도 특정 운영체제에만 길들여지지 않기 위해 메모장으로 작성한 것입

니다. C#은 앞으로 운영체제에 독립적이 될 것입니다. 그래서 C# 프로그램을 보통의 에디터로

6 6

Page 49: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

작성하는 것이 좋습니다. C#을 배우는 사람은 자바의 경우와 마찬가지로, 윈도우즈 메모장 같

은 에디터를 사용하여 코드를 쓰고, 윈도우즈 실행 메뉴에서 명령 프롬프트를 이용하여 프로그

램을 컴파일(compile)하고 실행시킵니다.

도스 프롬프트 말인가요? 도스는 거의 모르는데요. 하고 론다가 걱정하는 눈초리로 말했다.

걱정할 필요 없습니다. 일단 C#을 PC에 설치하면, 여러분의 프로그램을 컴파일하고 실행시키

는 것은 어렵지 않습니다. 오늘 그것을 어떻게 하는지 알려줄 것이고, 확실히 익히기 위해서 여

러분이 직접 연습해보는 시간을 가질 것입니다.

잘 따라오지못하는 사람이 있는지확인하려고 잠시 멈췄다. (농담아니고 정말로) 아무도그런

사람이 없어서 계속했다.

첫 번째 C# 프로그램 작성하기

C# 프로그램을 만드는 것은 세 단계의 과정입니다. 하고 말하고 다음 세 단계를 알려주었다.

1. 소스 파일을 만든다(반드시 그래야 하는 것은 아니지만, 소스 파일의 확장자는 .cs로 하는

것이 좋다) .

2 . C# 컴파일러를사용하여 MSIL(Microsoft Int ermediat e Language) 파일을만든다. 컴

파일러는 그 파일의 확장자를 자동으로 .exe로 만들 것이다.

3 . C# 해석기(Interpret er)로 프로그램을 실행시킨다.

확장자가 .cs인 소스 파일 만들기

먼저, 텍스트 에디터를이용하여(마이크로소프트윈도우즈 환경에서는메모장이가장 사용하기

쉽다) 소스파일이라는것을만들어봅시다. 소스파일은 C# 코드를포함하는그냥보통의텍스

트파일일뿐입니다. 그다음 C# 소스파일을원하는이름으로 PC의하드디스크에저장합니다.

하지만 보통 C# 소스 파일의 이름은 마침표와 cs로 끝나게 만듭니다. 예를 들어, 우리는

ILoveCSharp .cs라는 C# 소스 파일을만들 것입니다. 여기서 CSharp이라는단어 뒤의 .cs가

파일의 확장자입니다.

16 7

Page 50: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

TIP

반드시그래야하는 것은 아니지만, 소스파일의확장자는 .cs로하는 것이좋다.

잘 따라오지 못하는 사람이 있는지 보려고 잠시 멈추었다가 말했다.

일단텍스트에디터로소스파일을만들고나면 C# 컴파일러를사용하여그소스파일을 MSIL

(Microsoft Intermediate Language) 파일로 변환하거나 컴파일하게 됩니다. MSIL 파일은

확장자로 .exe를 가집니다.

MSIL 파일이 독자적으로 실행되나요? 다시 말하면 MSIL 파일을 다른 컴퓨터에 복사해서 실

행시킬 수 있나요? 하고 데이브가 말했다.

그렇지 않습니다. MSIL 파일은 확장자가 .exe이지만 마이크로소프트 .NET 프레임워크가 깔

린 PC에서만 실행됩니다. 현재로서는 마이크로소프트 윈도우즈 PC에서만 가능하지만 곧 다른

환경에서도 실행될 것입니다. 마이크로소프트는 가까운 미래에 다른 운영체제들도 .NET 프레

임워크를 채택해서, 우리가 이수업에서 만드는 MSIL 파일이 리눅스나 매킨토시에서도실행되

기를 희망하고 있습니다. 하지만 지금은 C# 해석기(Interpreter )가 깔린, 즉 .NET 프레임워

크가 설치된 컴퓨터에서만 실행됩니다.

C# 해석기가 C# CLR(common langu age runt ime)이라고도 불린다고 들었습니다.

Note

C# 해석기는 C# common language runtime 혹은줄여서 CLR이라고도불린다.

맞아, 데이브.

그러니까 결국에는 각 운영체제가 자기만의 C# 해석기, 혹은 CLR을 가질 것이라는 말씀인가

요? 하고 케이트가 물었다.

6 8

Page 51: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

그게바로마이크로소프트의의도입니다. 일단다른운영체제에서도 C# 해석기를사용할수있

게 되면 C# 프로그래머들은 현재 자바프로그래머들처럼, 운영체제 독립적인 코드를만들어 낼

수 있게 될 것입니다.

그리고, C# 컴파일러는독자적으로실행되는파일이아니라 MSIL 파일을만들어내기때문에

이런 이동성(t ransport ability)을 가질 수 있는 거죠? 그런가요? 하고 바바라가 물었다.

그렇습니다. 일단 MSIL 파일이만들어지면, 그안에 있는명령들을해석하고 실행시키는것은

PC 내에 있는 C# 해석기(CLR) 몫이 됩니다.

그러니까 C# CLR은실제로는해석기네요. 해석되는프로그램은실행파일로컴파일되는 프로

그램보다 훨씬 느리다는 말을 어서 들은 기억이 나는데, 그렇지 않나요?

해석되는 프로그램을 실행시키는 것은 .exe 파일을 실행시키는 것보다 느린 것은 사실입니다.

하지만 얼마나 느려지느냐가 중요하죠. 현대의 소프트웨어 개발에서는 속도보다는 이동성

(t r ansport ability)에 주로 초점을 둡니다. 여러분이 작성하는 C# 프로그램이 언젠가 수백 가

지 다른 플랫폼에서 실행될 수 있다는 사실로, C# 프로그램의 속도상의 경미한 단점은 상쇄될

수 있습니다.

다시 또, 계속하기 전에 질문이 있는지 살펴보았다.

우리의첫 C# 프로그램을 만들기위해 메모장을 사용하는것은 아주 간단합니다. I love C# !

이라는 메시지를 보여주는 C# 프로그램을 만들어 봅시다.

그리고 나서 메모장에 다음 코드를 넣었다.

16 9

Page 52: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

이 코드를 논의하기 전에, 먼저 메모장의 메뉴바에서 [파일 | 다른 이름으로 저장]을 선택하여

파일을 저장합시다.

나는 주로 C# 파일들을 C#Files라는 폴더에 저장합니다. 그래서 저장 위치 드롭다운 리스트

박스에서 C#Files를 지정한 것입니다. 그리고 파일의 확장자가 .cs가 되게 하기 위해 C# 소스

파일 이름을 따옴표로 둘러싼 것을 주목하세요. 저장 버튼을 클릭한 다음에는 메모장에 새로운

파일 이름이 반영되었는지 확인하세요.

이제 C# 소스 파일을 가지고 있으니, 두 번째 단계는 이 소스 파일을 MSIL 파일로 컴파일하

는것입니다. 이를위해 도스프롬프트를끌어내야합니다. 명령프롬프트는여러방법으로나타

낼수있습니다. 예를들어, 바탕화면에단축아이콘이있을수있고, 제어판에있을수도있습니

다. 그런 곳에서 찾을 수 없다면 윈도우즈 시작 메뉴를 눌러서 실행을 선택하고, comma nd.

com 혹은 cmd를 입력한 후, 확인 버튼을 눌러도 됩니다.

70

Page 53: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

이렇게 하면 명령 프롬프트 프로그램이 실행됩니다. 이 프로그램은 이런 모양입니다.

프롬프트는 현재 디렉토리를 보여주는데, 이 현재 디렉토리는 윈도우즈 95/ 98의 경우는 주로

Windows이고 윈도우즈 NT의 경우는 주로 WINNT입니다. 우리의 소스 코드 파일을 컴파일

하기 위해서는 현재 디렉토리를 C# 소스 코드 파일이 위치한 폴더로 바꿔야합니다. 그렇게 하

기 위해, 명령 프롬프트에 CD C:\ C#FILES라고 입력하고 ENTER를 눌러보세요. 그러면 프

롬프트가 이렇게 바뀝니다.

여기서 프롬프트에 DIR이라고 입력하고 ENTER를 누르면 C# 소스 파일의 위치를 확인할 수

있습니다.

17 1

Page 54: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

C# 소스 파일을 MS IL 파일로 컴파일하기

이제 소스 파일을 MSIL 파일로 컴파일할 수 있습니다. 이를 위해 명령 프롬프트에 다음과 같

이 입력하고 ENTER를 칩니다.

cs c I LoveCShar p . cs

그렇게 했더니 다음 내용이 나타났다.

보이는것처럼 C# 컴파일러의버전을나타내는메시지가나타납니다. 교수님께서하신것처럼,

C# 소스 파일의 이름에 대·소문자를 섞어 써야 하나요? 하고 데이브가 물었다.

그렇지 않습니다. 이런 컴파일러 명령어들은 대·소문자를 구별하지 않습니다. 나중에 언어 자

체는 대·소문자를 구별하는 것을 보게 되겠지만, 파일 이름은 모두 소문자로 적어도 됩니다.

아무 일도 일어나지 않은 것 같은데요. 하고 린다가 말했다.

7 2

Page 55: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

에러 메시지를 받지 않았다면 잘 된 것입니다. C# 소스 파일에 문제가 있다면 여기서 에러 메

시지 형태로 알려줍니다. DIR 문을 실행시켜서 C# 소스 파일이 MSIL 파일로 컴파일되었는지

확인할 수 있습니다.

소스 파일이 .exe 확장자를 가지는 MSIL 파일로 컴파일된 것을 확인하세요.

그럼 우리가 실행 파일을 만든 건가요?

그럴수도있고, 아닐수도있지, 데이브. 이파일은 MSIL 파일, 즉 Microsoft Int ermediat e

Langu age 파일입니다. 그 확장자가 .exe이기는하지만 .NET 프레임워크를포함하는 PC에서

만 실행됩니다. .NET 프레임워크가 설치되어 있지 않은 옆 실험실의 PC에서는 실행되지 않습

니다.

일반적인 컴파일 에러

저도똑같이따라했습니다. 그런데소스파일이잘컴파일이되지않습니다. 옵션이잘못되었다

는 에러 메시지를 받았습니다.

아차 : 잘못된 옵션 혹은 인자

C# 소스 파일을 컴파일하는 것은 아주 쉽습니다. 하지만 처음 C# 프로그래밍을 시작할 때는

두 가지 일반적인 에러가 흔히 발생합니다. 첫 번째는 이처럼 C# 컴파일러에 파일 이름을 잘못

지정하면 발생합니다.

17 3

Page 56: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

소스파일의 이름에확장자를 포함시키고서컴파일러에게 그확장자를 명시해주지않아도 에러

메시지를 받을 수 있습니다.

제가 바로 그렇게 했습니다. 저는 .cs라는 파일 확장자를 명시해야 할 필요를 못 느꼈습니다.

하고 론다가 말했다.

제가 알기로는, 자바에서는 클래스의 이름과 소스 파일의 이름이 같아야 하는데, C#에서도 그

런가요?

그렇지 않아, 데이브. 소스 파일의 이름은 아무거나 상관없습니다.

컴파일 시 두 가지 일반적인 에러가 발생한다고 하셨는데, 두 번째는 뭔가요?

아차 : 컴파일러를 찾을 수 없다

두번째일반적인에러는 C#을잘못설치했거나윈도우즈가 C# 컴파일러를찾을수없는경우

발생합니다. 그런 경우에 소스 파일을 컴파일하려면 이런 에러 메시지를 받게 됩니다.

74

Page 57: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

윈도우즈가 C# 컴파일러를 찾을 수 없는 경우에 보이는 에러 메시지를 일부러 발생시켰다.

이에러메시지를받으면 .NET 프레임워크가 PC에제대로설치되지않았거나윈도우즈가 C#

컴파일러를찾을수없다는뜻입니다. 이경우 C# 컴파일러의경로가 PC의경로설정에포함되

어 있는지 확인해야 합니다.

TIP

C# 컴파일러를찾지못하는경우 [시작|실행]에서 command.com 대신 cmd를 입력하면해결되기도한다.

C# 프로그램 실행시키기

이제우리는 C# MSIL 파일, 즉 .exe 파일을가지고있고, 단지명령프롬프트에그이름을입

력함으로써 프로그램을 실행시킬 수 있습니다.

175

Page 58: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

여기서는 MSIL 파일의 이름을 대·소문자를 섞어서 입력했지만 그럴 필요는 없습니다. 그 이

름을 모두 소문자로 입력해도 되고, .exe 확장자를 지정할 필요도 없습니다.

코드를 설명해주세요. 하고 로즈가 부탁했다.

그래야지. 하고 말하고 한참 수업을 했으니 잠시 쉬자고 제안했다.

C# 프로그램의 요소

15분 후, 나는 코드에 대한 논의를 개체지향 프로그래밍에 대한 깊숙한 논의로 시작할지 잠시

고민했다. 이런 내용은 C#에서 중요한 내용이지만 초보자들에게는 혼동될만한 것이기 때문이

다. 단순히 이 코드가 뭘 하는 건지 간단히 설명하고 나서 개체지향 프로그래밍과 연관짓는 것

도 한 방법이다. 일단코드에 대해 간단히설명하기로 결정하고 프로젝터에다음 코드를 보여주

었다.

/ *

이 프로그램은 콘솔에 "I l ove C#!"이라고 나타낸다.

*/

cl as s I LoveCShar p {

publ i c st at i c voi d Mai n (st r i ng [] args ) {

Syst em.Consol e .Wr i t eLi ne ("I l ove C# !" ) ;

}

}

프로그램 주석

처음세 줄의코드는프로그램 주석입니다. 프로그램 주석은 C# 코드에 포함시킬수있는 설명

문입니다. 모든 프로그래밍 언어에는 주석을 넣을 수 있습니다. 주석을 넣는 비결은 입력한 문

장이 C# 명령문이 아니라 주석이라고 C#에게 알려주는 것입니다. C#에서는 주석임을 표시하

는 방법이 세 가지 있습니다.

별표가 나타내는 게 그건가요? 그걸 보니까 C의 주석이 생각납니다.

맞아, 마리. 이세 줄은 C 언어의주석과 비슷해보입니다. 하고 말하고프로젝터로 다음세 줄

을 가리켰다.

7 6

Page 59: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

/ *

이 프로그램은 콘솔에 "I l ove C#!"이라고 나타낸다.

*/

C와는 약간 달리 이런 형태로 사용할 수도 있습니다. 하고 말하고 다음과 같이 고쳤다.

/ **

이 프로그램은 콘솔에 "I l ove C#!"이라고 나타낸다.

*/

이 두 가지 주석 형태 모두 블록 주석이라고 알려진 것으로써, 주석이 한 줄을 넘어갈 때 사용

할 수 있습니다. 두 경우 모두 두 경계 기호 사이의 모든 내용은 주석으로 간주됩니다. 이 외에

도 이런 형태의 주석도 있습니다. 하고 말하고 다음 내용을 입력했다.

/ / 이 프로그램은 존 스마일리가 작성했습니다.

컴파일러는 / / 다음부터 줄 끝까지 모두 무시합니다.

주석은 한 줄에 단지 홀로 나타날 수 있나요, 아니면 C# 문장 뒤에 올 수도 있나요?

C# 명령문 뒤에도 주석을 넣을 수 있습니다. 단지 이처럼 / / 뒤에 내용을 넣으면 됩니다.

Syst em.Consol e .Wr i t eLi ne ("I l ove C# !" ) ; / / 메시지를 출력한다

주석에도 표준 양식이 있나요? 주석을 코드 꼭대기에만 넣어야 하나요? 아니면 아무데나 넣어

도 되나요?

표준이 있다고는 말할 수 없습니다. 일부 프로그래머는 코드의 꼭대기에 주석을 넣어서 프로그

램작성자, 쓰여진날짜등등나중에도움이될만한것들을적습니다. 나는도움말파일이나메

뉴얼을 참고하여 코드를 쓴 경우에는 항상 주석을 넣습니다. 일부 프로그래머들은 주석을 별표

로 둘러싸서 꽃 상자라는 것을 만들어 주석을 강조하기도 합니다.

17 7

Page 60: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

/ **********************************************************

* 프로그래머: 존 스마일리

* 작성일: 2001년 1월 21일

* 이 프로그램은 콘솔에 "I l ove C#!"이라고 나타낸다.

***********************************************************/

전에 저희가 직접 연습할 것이라고 말씀하셨는데, 연습에서도 주석을 코딩해 넣나요?

여러분들 일부는 타이핑이 느리기 때문에, 우리 연습에서는 주석을 포함시키라고 명시하지는

않을 것입니다. 연습을 다 한 다음에 주석을 넣는 것은 여러분 각자 알아서 하세요.

주석의 복잡함에 대한 논의로 돌아가서, 우리 C# 코드의 첫 세 줄이 아무 뜻도 없다는 말씀인

가요? C#이 그걸 그냥 무시하나요?

정확히 그렇습니다. C#에게는 그 첫 세줄은 의미가 없습니다. C# 컴파일러가 컴파일할 때 이

부분은 MSIL 파일로 변환시키지 않습니다. 결과적으로 C# 해석기가 MSIL 파일을 실행시킬

때, 이 부분의 코드는 완전히 무시됩니다.

아무도 주석에 대해 더 이상 묻지 않았다.

클래스(Cla ss ) : C# 프로그램의 핵심

주석 다음 코드를 살펴봅시다. 아주 간단하지만 이 코드가 C# 프로그램에서 가장 중요한 줄입

니다.

cl as s I LoveCShar p {

C#은 개체지향 언어이고, 그게 정확히 무엇인지 그리고 그게 왜 중요한지는 이 코스가 진행되

어 감에 따라 더 배울 것입니다. 지금은 클래스라고 불리는, 개체지향 언어의 기본 블록에 대해

이해해봅시다. 클래스는 개체의 템플릿(template) 혹은 설계도라고 생각하면 됩니다.

개체에대해말씀하실때, 우리가보거나만질수있는유형의아이템이라고하시지않았나요?

하고 스티브가 물었다.

7 8

Page 61: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

그런 식으로 생각할 수도 있습니다. C#과 같은 개체지향 프로그래밍 환경에서, 여러분이 사용

하는것들을추상적인알고리즘대신실세계의개체로간주하는것이종종더쉬울수있습니다.

예를 들어, 우리가 수학과, 영문과, 자연과학과를 위해 개발하는 프로그램에서는 결국 학생 개

체를 포함하는 C# 프로그램을 만들 것입니다. 우리는 그 개체를 St udent 클래스라는 용어로

정의할것이고, Student 개체를이름과최종성적같은특성들로묘사할것입니다. 또한, 그개

체에 Calculate와 같은특정한 동작을부여하여 프로그램에의해 실행되면최종 성적을결과로

출력하게 만들 것입니다. 나중에 이 코스에서 속성(at t r ibute)은 변수(variable)라는 것으로

정의되고, 동작(behavior)은 함수(funct ion)나 메소드(method)라는 것으로 구현된다는 것을

배울 것입니다.

클래스가개체의템플릿(templat e)이라고하셨는데, 어떻게설계도로부터실제개체를만들어

내나요?

일단 클래스를 통해서 개체의 템플릿이 만들어지면, 이를 이용하여 프로그램이 실행될 때 개체

의 인스턴스(inst ance , 실체)를 만들 수 있습니다. 이 때 개체의 속성에 값을 부여하거나 메소

드를 실행시켜서 개체의 내부 동작을 발생시킬 수 있습니다. 그건 그렇고, 클래스의 속성과 메

소드를 합쳐서 클래스의 멤버(member )라고 합니다.

Note

클래스를실체화하는 것은그개체의 인스턴스를 만드는 것이다.

속성과메소드모두가이한줄의코드에다들어가있는건가요? 속성과메소드는어디에정의

되나요? 하고 조가 물었다.

이것은 그냥 아주 간단한 프로그램입니다. 이 클래스에는 속성은 없고 Ma in ()이라는 단지 한

개의메소드만있습니다. 이메소드를 Ma in() 함수라하기도합니다. 이코드의첫줄은클래스

에 이름을 부여하는 곳입니다. 보이는 것처럼 class라는 키워드로 ILoveCSharp 클래스의 정

의를 시작합니다.

cl as s I LoveCSharp {

17 9

Page 62: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

클래스 이름 다음에 왼쪽 중괄호가 오게 되고, 실제 클래스 정의가 시작됩니다. 그리고 대응되

는 오른쪽 중괄호 부분에서 클래스 정의가 끝납니다.

Main() 메소드

말한 것처럼, 이 클래스는 속성이 없고 Ma in()이라는 메소드 하나만 가지고 있습니다.

publ i c s t at i c voi d Mai n (s t r i ng [] ar gs ) {

이 줄을 별도로 자세히 설명해야 할지 망설여졌다. 이전 C# 코스에서는 그렇게 했었는데, 설명

이 자꾸길어졌다. 그수업이끝난 후, 학생들이 C# 수업초기에는 그냥진행해나가는 게나은

것 같다고 말했다. 이 코드 한 줄을 자세히 분석하는 것은 보통 수십 분은 필요로 하기 때문에,

그렇게 하지 않기로 결정했다.

여러분이 C# 프로그램을 작성하면, C# CLR은 Ma in()이라는 메소드를 찾아봅니다. 여러분이

상상하는 대로, 이 메소드가 없으면 컴파일 에러가 발생합니다. 그건 그렇고 Ma in()은 대·소

문자를 구별하여 적어야 합니다. 철자를 달리 적고 프로그램을 컴파일하면 컴파일 에러가 발생

합니다.

잠시 시간을 내어 Ma in() 함수의 이름을 Ma ry()로 바꾸면 프로그램에 어떤 일이 발생하는지

보여주었다. 다음 스크린샷이 프로젝터에 나타났다.

정의된 진입점이 없다는 말은 소스 파일에 Ma in() 함수가 없다는 말입니다. 나중에 이 코스에

서 자신만의 함수나 메소드를 작성할 수 있다는 것을 배우게 되겠지만, 지금으로서는 모든 C#

프로그램이 반드시 이 줄을 포함해야 한다는 점을 기억하세요.

8 0

Page 63: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

Ma in() 메소드의 중괄호 사이의 코드들이 실제 프로그램인가요?

Ma in() 메소드의 유일한 코드를 프로젝트로 보여주면서 말했다.

그래, 케이트. 왼쪽 중괄호와오른쪽 중괄호사이의 모든것은 Ma in() 메소드의명령문을 나타

냅니다.

Syst em.Consol e .Wr i t eLi ne ("I l ove C# !" ) ;

이 줄이 실행되면 I love C#이라는 문구가 콘솔 창에 나타납니다. 보통은 Ma in () 메소드에

여러개의 C# 명령문을넣습니다. 보통 Ma in () 메소드에는 C# 프로그램의주요명령들을위치

시킵니다. 대개 Ma in() 메소드 내에서, 다른 소스 파일로부터 컴파일된 클래스들을 개체로 실

체화시킵니다. 예를들어, 우리의성적계산 프로젝트에서는한소스 파일에 Student 클래스를

정의한 다음 컴파일하여 그것을 다른 소스 파일에서 실체화시킬 것입니다.

몇 명이 혼동하는 것 같아서 프로젝트로 다음 도해를 보여주었다.

보통하는 것처럼, 우리는 Student 클래스를 만들고 그것을 St udent라는 MSIL 파일로컴파

일할 것입니다. 그리고 나서 아마 Grade라고 이름을 붙이게 될 메인 클래스를 만들고 그 클래

스의 Ma in() 메소드에서 Student 개체를 실체화할 것입니다.

그러니까, 우리가 두 개 이상의 클래스를 이용할 거라고 이해했다면 맞나요?

그렇지, 데이브. C#에서는 모든 것이 클래스이고 개체입니다. 그것들로 우리 프로그램을 구축

합니다. C# 프로그램이 수십 개의 클래스와 개체를 이용하는 것은 이상할 것이 없습니다. 실제

개발 환경에서는 여러 프로그래머로 구성된 팀이 있고, 프로그래머 각각이 전체 시스템을 구성

18 1

Page 64: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

하는 클래스들을 만드는경우도 있습니다. 이 코스의학생들 모두가 성적계산 프로젝트의 클래

스와 개체를 만들 것이지만, C#은 개체지향이기 때문에 클래스 생성 작업을 다른 학생들로 구

성된 여러 팀에게 할당하여, 서로 완전히 독립적으로 할당받은 일을 하게 할 수도 있습니다.

이해되는 것 같습니다만, 질문이 하나 있습니다. 우리 C# 프로그램에서 사용하는 개체들 모두

에 대해 우리가 직접 클래스를 만들어야 하나요?

좋은질문이구나, 론다. C#에는많은클래스들이이미만들어져있어서그것들로부터개체들을

실체화할 수 있습니다. 그래서 C# 언어가 강력한 것입니다. 여러분이 오늘밤 집의 문을 열었는

데 문의 손잡이가망가졌다고 생각해보세요. 그런 경우에근처의 철물점으로 차를몰고 가서 새

로운 손잡이를 구입하면됩니다. 집의 많은 부분들은상점에서 구입할 수있는 부품들로 이루어

져있습니다. C#도마찬가지입니다. C# 클래스와개체들은집에있는물건들같습니다. 그것들

을 사용하려면 그게 어디 있는지, 어떻게 설치하는지, 그 속성과 메소드들을 가지고 어떻게 작

동시키는지 알면 됩니다.

이 프로그램 예제에도 기존에 만들어져 있는 개체들이 있나요? 하고 바바라가 물었다.

프로젝터에서 다음 줄을 가리키면서 말했다.

있습니다. 사실 이 코드는 C#의 System 개체를 사용합니다.

Syst em.Consol e .Wr i t eLi ne ("I l ove C# !" ) ;

Syst em이라는 단어 다음에 마침표를 사용하는 것을 개체 점 표기(obj ect dot not at ion)라고

부릅니다. 그 규칙에 따르면 점 뒤에 오는 것은 다른 개체이거나 속성이거나 메소드입니다. 이

경우에 Console 은표준출력이라는것을나타내는다른개체입니다. 항상그런것은아니지만,

그것은 보통 PC의 모니터, 혹은 우리가 수업에서 칭하는 것처럼 콘솔입니다. 줄 끝에 세미콜론

( ;)이 있는 것을 주목해보세요. C# 문장은 반드시 세미콜론으로 끝나야 합니다. 마지막으로 이

두 줄은 작업을 마치는 것입니다. 하고 말하고 다음 부분을 가리켰다.

}

}

8 2

Page 65: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

Note

모든 C# 문장은 반드시세미콜론(;)으로끝나야한다.

오른쪽 중괄호가 두 개 있는 것을 볼 수 있습니다.

저게 뭐죠? Ma in() 메소드의 끝 표시로 오른쪽 중괄호가 하나 있어야 할 걸로 생각했는데, 두

번째 것은 뭔가요?

두 번째 오른쪽 중괄호는 클래스 끝을 표시합니다. 하고 말하고 다음 그림을 프로젝터로 보여

주었다.

Syst em 개체를사용하기위해특별히뭔가해줘야하나요? 속성과메소드를이용하기전에개

체를 실체화해야 한다고 말씀하신 것 같은데요.

맞아, 마리. 보통 개체를 사용하려면 먼저 실체화해야 합니다. 하지만 System 개체는 다릅니

다. 그 속성과 메소드를 이용하기 위해서는 여기서처럼 그냥 사용하면 됩니다.

원래 갖추어진 개체들 목록도 있나요? 하고 발레인이 물었다.

.NET 프레임워크를 설치할 때 C# 문서가 포함되어 있다면 좋겠지만 지금으로서는 그렇지 않

습니다. 여러분은 마이크로소프트 웹 사이트에서 C#에 대한 상당히 많은 문서를 참고할 수 있

고, 마이크로소프트 워드 형식의 언어 레퍼런스를다운받을 수도 있습니다. 하지만 이 수업에서

18 3

Page 66: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

는 그런 것에 너무 신경쓸 필요가 없습니다. 내가 여러분이 필요한 모든 개체들을 지적하고 소

개할 것입니다.

Note

마이크로소프트웹사이트의 다음주소에서 C# 언어레퍼런스를찾을수 있다.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vcoriCProgrammersReference.asp

코드로 돌아가서, 들여 쓰기가 중요한 건가요? 그리고 앞서 C#은 대·소문자를 구별한다고 하

셨는데, 대·소문자를 어느 정도 구별하나요? 하고 와드가 물었다.

두번째 질문에대해답변하자면 C#에서개체이름의 철자는아주조심해야 합니다. 예를 들어

서 이 코드는. . .

Syst em.Consol e .Wr i t eLi ne ("I l ove C# !" ) ;

. .이 코드와는 같지 않습니다.

syst em.Consol e .Wr i t eLi ne ("I l ove C# !" ) ;

System 을소문자로쓰면 C#이 Syst em 클래스를찾을수없게되어서컴파일에러가발생합

니다. 같은식으로, Console이나 Writ eLine을모두소문자로 적어도같은에러가발생합니다.

그러니까 클래스, 속성, 메소드를 찾을 수 없다는 컴파일 에러가 발생하면 바로 그 철자를 확인

해보세요. 그 이름은 C# 문서에 명시된 것과 정확히 일치해야 합니다. 첫 번째 질문에 대해 말

하자면, C#은 들여 쓰기와 코드의 빈 줄을 무시합니다. 예를 들어, 좀 심하게는 전체 프로그램

을 한 줄의 코드로 쓸 수도 있습니다.

들여 쓰기가 어떻게 중요한가요? 하고 발레인이 물었다.

그것은 가독성(readability)을 위해 중요합니다. 그러니까, 다른 프로그래머가 여러분의 코드

를 쉽게 읽을 수 있게 하고자 한다면, 여기서처럼 들여 쓰기를 하는 것이 클래스 정의가 어디서

시작하고 끝나는지 메소드는 어디에 있는지 더 쉽게 파악할 수 있게 해줍니다.

8 4

Page 67: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

공백은 뭔가요? 일부 C# 프로그래머들은 그걸 자주 언급하던데요. 하고 케이트가 물었다.

공백(white space)은 C# 문자사이의공간, 혹은코드줄사이의빈줄입니다. 공백을적절히

사용하여 코드를 더 읽기 쉽게 만들 수 있습니다. 예를 들어 이 코드는. . .

Syst em.Consol e .Wr i t eLi ne ("I l ove C# !" ) ;

. . .공백을 이용하여 이렇게 쓸 수 있습니다.

Syst em.Consol e .Wr i t eLi ne ("I l ove C# !" ) ;

그래도똑같이동작합니다. 여기서기억해야할점은공백과관련하여어떤극단으로치닫지말

라는 것입니다. C# 프로그램을 한 줄로 작성할 수도 있지만 그렇게 하면 너무 읽기 어려워집니

다. 그리고 프로그램에 많은 공백을 넣을수 있는데도, 대부분의 프로그래머들은 코드가 밀집되

어 있는 것을 좋아해서 코드에서 빈 줄과 공백이 별로 없는 것을 보게 될 것입니다.

상속(inherit ance) , 캡슐화(encapsulat ion) , 다형성(polymorphism) 등 여러 개체지향 용

어들에 대해 들어봤는데, 그런 것들도 배우나요? 하고 밥이 물었다.

배울 것입니다. 하지만 오늘은 아니고 몇 주 후에 다룰 것입니다.

C#에도 Visual Basic처럼 계행(cont inuat ion) 문자가 있나요? Visual Basic에서는 코드

한 줄을 여러 줄로 쪼개고 싶으면 밑줄을 사용했습니다. C#에도 비슷한 것이 있나요?

C# 코드에는 공백을 넣으면 되기 때문에, 한 줄의 코드를 여러 줄로 쪼개고 싶다면 그냥

ENTER 키를 누르면 됩니다. C#은 그래도 상관없습니다. 예를 들어 이 코드는. . .

Syst em.Consol e .Wr i t eLi ne ("I l ove C# !" ) ;

. . .이렇게 두 줄로 쪼개질 수 있습니다.

Syst em.Consol e .Wr i t eLi ne

("I l ove C#!" ) ;

18 5

Page 68: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

유일하게줄을쪼갤수없는부분은따옴표로둘러싸인스트링중간입니다. 여기서는콘솔에보

여줄, 따옴표로 둘러싸인 부분이 그렇습니다. 그 부분을 이렇게 쪼개면 문법 에러가 발생합니

다. 하고 말하면서 다음 코드를 보여주었다.

Syst em.Consol e .Wr i t eLi ne ("I l ove

C# !" ) ;

using 키워드

앞에서, C# 프로그램에서 Syst em 개체를포함시키기 위해서는아무것도 할필요가 없다고말

씀하셨고, .NET 프레임워크가 우리 프로그램을 컴파일하고 실행시킬 때 알아서 찾아줍니다.

같은방식으로 Console 개체의 WriteLine 메소드를실행시킬때도 System 개체를 전혀참조

하지 않는다면 좋지 않을까요?

그럴 수도 있나요? 그러니까 코드에서 System 개체에 대한 참조를 그냥 없앨 수 있나요? 하

고 피터가 물었다.

Console 개체는 System 개체에 포함되어있기때문에, 그렇게하고서프로그램을컴파일하면

에러가발생합니다. 하지만찾을수없는참조가있다면, System 네임스페이스(namespace)라

는 것에서 찾아보라고 C#에게 알려줄 수 있습니다. 그렇게 하면 C#은 Console 개체를 거기서

찾아봅니다. using 키워드를 이용하여 그렇게 할 수 있습니다. 어떻게 하는지 봅시다.

그리고 나서 데모 프로그램을 다음과 같이 고쳤다.

/ *

이 프로그램은 콘솔에 I l ove C#! 이라고 나타낸다.

*/

us i ng Syst em;

cl as s I LoveCShar p {

publ i c st at i c voi d Mai n (st r i ng [] args ) {

Consol e .Wr i t eLi ne ("I l ove C#!" ) ;

}

}

그리고 나서 코드를 성공적으로 컴파일하고 실행시켰다.

8 6

Page 69: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

뭘하신건지알겠습니다. u sing 문을포함시켜서더이상 Console 앞에 System 접두어를붙

일 필요가 없게 만드신 거죠? 맞나요?

정확해, 바바라. System .Console의 Writ eLine 메소드의 전체 참조 경로를 포함시키는 것을

완전히 한정한다(fully qualify)고말합니다. 그렇게하면 타이핑하기가정말 힘들어지죠. 이처

럼 C#에게 System 네임스페이스를사용한다고알려주면, 특히코드에서 System 개체를 자주

참조하는 경우 아주 간편해집니다. 타이핑해야 하는 문자 수를 정말로 많이 줄여줍니다.

질문을 기다렸으나 더 이상 없는 듯했다.

이제 여러분이 C# 프로그램을 직접 작성하고 컴파일하고 실행시켜 볼 기회를 주고 싶습니다.

이코스의남은수업동안여러분에게계속연습문제를내주고완성하도록시킬것입니다. 하고

말하고 다음 연습문제를 나눠주었다.

연습문제 2- 1

여러분의 첫 번째 C# 프로그램 코딩하기 - Grad es .cs

이 연습문제에서는 여러분의 첫 번째 C# 프로그램을 작성할 것인데, 그것은 우리 수업 프로젝

트의기초가될것이다. C#에서는모든것이클래스에기반한다는점을기억하자. 따라서, 여러

분의 프로그램이 실제로 Ma in () 메소드 하나를 포함하는 클래스 정의를 가질 것이다.

1. 하드디스크에 C#Files\ Greades라는 폴더를 만든다. 이 폴더가 우리 클래스 프로젝트의

홈이 될 것이다.

2 . 메모장을 이용하여 다음 코드를 입력한다. 대·소문자를 아주 주의해서 입력한다.

us i ng Syst em;

cl as s Gr ades {

publ i c st at i c voi d Mai n (st r i ng [] args ) {

Consol e .Wr i t eLi ne ("I t ' s not much, but i t ' s a s t a r t !" ) ;

}

}

3 . 메모장의메뉴에서 [파일 | 다른 이름으로 저장]을선택하여, 소스파일을 C#Files\ Grades

폴더에 Grades .cs로 저장한다. 소스 파일의 확장자가 .cs가 되도록 해야한다.

18 7

Page 70: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

검토

메모장에 익숙하지 않은 몇몇을 제외하고는 이 연습문제는 무리 없이 진행되었다. 잠시 후, 모

두가 첫 번째 C# 프로그램 코딩을 마쳤다. 이 소스 파일은 아주 간단하지만 결국 올리·아론스

트람·버튼 교수님에게 줄 프로그램의 기초를 형성할 것이다.

수학과, 영문과, 자연과학과의 성적을 계산하기 위해 이 프로그램을 사용하나요? 이 프로그램

이 하는 거라고는 콘솔에 메시지를 보여주는 것이 전부인 것 같은데요.

맞아, 마리. 천리 길도 한 걸음부터라는 말을 들어봤죠? Grades 클래스를 만든 것이 그 첫 걸

음입니다. 이것으로부터 다른 모든 것들을 구축할 것입니다. 사용자의 요구사항은 아니지만 이

메시지를 출력하는 코드를 넣은 것은, 여러분이 이걸 컴파일하고 실행시켰을 때 프로그램이 뭔

가 하는 것을 보여줌으로써, 뭔가 일어나고 있다는 것을 입증하기 위한 것입니다.

이 클래스를 코딩하는 것에 대해 질문이 없었다. 이것은 앞서 살펴본 것과 거의 똑같았다. 다음

으로 두 번째 연습문제를 나눠주었다.

연습문제 2- 2

Grad es .cs 컴파일 하기

이연습에서는연습문제 2- 1에서만든 Grades .cs 소스파일을 Grades .exe라는 MSIL 파일로

컴파일한다.

1. 도스 명령 프롬프트 프로그램을 띄운다. 여러 방법으로 할 수 있는데, 한 가지 쉬운 방법은

[시작 | 실행]을 선택하고 열기 박스에 comma nd .com 혹은 cmd라고 입력하는 것이다.

2 . 명령프롬프트에서 CD C:\ C#FILES\ GRADES라고입력하고 ENTER를눌러서 Grades.cs

소스 파일이 있는 디렉토리(폴더)로 이동한다.

8 8

Page 71: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

Note

소스파일을 다른드라이브에저장했다면, C' 대신그드라이브문자를 입력한다.

3 . DIR 명령을 이용하여여러분의 C# 소스 파일이있는지 확인한다. Grades .cs에대한 엔트

리가 다음과 같이 나타날 것이다.

소스 파일을 볼 수 없다면 연습문제 2- 1에서 뭔가 잘못한 것이므로 계속 진행하기 전에 뭘

잘못했는지 확인해야 한다.

4 . 명령프롬프트에 csc Grades .cs라고입력하고 ENTER를눌러서 Grades .cs 파일을컴파

일한다. 에러 메시지가 없다면 소스 파일이 MSIL 파일로 컴파일된 것이다.

5 . DIR 명령을이용하여 C# MSIL 파일이만들어졌는지확인한다. 다음과같이 Grades .exe

에 대한 엔트리가 있어야 한다.

18 9

Page 72: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

검토

첫번째연습이매끄럽고쉽게진행된것과는달리, 이연습에서는절반이상의학생들이 C# 프

로그램을 컴파일하는 데여러 어려움을 겪었다. 전형적인에러는 몇 분전에내가 경고했던 것인

데, 말로경고하는것과직접경험하는것은완전히다르다. 경험은위대한스승이다. 그래서나

는 학생들에게 직접 연습문제를 마칠 수 있도록 충분한 시간을 주었다.

컴파일이안됩니다. 이연습문제는아주쉬워보이는데, 이렇게많은문제를겪으리라고는생각

못했습니다. 하고 론다가 불평했다.

론다에게 잠시 다가가서, 그녀의 프롬프트 창에 다음 메시지가 있는 것을 보았다.

이건간단한 거네. 대부분의초보자가 이걸잘 알아차리지못하는데, 네가 csc가 아니라 cs 를

실행시켜서 C# 소스파일을 컴파일하려고 하고있잖아. 많은 초보자들은 처음에컴파일러 이름

이 C# 파일의 확장자와 같다고 생각하지. 단순히 이 명령문을. . . 하고 말하면서 스크린을 가리

켰다.

cs Gr ades . cs

. . .이렇게 바꾸면 돼. 하고 수정했다.

cs c Gr ades . cs

그리고 어떻게 되나 봐봐.

당연히 론다의 소스 파일은 MSIL 파일로 컴파일되었고, 론다가 미소지었다.

9 0

Page 73: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

다음은 와드였다. 와드의 PC에는 이런 에러 메시지가 있었다.

소스 파일을 이미 성공적으로 컴파일한 데이브가 문제를 바로 짚어냈다.

문제가 뭔지 압니다.

음. 그럼 그냥 거기 서있지만 말고 뭔지 말해봐. 하고 와드가 말했다.

Console 의 c를 소문자로 적었잖아. C# Console 클래스는 대문자 C로 시작하거든. 나도 그

랬었지. 하고 데이브가 말했다.

데이브 말이맞았다. 나는 나머지 학생들에게이 수업에서 대·소문자를구별하는 것이 아주중

요하다는 것을 다시 한 번 상기시켰다. 와드가 메모장을 띄워서 소스 파일을 수정하고 나서 컴

파일했더니, 기쁘게도 프로그램이 성공적으로 컴파일되었다.

교실 앞의 내 PC로 가는 도중에 케이트가 PC에서 이런 에러 메시지를 응시하고 있는 것을 발

견했다.

도와줄까?

10분 동안 이 문제를 해결하려고 노력중입니다. 이건 Visual Basic만큼 쉽지는 않은데요.

19 1

Page 74: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

초보 프로그래머를 위한 C# 프로그래밍

C#은 더 많은 집중을필요로 하지. 사실 이건 아주 일반적인 에러네. C#에서는 문장이 세미콜

론으로 끝나야 한다는 것을 기억해야지. 괄호 다음에 세미콜론을 하나 넣어야겠네.

케이트가 웃었다. 그리고 세미콜론을 추가하고 성공적으로 컴파일했다. 문제를 겪은 다른 모두

가 문제를 해결했다. 대부분의 문제는 내가 언급한 것 또는 유사한 것들이었다. 이제 모두 컴파

일된 MSIL 파일을 가지게 되었고, 프로그램을 실행시켜 보길 열망했다. 다음 연습문제를 나눠

주었다.

연습문제 2- 3

Grad es .cs 실행시키기

이 연습에서는 연습문제 2-2에서 만든 Grades .exe 프로그램을 실행시킨다.

1. 도스 명령 프롬프트 프로그램을 띄운다.

2 . 명령 프롬프트에서 폴더를 Grades .cs 소스 파일을 포함한 폴더로 바꾼다.

3 . 명령 프롬프트에서 Grade s라고 입력하고 ENTER를 눌러서 프로그램을 실행시킨다.

명령 프롬프트 창에 다음 메시지가 나타날 것이다.

검토

앞의 연습문제에서는 일부 학생들이 풀이 죽었었는데, 이 연습문제는 완전히 반대였다. 모두의

프로그램이 단 한 번의 시도로 실행되었다.

9 2

Page 75: 초보 프로그래머를 위한 C# 프로그래밍 · 2009-12-02 · 초보 프로그래머를 위한 c# 프로그래밍 학생들은종종어디서부터시작해야하는지묻는다

C#에 익숙해지기 Chapter 2

많이 한 것은 없지만, 이제까지 한 것에 대해 아주 뿌듯합니다. 제 프로그래머 친구들이 C + +

는 아주 어렵다고 했는데, 이제까지는 그런 대로 할만합니다.

C#은 새로운 언어입니다. C+ +하고 이름이 비슷하다고 해서 난이도를 섣불리 판단하지 마세

요. C#을 배우는 것은 어렵기는 하지만, 여러분이 아는 것처럼 우리는 초보자들도 쉽게 배우고

있다는평판을듣고있습니다. 항상말한것처럼한번에한단계씩나아갑시다. 다음주에할수

업의 다음 단계는, 이 언어가 할 수 있는 것의 개요를 보여주는 코드를 살펴보는 것입니다.

모두 성적 계산 프로그램을 시작한, 정말 생산적인 수업이었다. 꽤 긴 수업이었다. 시계를 보니

이미 시간이 지나서 수업을 마쳤다.

요약

이 장에서는 C# 환경의 시시콜콜한 점들을 살펴보았다. C#으로 프로그램을 작성하는 것은 아

주 간단하다는 것을 알았다. 메모장 같은 에디터를 사용하여 C# 소스 파일을 만들고, C# 컴파

일러 csc를 이용하여 명령 프롬프트에서 프로그램을 컴파일하고, 같은 명령 프롬프트에서 프로

그램의 이름을 입력하여 실행시켰다.

다음 장에서는 순차 구조, 선택 구조, 루프 등 모든 컴퓨터 프로그램을 구성하는 기본 블록들에

대해 살펴본다.

19 3