관리 메뉴

새로운 시작, GuyV's lIfe sTyle.

닷넷 게시판 만들기 Part 5 - 첫 프로그램? 구구단! 본문

ⓟrogramming/asp.net 게시판

닷넷 게시판 만들기 Part 5 - 첫 프로그램? 구구단!

가이브 2010.12.16 17:06

2010/11/16 - [ⓟrogramming/.net] - 닷넷 게시판 만들기 Part 1
2010/11/18 - [ⓟrogramming/.net] - 닷넷 게시판 만들기 Part 2
2010/12/08 - [ⓟrogramming/.net] - 닷넷 게시판 만들기 Part 3
2010/12/16 - [ⓟrogramming/.net] - 닷넷 게시판 만들기 Part 4

1. 닷넷 개발환경 준비, 테스트
2. 닷넷 알아보기 [3/..]
3. 게시판 글쓰기
4. 게시판 글목록
5. 게시판 글읽기
6. 다듬기

(총 6개 챕터 중 챕터2를 못 벗어나는 이 강의는 뭘까요..?)

이전 시간에는, 웹 프로그래밍을 왜 하는지 알아보았다.
이번에는 진짜 구구단을 만들어보도록 하자.

만들기전에 고민할 부분이 있다. 어떻게 만들 것인가?
구구단을 잘 보면, 계산할 수가 앞에 있고(2~9) 그것을 각각 1~9까지 곱해준다.
2에서 9의 숫자는 총 8개이고, 그것을 각각 9번 곱해주니, 72개의 결과가 나올 것이다.
즉, 2~9를 각각 반복해서 1~9를 곱해준다. 그래서, 이 프로그램에서 필요한 함수(function)는 "반복문"이라는 녀석이다. 그리고, 우리가 지금 다루고 있는 문법은 C#이다.

여기를 클릭해서 구글에서 "C# 반복문"이라고 검색해보자. (아니면 책을 뒤져서 "반복문"이라는 파트를 읽어보도록 하자.)

검색결과에서 두번째 링크를 가보자. 닷넷을 만들어준 마이크로소프트의 공식 개발문서이다.
(http://msdn.microsoft.com/ko-kr/library/32dbftby(v=vs.80).aspx)



이렇듯, "반복문"이라는 기능을 가진 함수(쟤는 키워드라고 하네..)는 여러가지가 있다. 상황에 맞는 것을 사용하면 되고, 자기가 사용할 줄 아는 것을 쓰면 된다. 주로 for와 while, 그리고 foreach .. in .. 이 가장 많이 사용된다. 우리는 for() { } 를 이용하도록 한다.

#참고
프로그래밍의 실력은, 프로그래밍 언어에 함수가 어떤게 있는지 아는 것이 아주 중요하다.
그러므로 많이 접해보도록 노력하자. 다시 말하지만, 외울 생각말라. 10번 해보고 50번 해보면 자동으로 손에 익어 외워지게 된다. "존재성을 알고 있으며, 사용해 본 적이 있다면 끝."

for 함수는 반복을 하는데, 범위를 지정할 수 있다. 우리의 구구단은 정수형으로 2~9와 1~9, 이렇게 두 가지를 반복하게 된다. 먼저, 1~9를 반복하면서 실행하게 하는 문법을 알아보자.

for (반복할 값의 초기값; 조건; 반복된 후 실행할 구문)
{
      ..
}

왜 저렇게 문법이 나올 수 있느냐면, for 의 목적 자체가 "특정 값이 조건에 맞을 때 까지 반복하라"이기 때문이다. 그 범위를 자유롭게 줄 수 있기 때문에, for가 유용하다.

그러면, 1~9까지 반복시켜보자.

for (int i=1; i<=9; i=i+1)
{
     ..
}

1) 정수형 변수 i 는 for문이 처음 시작될 때, 1을 가진다. 
2) 조건을 비교해보고, 조건이 맞으면, 중괄호 안을 수행한다.
3) 중괄호 안의 수행이 끝나면, 변수 i에 i+1을 한 값을 다시 넣어준다.

즉, 뜯어보면, 1에서 시작해서, 2,3,4,5,...9 까지 괄호안의 문법을 실행하라는 말이다.
어떤가? 감이 오는가? 그렇다. 저기 i값이 구구단에서 반복으로 곱해질 녀석으로 사용할 수 있다는 것이다. 

i=i+1 과 같은 문법으로, i++ 이라고 사용할 수 있다. 역시 i=i-1은 i-- 라고도 할 수 있다.
++와 --가 앞에도 붙을 수 있다. 단항연산자라고 부른다는데, 존재 여부를 알면 되고, 사용할 줄 알면 된다. 외.우.지.말.자. 

뭐어??
퍼포먼스??? 퍼어포머어어언스으?? 어디서 초보한테 퍼포먼스를 요구해?? 건방지게 말이야~

 

default.aspx [1]

<%@ Page Language="C#" runat="server" %>
<script language="C#" runat="server">

void Page_Load()
{
   for (int i=1; i<=9; i++)
   {
       // "2 x i = ?"
       string output = "2 x " + i + " = " + 2*i;  
       Response.Write( output + "<br>" );
   }
}

</script>

(녹색의  "//" 으로 시작하는 것은 프로그램 실행에 영향이 없는 한줄 주석문이다. /* .. */ 으로 감싸면 여러줄을 주석문으로 만들 수 있다.)


구구단 2단을 for(;;) { } 반복문을 써서 출력하였다. 
Response.Write(); 화면에 그대로 뿌려주라는 뜻이 된다.

실행 결과를 보자. 2단이 잘 나왔는가?


여기서 앞의 Part 에서 했던것 처럼 소스보기를 해보자. 결과물은 결과물일 뿐이다.
3단, 4단 .... 9단까지 모두 2단처럼 똑같이 만들자. 총 9개의 for() 문이 필요하며, for의 i값만 3,4,5,6... 9 이렇게 바꾸어 준다면 구구단 프로그램이 아주 잘 작동할 것이다. =)

자.. 이것이 그 유명한, 여러분이 숱하게 현역 프로그래머들에게 들었을 "카피 엔 페이스트", "복사붙여넣기, "컨트롤씨~컨트롤브이"라는 노가다 작업이다.

물론, 꼭 여기에 비교하면 좀 억지이긴 하지만, 프로그래밍은 프로그래머들이 만들기 나름이다. 닷넷,자바 등의 언어를 만든 사람들이 내어놓은 문법을 어떻게 요리하고 조리하는지는 바로 우리들의 몫인 것이다. 그게 모자른 사람들이 "복사~붙여넣기"작업에 이른바 "노가다"라며 징징거리신다.

여튼.. 다시 돌아가서;;

   for (int i=1; i<=9; i++)
   {
       // "2 x i = ?"
       string output = "2 x " + i + " = " + 2*i;  
       Response.Write( output + "<br>" );
   }

반복되는 내용을 보도록 하자.
여기서도, 여타 초보들을 위한 강의/서적에서는 아주 볼품 없이 넘어가는, 필자가 생각할 때는초보가 알면 진짜 나중에 정신 건강에 좋은 부분이 있다.

for 문에서 봤듯이, 정수형은 다음과 같이 선언한다.

int 변수명=값;

string 은 문자열이다. 문자열이라서,

string X = "하하하";

X에 "하하하"라는 문자열 상수(상수:변하지 않는 값)를 넣어서 초기화 하라는 말이다. 큰 따옴표로 감싸준다. 그럼 이제부터 X는 무조건 string 형식이고, "하하하"를 담고 있다. 이 녀석의 값을 바꿀때는,

X = "호호호";

이렇게 상수를 다시 넣어줘서 사용한다.

X = 1;

이렇게 string 인 X 를 int 로 구겨넣으면 "정수형을 문자열로 변환할 수 없다"라며 노란화면 오류가 발생한다. 1이라는 정수형 상수를 문자열인 X에 넣으려고 했으니, 들어갈리가 없다. 그러나..

X = 1.ToString();

이렇게 좀 더 구겨줘야 들어가게 된다.

.ToString();

앞의 파트에서 공부하신 분들은 잘 아는 문법이다. 바로 "메소드(method)"라는 녀석인데, 닷넷은 한놈 한놈 모두가 다 지정된 "클래스"형식을 가지고 있다. 숫자 1은 System.Int16 이라는 클래스이다. System 은?? 그렇다. 네임스페이스라고 알고 있다. 

System 이라는 네임스페이스는 따로 지정하지 않아도 사용가능하다.

숫자형 상수(1, 392, 381893, 399912488 등등)는 상수의 값이 어떤 범위인지에 따라,

System.Int16
System.Int32
System.Int64

이렇게 3가지의 클래스 형식을 자동으로 가지게 된다. 그렇게만 알고 있자.
Int16, Int32, Int64 는 모두 같은 형식이라고 보면 된다.

1.ToString();

이 문법은,

Int16.ToString();

이렇게 보면 된다.
메소드 이름으로 생각할 수 있듯이, "문자열로 바꿔라"라는 말이 되겠다.

그렇다면,

int X = 392;                        // <---- System.Int16 형식
string STR = X.ToString();

이렇게 가능하다는 말이다.



#참고
닷넷에서, 문자형식 자료형 지정은 String도 되고, string도 된다(대소문자에 주목). 그저 쓰기 편하게, 자주 사용하기에, string으로 사용해라고 만들어 준 것이다. 단지, int 는 Int 가 아니다. 수치를 표현하는 자료형은 문자형식과는 조금 다르게, 범위가 좁은 녀석과 넓은 녀석이 따로 존재한다. "메모리"라는 녀석을 물처처럼 아껴쓰라는 의미라고 보면 된다. 우리 초보들은 절대 퍼포먼스 따위는 개나 주고, 지금은 생각하지말자. 머리아프다. 언젠가는 복잡해서 넘어간 것들을 알아야 할 때가 온다. 그 때 다시보면 아주 쉽게 웃음을 띄며 고개를 끄덕일 것이다.



다시, 돌아가서.

string A = "홍길동은...";
string B = "착하다";
string C = "못됐다";
string RESULT;

RESULT = A+B;
RESULT = A+C;

이렇게, 문자열은 문자열과 결합할 수 있다.

그러므로~

   for (int i=1; i<=9; i++)
   {
       string output = "2 x " + i + " = " + 2*i;  
       Response.Write( output + "<br>" );
   }

문자열 output 이라는 곳에 (좀 헷갈려 보이지만)

"2 X "         : string 상수
i                : int 변수
" = "           : string 상수
2*i             : 2*i 의 결과값(정수형)

이렇게 4개가 "+" 로 연결되어 있음을 알 수 있다. string 형과 int(정수)형이 "+"로 만나면 자동으로 string 형으로 통합된다.

string X = 1+2;                        // 오류 (정수형을 문자열변수 X로 넣을 수 없다)
string X = 1+2.ToString();     // X="12" --> 1 + "2" 와 같다.
string X = (1+2).ToString();
     // X="3" --> 1+2의 결과인 3을 ToString() 했다.

string Y = "1" + 2;
         // Y= "12";
string Z = "1+" + 2;        // Z="1+2";

문자열 결합은 자주 사용되니 헷갈리지말게 사용하자.
위에서 2,3 라인을 보면, 연산 우선순위에 의해 결과가 달라지는 것도 있다.
많이 연습하자. 예제처럼 뭐든지 넣어봐서 내가 담고 싶은 값을 제대로 담아보는 것을 수 없이 오류를 뿜어내며 연습하도록 하자.

string X = (1+2).ToString();     
          
string X = "3";

물론, 이렇게 문자열 결합을 보기 좋게 할 수 있는 메소드가 따로 존재한다. String.Format() 이라는 녀석인데, 아직 우리는 메소드에 대해 잘 모르기 때문에 그냥 넘어가도록 한다.



다음에 계속..

0 Comments
댓글쓰기 폼