Visual Basic 2010 6. 함수
학습목표 함수 프로시저, 서브 프로시저의 의미를 안다. 매개변수 전달 방식을 학습한다. 함수를 이용한 프로그래밍한다. Visual Basic 2010
6.1 함수 프로시저 6.2 서브 프로시저 6.3 매개변수의 전달방식 6.4 함수를 이용한 프로그래밍 Visual Basic 2010
프로시저(Procedure) 프로시저(Procedure)란 무엇인가? 논리적으로 묶여 있는 하나의 처리 단위 내장 프로시저 이벤트 프로시저, 속성 프로시저, 메서드, 비주얼 베이직 내장함수 등 개발자들을 위해 공통적으로 많이 사용되는 기능들을 사전에 만들어 놓은 프로시저 모든 개발자들이 공유할 수 있다. sin() 함수는 모든 개발자가 새로 만들 필요가 없는 내장 프로시저 이다. => 개발 시간 단축 사용자 정의 프로시저 비주얼 베이직에서 제공하는 기본적인 내장 프로시저 이외의 사용자의 필요에 의해 만들어진 프로시저 리턴값(return value)의 유무에 따라 구분 서브 프로시저(Sub Procedure) 함수 프로시저(Function Procedure) Visual Basic 2010
함수 프로시저 함수 프로시저(Function Procedure) 리턴값을 가지는 프로시저 형식 Function procedureName (매개변수 리스트) As 반환형 … statement(s) ‘처리 코드 Return expression ‘반환할 식 ‘ procedureName = 반환할 값 (둘다 가능) End Sub Visual Basic 2010
예제6-1 1부터 10까지의 합을 함수 이용하여 작성 Visual Basic 2010
예제6-1 컨트롤 속성 설정 컨트롤 이름 속성 설정 Form Text 함수 이용 Label Label1 1부터 10까지의 합 TextBox TxtResult Button btnSum 서브 덧셈 Visual Basic 2010
예제6-1 코드 작성 Function subSum(ByVal n As Integer) As Integer Dim sum As Integer = 0 For i As Integer = 0 To n sum = sum + i Next i Return sum End Function Private Sub Button1_Click(...) Handles Button1.Click Dim input=10, reSum As Integer reSum = subSum(input) txtResult.Text = CStr(reSum) End Sub Visual Basic 2010
예제6-2 입력받은 숫자까지의 합을 함수 이용하여 작성 Visual Basic 2010
예제6-2 컨트롤 속성 설정 컨트롤 이름 속성 설정 Form Text 함수를 이용한 합 구하기 Label 숫자입력 결과 값 TextBox txtInput TabIndex 1 txtResult Button btnSum 2 Visual Basic 2010
예제6-2 코드 작성 Function subSum(ByVal n As Integer) As Integer Dim sum As Integer = 0 For i As Integer = 0 To n sum = sum + i Next i Return sum End Function Private Sub Button1_Click(...) Handles Button1.Click Dim input, reSum As Integer input = CInt(txtInput.Text) reSum = subSum(input) txtResult.Text = CStr(reSum) End Sub Visual Basic 2010
예제6-3 함수를 이용하여 입력받은 수의 홀수, 짝수 판단 Visual Basic 2010
예제6-3 컨트롤 속성 설정 컨트롤 이름 속성 설정 Form Text 함수 이용 Label 수 입력 lblResult 입력한 수의 짝홀수 판단 TextBox txtInput TabIndex 1 Button BtnCheck 2 짝, 홀수 알아보기 Visual Basic 2010
예제6-3 코드 작성 Function IsEven(ByVal su As Integer) As Integer If su Mod 2 = 0 Then IsEven = True Else IsEven = False End If End Function Private Sub btnCheck_Click(...) Handles btnCheck.Click Dim input As Integer Dim result As Boolean input = CInt(txtInput.Text) result = IsEven(input) If result = True Then lblResult.Text = "입력한 수는 짝수 입니다." Else lblResult.Text = "입력한 수는 홀수 입니다.“ End If End Sub Visual Basic 2010
6.1 함수 프로시저 6.2 서브 프로시저 6.3 매개변수의 전달방식 6.4 함수를 이용한 프로그래밍 Visual Basic 2010
서브 프로시저 서브 프로시저(Sub Procedure) 리턴값이 없이 주어진 코드만을 실행하는 프로시저 형식 Sub procedureName (매개변수 리스트) … statement(s) ‘처리 코드 End Sub Visual Basic 2010
예제6-4 숫자를 입력받아서 숫자만큼 “*”를 텍스트박스에 출력하는 프로그램을 함수 이용하여 작성 Visual Basic 2010
예제6-4 컨트롤 속성 설정 컨트롤 이름 속성 설정 Form Text 서브 프로시저 Label 숫자입력 TextBox txtInput TabIndex 1 txtResult Multiline Both ScrollBars 2 Button 별 찍기 Visual Basic 2010
예제6-4 코드 작성 Sub subPrint(ByVal input As Integer) For i = 1 To input txtResult.Text = txtResult.Text + "*" Next i txtResult.Text = txtResult.Text + vbCrLf End Sub Private Sub Button1_Click(...) Handles Button1.Click Dim input As Integer input = CInt(txtInput.Text) subPrint(input) Visual Basic 2010
6.1 함수 프로시저 6.2 서브 프로시저 6.3 매개변수의 전달방식 6.4 함수를 이용한 프로그래밍 Visual Basic 2010
값에 의한 호출(By Value) 데이터의 주소 값이 아닌 실제 값을 넘기는 방식 원본 데이터의 값이 복사되어 넘어 간다. 복사본을 아무리 수정해도 원본은 바뀌지 않는 것이 특징 “ByVal” 키워드 사용 Public Sub procedureName(ByVal a As Integer) : 처리코드 End Sub 따라하며 배우는 Visual Basic Programming
예제6-5 폼 디자인 값에 의한 호출 Visual Basic 2010
예제6-5 코드 작성 Private Sub btnSum_Click(...) Handles btnSum.Click Dim a, b As Integer GetNums(a, b) AddSum(a, b) End Sub Sub GetNums(ByVal num1 As Integer, ByVal num2 As Integer) num1 = CInt(txtNum1.Text) num2 = CInt(txtNum2.Text) Sub AddSum(ByVal num1 As Integer, ByVal num2 As Integer) Dim sum As Integer sum = num1 + num2 txtResult.Text = "hap of " & num1 & " and " & num2 & " is " & sum Visual Basic 2010
참조에 의한 호출(By Reference) 호출하는 측에서 프로시저에게 데이터를 넘겨줄 때, 데이터의 주소를 넘기는 방식 매개변수 앞에 “ByRef” 키워드를 적어 주어야 함 비주얼 베이직에서 기본적으로 참조에 의한 호출을 이용 “ByRef”는 생략할 수 있음. Public Function procedureName(ByRef a As Integer) : 처리코드 End Sub 따라하며 배우는 Visual Basic Programming
예제6-6 폼 디자인 참조에 의한 호출 Visual Basic 2010
예제6-6 코드 작성 Private Sub btnSum_Click(...) Handles btnSum.Click Dim a, b As Integer GetNums(a, b) AddSum(a, b) End Sub Sub GetNums(ByRef num1 As Integer, ByRef num2 As Integer) num1 = CInt(txtNum1.Text) num2 = CInt(txtNum2.Text) Sub AddSum(ByVal num1 As Integer, ByVal num2 As Integer) Dim sum As Integer sum = num1 + num2 txtResult.Text = "hap of " & num1 & " and " & num2 & " is " & sum Visual Basic 2010
예제6-7 폼 디자인 참조에 의한 호출 그림 6.13: 실행 화면 그림 6.14: 원본 데이터의 값으로 10 입력 후 “변경 유무” 버튼 클릭시 결과 화면 Visual Basic 2010
예제6-7 컨트롤 속성 설정 컨트롤 이름 속성 설정 Form Text 참조에 의한 호출 Label 원본 데이터의 값은: 변경후의 원본 데이터의 값은: TextBox txtBefore TabIndex 1 txtAfter Button btnCheck 2 변경 유무 Visual Basic 2010
예제6-7 코드 작성 Dim k As Integer Sub MySubTest(ByRef a As Integer) a = 0 End Sub Private Sub btnCheck_Click(…) Handles btnCheck.Click k = CInt(txtBefore.Text) Call MySubTest(k) txtAfter.Text = CStr(k) Visual Basic 2010
예제6-8 폼 디자인 값에 의한 호출 그림 6.16: 실행 화면 그림 6.17: 원본 데이터의 값으로 10 입력 후 “변경 유무” 버튼 클릭시 결과 화면 Visual Basic 2010
예제6-8 컨트롤 속성 설정 컨트롤 이름 속성 설정 Form Text 값에 의한 호출 Label 원본 데이터의 값은: 변경후의 원본 데이터의 값은: TextBox txtBefore TabIndex 1 txtAfter Button btnCheck 2 변경 유무 Visual Basic 2010
예제6-8 코드 작성 Dim k As Integer Sub MySubTest(ByVal a As Integer) a = 0 End Sub Private Sub btnCheck_Click(…) Handles btnCheck.Click k = CInt(txtBefore.Text) Call MySubTest(k) txtAfter.Text = CStr(k) Visual Basic 2010
6.1 함수 프로시저 6.2 서브 프로시저 6.3 매개변수의 전달방식 6.4 함수를 이용한 프로그래밍 Visual Basic 2010
예제6-9 폼 디자인 키를 입력하면 표준 몸무게를 출력해 주는 프로그램을 함수 이용하여 작성 Visual Basic 2010
예제6-9 컨트롤 속성 설정 컨트롤 이름 속성 설정 Form Text 표준 몸무게 알아보기 Label 키(Cm) : 당신의 표준 몸무게는 lblResult 표준 Kg입니다. TextBox TabIndex 1 Button btnResult 2 내 표준 몸무게는 어떻게 되나요? Visual Basic 2010
예제6-9 코드 작성 '표준체중(Kg)= (신장(cm)-100) * 0.9 Function GetStandardWeight(ByVal Height As Double) As Double Dim stdWeight2 As Double stdWeight2 = (Height - 100) * 0.9 GetStandardWeight = stdWeight2 End Function Private Sub btnResult_Click(…) Handles btnResult.Click Dim myHeight, stdWeight As Double myHeight = CDbl(txtHeight.Text) stdWeight = GetStandardWeight(myHeight) lblResult.Text = CStr(stdWeight) End Sub Visual Basic 2010