0
 35   4   1
  View Articles

Name  
   손병목  (2002-02-10 11:35:11, Hit : 13963, Vote : 1050)
Homepage  
   http://www.itmembers.net
Subject  
   예제로 익히는 비베 기초(6)-함수
오늘은 지난 강좌에서 만들었던 프로그램을 '함수' 개념을 도입해서 재구성해보는 실습을 합니다.

함수? y=2x*3x??? 갑자기 왠 함수냐구요?
프로그래밍에서 함수라고 하는 것은 매우 광범위하게 사용되고 있습니다. 우리는 이미 몇 가지 함수를 사용했습니다.
예를 들어 그래픽 뷰어를 만들 때 LoadPicture 함수를 사용하여 그림 이미지를 불러왔었죠(기억이 안난다구요? ^^). 간단한 시계 프로그램을 만들 때도 Format이라는 함수를 사용해서 날짜와 시간 형식을 지정했던 적이 있었습니다.
꼭 공부 못하는 사람이 배워놓고도 끝까지 안배웠었다고 발뺌하죠. 그럴까봐 그 때 사용했던 코드를 직접 보여드리겠습니다.

[시계 프로그램에서]
lblResult.Caption = Format(Now, "yyyy년 mm월 dd일 AM/PM hh시 mm분 ss초")
시계 프로그램에서는 전체 코드가 위의 단 한줄이었는데...
[그래픽뷰어 프로그램에서]
Image1.Picture = LoadPicture("c:\vb실습\워드.gif")
기억나시죠?

위의 코드에서 제가 진하게 표시한 것이 바로 비주얼베이직에서 제공하는 내장 함수입니다. 내장이 무슨 뜻인지 아시죠? 사용자가 편리하게 사용하도록 기본적으로 제공하고 있는 함수입니다. 우리는 그것을 마치 명령어처럼 사용하죠. 그냥 사용법만 알고 있으면 됩니다. 구체적으로 어떤 코드로 만들어졌는지는 알 필요가 없죠. 그냥 LoadPicture를 사용해서 괄호 안에 이미지 파일의 위치만 적어주면 비베에서는 그 그림을 불러들입니다. Format이라고 써놓구선 괄호 안에 표시할 내용(위의 예에서는 현재 시간 Now)과 형식(위의 예에서는  yyyy mm dd 등으로 표시된 것)을 순서대로 적어주면 됩니다. 이렇게 비베에서 기본적으로 제공하고 있는 내장 함수는 매우 많습니다. 그것을 100% 다 활용하는 프로그래머는 아마도 없을 것입니다.

오늘 우리가 짚고 넘어가야할 내용은 내장 함수가 아니라 '사용자 정의 함수'. 쉬운 말로 내가 직접 함수를 만들어 보는 것입니다. 커~억~ 내가 감히 어떻게???
쉽습니다. 지금까지 그랬듯이 그리 걱정할 것은 없습니다. 매우 간단한 예를 들어 설명드리겠습니다. 지난 시간에 만든 구구단2 프로그램 소스를 조금만 바꾸면 됩니다.(그럴려면 지난 시간의 실습 내용을 충분히 숙지하고 있어야겠죠....)

여기서 잠깐! 용어 정리부터 합시다. 위의 예에서 Format, LoadPicture를 함수명 또는 함수이름이라고 합니다. 그리고 괄호 안의 내용을 매개 변수라고 합니다. 무언가를 이어주는(매개) 변수라는 뜻입니다. 다시 말해, 함수를 사용할 때는 매개 변수 없이 그냥 함수 이름만 부르면 실행되는 경우도 있고, 함수를 부를 때 어떤 값(매개 변수)를 넘겨 주고 그 값을 처리하여 되돌려 주도록 만들 수도 있다는 것입니다. 위에서는 두개의 함수가 모두 매개 변수를 사용했는데 예를 들어 LoadPicture 함수를 부를 때 매개 변수로 c:\vb실습\워드.gif 값을 넘겨줬습니다. (이해 되시죠?)

오늘 우리가 실습할 내용은 지난 시간에 만들었던 구구단 프로그램을 함수를 이용해 다시 만들어 보는 것입니다.
먼저 이론부터 다 설명하고 따라하기 식으로 실습하기로 하겠습니다.

지난 시간에 실습했던 구구단을 출력하는 코드의 핵심은 다음과 같습니다.

For intTemp = 1 To 9
        intGuguResult = InputResult * intTemp
        strGugu = CStr(InputResult) & " * " & CStr(intTemp) & " = " & CStr(intGuguResult) & Chr$(10) & Chr$(13)
        lblGuguResult.Caption = lblGuguResult.Caption + strGugu
    Next

위 코드를 별도의 함수로 만들자는 것이 오늘 실습의 핵심입니다.
예를 들어 구구단을 출력하기 위해 위의 코드를 매번 복사해서 쓰지 말고, 미리 함수로 만들어 뒀다가 구구단을 출력할 필요가 있을 때
GuguCal 3 이라고 하면 3단이 출력되고
GuguCal intTemp라고 하면 intTemp라는 변수에 해당하는 구구단을 출력하도록 만들자는 뜻입니다.

또 여기서 잠깐! 위의 예에서 왜 함수 이름(GuguCal) 뒤에 매개 변수를 쓸 때 괄호를 사용하지 않았는가? 이건 좀 복잡한 얘깁니다만, 함수가 리턴값이 있으면 매개 변수를 괄호 안에 써 넣고, 그렇지 않을 경우에는 그냥 괄호 없이 사용합니다. 이 부분은 오늘 말씀드릴 범위를 벗어나기 때문에 이 정도로만 하고, 다음에 함수에 대해 조금 더 자세하게 다룰 때 예제를 통해 비교해보기로 하죠. 이상.?

오늘 다룰 실습의 코드를 먼저 공개하겠습니다. 프로그램 겉모양은 지난번 실습 내용과 동일합니다.



위의 그림과 비교해 보면서 보세요.
먼저 [구구단 출력] 단추를 눌렀을 때의 실행할 문장입니다.

①Private Sub cmdGuguGet_Click()
②Dim InputResult As String
③InputResult = InputBox("몇 단을 출력할까요?", "입력 요구 창", "3")
GuguCal CInt(InputResult)
⑤End Sub

  • ①,⑤는 자동으로 생성된 내용이죠? 그런데 자세히 살펴보면 이것도 결국은 함수라는 것을 알수 있습니다. 즉 [구구단 출력]이라는 버튼(cmdGuguGet)을 클릭했을 때 실행하는 함수라는 것입니다. 우리는 결국 지금까지 계속해서 사용자 정의 함수를 만들어 온 것이나 마찬가지입니다.
  • ②는 변수를 선언하는 부분이죠. 지난 시간에 다 했던 내용이니까 설명은 생략하고...(InputBox에서 입력받은 값을 저장하기 위한 문자열 변수 InputResult를 선언한 것입니다.)
  • ③에 대해서도 지난 시간에 다 다뤘으니 설명을 생략합니다.
  • ④ 부분을 왜 굵게 표시했느냐... 바로 이 부분이 오늘 다룰 핵심이기 때문입니다.
    GuguCal CInt(InputResult)
    여기서 GuguCal은 함수명, Cint(InputResult)가 매개 변수입니다.
    그런데 매개 변수가 좀 복잡하네요. Cint는 변수형을 정수형으로 바꿔주는 역할을 하는 함수입니다. 따라서 CInt(InputResult)를 풀이하자면 InputBox에서 입력받은 값인 InputResult를 정수형으로 바꾼 값이라고 할 수 있죠.
    그러니까 GuguCal 함수는 InputResult 값을 매개 변수로 사용한다는 뜻입니다. 그리고 GuguCal 함수는 우리가 직접 만들어야 할 함수입니다. ← 이 부분 이해될 때까지 계속 반복...


그 다음 우리가 실습할 코드입니다.

Private Sub GuguCal(value1 As Integer)
②Dim strGugu As String
②Dim intTemp As Integer
②Dim intGuguResult As Integer
③lblGuguResult.Caption = ""
④For intTemp = 1 To 9
④intGuguResult = value1 * intTemp
④strGugu = CStr(value1) & " * " & CStr(intTemp) & " = " & CStr(intGuguResult) & Chr$(10) & Chr$(13)
⑤lblGuguResult.Caption = lblGuguResult.Caption + strGugu
⑥Next
⑦End Sub

좀 복잡하게 보이지만 지난 시간에 거의 다룬 내용이기 때문에 오늘은 그 차이점만 설명하도록 하겠습니다.
위의 코드는 ④GuguCal CInt(InputResult)라고 GuguCal 함수를 호출했을 때 실행할 GuguCal 함수를 정의한 것입니다.
  • Private Sub GuguCal(value1 As Integer)
    여기서 Private는 제한자라고 하는데 그냥 Publc, Private, Friend 등 세 종류가 있다는 것만 짚고 넘어가겠습니다. 이 함수가 현재의 모듈(폼)에서만 사용할 수 있다는 뜻입니다.(Public은 모든 폼에서 다 사용할 수 있습니다...)
    함수는 Sub로 시작합니다. Function으로 시작하는 함수도 있는데 나중에 설명하겠습니다. GuguCal은 함수 이름입니다.
    괄호 안의 value1 As Integer는 매개 변수입니다. valule1이라는 매개 변수가 정수형 변수라는 뜻입니다. 이 부분은 매우 중요합니다. GuguCal이라는 함수를 사용할 때 매개 변수는 반드시 정수형을 사용해야 한다는 뜻입니다.
    그래서 아까 이 함수를 호출할 때 GuguCal CInt(InputResult)라고 했습니다. 원래 InputResult 변수가 문자열 변수이니까 이것을 정수형으로 바꾼 다음에 그 값을 GuguCal 함수로 넘겨주라는 뜻이었죠. 이렇게 넘겨받은 매개변수는 그 아래 ④번 코드에서 사용됩니다.
  • ②와 ③은 지난 시간과 동일하니까 설명은 생략하고
  • ④를 자세히 보세요. 그리고 지난 시간에 실습했던 코드와 비교해 보세요.
    자세히 보면 알겠지만 하나의 변수를 제외하고 동일합니다. 지난 시간에 실습했던 코드에서 InputResult라는 변수를 value1으로 바꾼 것밖에는 없습니다.
    지난 시간에는 InputBox를 통해 입력받은 값(InputResult)을 바로 사용했지만 이번 시간에는 이 변수 대신 value1이라는 새로운 변수를 사용한 것 밖에는 없죠. 이 value1이라는 변수는 GuguCal 함수를 실행할 때 넘겨받은 값으로 실제로는 InputResult 값과 같습니다. 즉 InputBox를 통해 입력받은 값을 InputResult라는 변수에 저장(③InputResult = InputBox("몇 단을 출력할까요?", "입력 요구 창", "3"))했다가 이 값을 다시 GuguCal이라는 함수를 부르면서 넘겨 준 것(GuguCal CInt(InputResult))입니다.


설명하려니까 더 복잡하네요. 지난 시간의 실습 내용만 터득하고 있다면 사실 오늘 실습 내용은 쉽게 이해가 될 것입니다.



오늘 내용이 길어져서 따라하기 실습은 다음 강좌에서 다루기로 하겠습니다.

끝까지 읽고도 으아악~ 하시는 분이 있다면 어제 실습 내용부터 다시 반복해서 읽어보세요. 분명히 이해가 될 것입니다.

다음 강좌에서 다룰 실습 내용 소스입니다. 다음 강좌에서는 그냥 이 소스를 만드는 순서만 따라할 것일 뿐 소스와 관련한 내용은 오늘 다 다룬 것입니다.


오늘도 행복한 하루 되세요...

이상 동주아빠 손병목이었습니다.

Prev
   예제로 익히는 비베 기초(7)-함수

손병목
Next
   예제로 익히는 비베 기초(5)-구구단2

손병목


Copyright 1999-2021 Zeroboard / skin by Zetyx