Presentation is loading. Please wait.

Presentation is loading. Please wait.

4 장 데이터 구조와 프로시저 4.1 데이터 구조 4.2 프로시저 2018-11-16.

Similar presentations


Presentation on theme: "4 장 데이터 구조와 프로시저 4.1 데이터 구조 4.2 프로시저 2018-11-16."— Presentation transcript:

1 4 장 데이터 구조와 프로시저 4.1 데이터 구조 4.2 프로시저

2 데이터 구조와 프로시저 4.1 데이터 구조 데이터 구조 : 프로그램에서 사용하는 값을 저장하는 기억장소의 구조 (1) 상수
상수(Constant) : 고정된 값을 저장하는 데 사용 배열(Array) : 같은 데이터의 형식을 가지는 리스트를 저장하기 위해 사용 구조체(Structure), 제너릭(Generic), 콜렉션(Collection), 열거형(Enumeration) (1) 상수 프로그램 생명주기 동안에 저장되어 있는 값이 바뀌지 않는 변수 예를 들어 원주율 PI = 는 고정된 값 상수의 선언 방법 모듈, 클래스, 구조체, 프로시저, 블록 레벨에 선언 [접근지정자] Const 상수명 [As 데이터형식] = 수식 Const PI = ‘접근지정자 생략시 Public Const conVar As Integer = 459 Public Const conString As String = "VISUALBASIC" Private Const conInt As Integer = 5

3 데이터 구조와 프로시저 4.1 데이터 구조 (2) 문자열
문자열을 나타내는 데이터 형식은 String으로 String 형식은 참조 형 식이며, 이중 따옴표(“)를 사용하여 문자열을 대입한다. String 데이터 형식은 문자열을 나타내는 System.Char 객체의 순차적인 컬렉션이다. String 변수에 문자열을 저장하는 방법 Dim 변수명 As String Dim strData As String = "문자열“ Dim strSample As String strSample = "스트링 문자열“

4 데이터 구조와 프로시저 4.1 데이터 구조 문자열 속성
문자열은 일련의 Char 값으로 간주할 수 있으며, String 형식에는 배 열에서 허용하는 조작과 비슷한 조작을 수행할 수 있는 기본 제공 함수를 포함하고 있다. 속성 내용 Chars 문자열에서 특정 문자를 참조할 수 있으며, 해당 숫자의 순서에 있는 문자 값을 반환한다. 반환 값은 Char형이며, 0부터 시작하는 배열이다. Length 문자열의 길이를 반환한다. 반환 값은 Integer형이다. ToCharArray 문자열에서 배열 형식으로 문자 하나씩을 조작할 경우에 사용하며, 문자열의 문자를 배열형식으로 변수에 저장하여 해당 문자 값을 반환한다. 반환 값은 Char형이며, 0부터 시작하는 배열이다.

5 데이터 구조와 프로시저 4.1 데이터 구조 문자열 속성을 이용하여 값을 구하는 예 문자열 제어
Dim strString As String = "SAMPLEDATA" Dim chrChar As Char Dim strLength As Integer chrChar = strString.Chars(4) 'Chars(4)는 변수에 5번째 값을 추출하며, 저장 값은 L strLength = strString.Length '저장값(결과값)은 10 Dim strArray As Char() = strString.ToCharArray 'strArray(2)의 값은 M, strArray(0)의 값은 S 문자열 제어 String 문자열은 여러 가지 메소드를 사용하여 문자열을 제어 메소드 내용 Compare 두 개의 문자열을 비교하여 같을 경우에는 ‘0’을 반환하고, 처음 문자열이 클 경우에는 ‘-1’ 작을 경우에는 ‘1’을 반환한다. Concat 문자열이나 문자열 배열을 연결해서 하나의 String 문자열을 반환한다. Replace 특정 문자열을 빈 문자열로 대체한다. Contain 문자열이 지정된 하위 문자열을 포함하는지의 여부를 나타낸다. IndexOf 해당 문자열이 처음 나타나는 곳을 찾아 첫 번째 문장의 위치를 반환한다. Mid 문자열에서 지정한 수의 문자를 포함하는 문자열을 반환한다. Split 지정된 수의 부분 문자열을 포함하는 0부터 시작하는 1차원 배열을 반환한다.

6 데이터 구조와 프로시저 4.1 데이터 구조 문자열 메소드를 이용하여 값을 구하는 예
Dim strString As String = "SAMPLEDATA" Dim strSearch As String = “DATA” Dim sptString As String = “SAMPLE DATA” ‘newString 결과값 SAMPLE Dim newString As String = Replace(strString, “DATA”, “”) ‘indexNum 결과값 6 Dim indexNum As integer = strString.indexOf(strSearch) ‘searchWord 결과값 SAMPLE Dim searchWord As string = Mid(strString, 1, 6) ‘testArray 결과값 SAMPLE DATA Dim testArray() As String = sptString.Split(“ “)

7 예제 프로그램 : 문자열 제어 예제 프로그램(문자열제어)
데이터 구조와 프로시저 예제 프로그램 : 문자열 제어 예제 프로그램(문자열제어) 문자열 속성과 메소드를 사용하여 결과 값을 출력하는 프로그램 작성 1. 폼을 설계한다.

8 데이터 구조와 프로시저 2. 객체(폼, 컨트롤)의 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1
Text : 문자열 제어 예제 레이블 Label1 Text : 1차원 배열 Font : 크기 12 리스트박스 ListBox1 (Name) : lstResult 명령 버튼 Button1 (Name) : btnRun Text : 실행 Button2 (Name) : btnExit Text : 종료

9 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다. Public Class Form1
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click Me.Close() End Sub Private Sub btnRun_Click(sender As Object, e As EventArgs) Handles btnRun.Click Dim strString As String = "SAMPLEDATA" Dim chrChar As Char Dim strLength As Integer chrChar = strString.Chars(4) 'Chars(4)는 변수에 5번째 값을 추출하며, 저장 값은 L strLength = strString.Length '저장값(결과값)은 10 Dim strArray As Char() = strString.ToCharArray 'strArray(2)의 값은 M, strArray(0)의 값은 S lstResult.Items.Add(chrChar) '리스트 박스에 결과값 출력 lstResult.Items.Add(strLength) Dim strName As String For Each strName In strArray lstResult.Items.Add(strName) Next

10 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다.
Dim strData As String = "SAMPLEDATA" Dim strSearch As String = "DATA" Dim sptString As String = "SAMPLE DATA" Dim newString As String = Replace(strData, "DATA", "") 'newString 결과값 SAMPLE Dim indexNum As Integer = strData.IndexOf(strSearch) 'indexNum 결과값 6 Dim searchWord As String = Mid(strData, 1, 6) 'searchWord 결과값 SAMPLE Dim testArray() As String = sptString.Split(" ") 'testArray 결과값 SAMPLE DATA lstResult.Items.Add(newString) '리스트 박스에 결과값 출력 lstResult.Items.Add(indexNum) Dim strWord As String For Each strWord In searchWord lstResult.Items.Add(strWord) Next Dim strTest As String For Each strTest In testArray lstResult.Items.Add(strTest) End Sub End Class

11 데이터 구조와 프로시저 4. 프로그램을 실행한다. 5. 프로젝트를 저장한다.
메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “문자열제어”로, 위치를 “C:\VB예제 \chapter04”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다.

12 데이터 구조와 프로시저 4.1 데이터 구조 (3) 배열 같은 데이터 형식을 가지는 여러 개의 변수들을 만들 때 사용한다.
같은 변수 이름과 동일한 자료형을 갖는 연속된 기억장소를 통일된 이름으로 정의하고, 첨자를 사용한다. Dim  cob, del, asm, pbl, db, ds As Integer   '6개의 정수 변수 선언   → cob    del    asm    pbl    db    ds             □       □     □      □     □     □   (기억장소에 저장) Dim jum(5) As Integer            '배열로서 6개의 변수 표현                     데이터형식 선언 첨자의 갯수(배열의 크기)                   배열 이름 jum[0]  jum[1]  jum[2]  jum[3]  jum[4]  jum[5]               (기억장소에 연속저장)

13 데이터 구조와 프로시저 4.1 데이터 구조 배열의 크기는 차원의 수와 차원의 길이로 나타낸다. 선형구조와 같은 배열을 1차원 배열이라 하고, 열과 행을 가지는 2차원 배열이나 2차원을 여러 장 겹치진 형태의 3차원 배열 등이 있다. Visual Basic.Net의 배열 형태는 컴파일 할 때에 기억장소를 할당하는 정적배열(고정크기 배열)과 프로그램을 실행할 때 기억장소를 할당하는 동적 배열이 있다. 1) 차원 배열 1차원 배열은 배열을 표시하는 첨자가 하나인 배열을 말한다. 사용 예 Dim 배열명(첨자) [ As 데이터형식] Dim NameArray(4) As String

14 데이터 구조와 프로시저 4.1 데이터 구조 예를 들어, Dim A(10) As Integer로 배열을 선언하면, 실제로는 11개의 변수가 선언된 것이다. 첨자 10은 0부터 10까지 11개의 저장 장소를 의미한다. 이 상태에서 11개의 저장 장소를 각각 사용하고자 하는 경우 배열명 A에 괄호와 0부터 10사이의 숫자를 써서 사용한다. 즉 A(0), A(1), A(2), A(3), ... ,A(9), A(10)과 같이 사용한다. A는 배열의 이름이고, (10)은 배열의 크기이며, As Integer는 각각의 배열이 정수형 자료형을 갖는다는 것을 의미한다. 배열은 같은 자료형을 갖는 변수들의 집합이다. Dim A(10) As Integer A(0) A(1) A(2) ..... A(9) A(10)

15 데이터 구조와 프로시저 4.1 데이터 구조 ① 배열의 초기화 배열에 있는 각각의 요소에 초기값을 대입하는 과정이다.
1차원 배열의 초기화 배열 초기화를 사용하지 않을 경우에는 각각의 배열 요소를 초기화해 주어야 한다. Dim NameArray( ) As String = {“홍길동”, “이순신”, “민병국”, “김국진”, “조정길”} Dim NameArray(4) As String NameArray(0) = “홍길동” NameArray(1) = “이순신” NameArray(2) = “민병국” NameArray(3) = “김국진” NameArray(4) = “조정길”

16 데이터 구조와 프로시저 4.1 데이터 구조 1차원 배열은 첨자가 1개인 경우이고, 2차원 배열은 첨자가 2개, 3차원 배열은 첨자가 3개인 경우이다. 1차원 배열 → Dim 배열명(첨자) As 자료형 2차원 배열 → Dim 배열명(첨자, 첨자) As 자료형 3차원 배열 → Dim 배열명(첨자, 첨자, 첨자) As 자료형

17 예제 프로그램 : 배열문 예제 프로그램(배열1)
데이터 구조와 프로시저 예제 프로그램 : 배열문 예제 프로그램(배열1) 1차원 배열을 선언하여 선언된 배열에 값을 저장한 후 저장된 값을 출력하는 프로그램 1. 폼을 설계한다.

18 데이터 구조와 프로시저 2. 객체(폼, 컨트롤)의 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1
Text : 1차원 배열 명령 버튼 Button1 (Name) : btnArray Text : 실행 리스트박스 ListBox1 (Name) : lstName IntegralHeight : False

19 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다. Public Class Form1
Private Sub btnArray_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnArray.Click 'Dim NameArray() As String = {"홍길동", "이순신", "민병국", "김국진", "조정길"} Dim NameArray(4) As String '배열 NameArray를 정의 NameArray(0) = "홍길동“ '각 배열에 이름 저장 NameArray(1) = "이순신" NameArray(2) = "민병국" NameArray(3) = "김국진" NameArray(4) = "조정길" lstName.Items.Add(NameArray(4)) '리스트박스에 지정된 이름 출력 lstName.Items.Add(NameArray(3)) Dim ArrayName As String '각 이름을 루프로 출력 For Each ArrayName In NameArray lstName.Items.Add(ArrayName) 'lstName 리스트박스에 각각의 이름 출력 Next End Sub End Class

20 데이터 구조와 프로시저 4. 프로그램을 실행한다. 5. 프로젝트를 저장한다.
메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “배열1”으로, 위치를 “C:\VB예제 \chapter04”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다.

21 데이터 구조와 프로시저 4.1 데이터 구조 ② 다차원 배열 첨자를 2개 이상 사용하는 경우의 배열이다.
열과 행을 가지는 2차원이나, 2차원을 여러 장 겹쳐진 3차원, 그 이상의 차원을 말한다. Dim 이외에 Public, Protected, Friend, Protected Friend, Private 사용 가능 사용 형식 Dim 배열명(첨자1, 첨자2, … ) [ As 데이터형식] 사용 예 Dim CntArray(4,4) As Integer ‘첫번째 인수는 행, 두번째 인수는 열을 나타낸다. ‘행과 열의 첨자값 범위는 0부터 4까지이다. 2차원 배열의 초기화 Dim CntArray( , ) As Integer ={ {1,2,3},{4,5,6},{7,8,9}}

22 예제 프로그램 : 2차원 배열문 예제 프로그램(배열2)
데이터 구조와 프로시저 예제 프로그램 : 2차원 배열문 예제 프로그램(배열2) 2차원 배열을 선언하여 선언된 2차원 배열에 값을 저장한 후 출력하는 프로그램 1. 폼을 설계한다.

23 데이터 구조와 프로시저 2. 객체(폼, 컨트롤)의 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1
Text : 2차원 배열 명령 버튼 Button1 (Name) : btnArray Text : 실행 리스트박스 ListBox1 (Name) : lstNumber IntegralHeight : False

24 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다. Public Class Form1
Private Sub btnArray_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnArray.Click '배열 초기화로 2차원 배열에 값 저장 Dim CntArray( , ) As Integer = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} '리스트박스에 지정된 첨자 출력 lstNumber.Items.Add(CntArray(1, 2)) '각 숫자를 루프로 출력 Dim ArrayCnt As Integer For Each ArrayCnt In CntArray 'lstNumber 리스트박스에 각각의 숫자 출력 lstNumber.Items.Add(ArrayCnt) Next End Sub End Class

25 데이터 구조와 프로시저 4. 프로그램을 실행한다. 5. 프로젝트를 저장한다.
메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “배열2”로, 위치를 “C:\VB예제 \chapter04”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다.

26 데이터 구조와 프로시저 4.1 데이터 구조 ③ 동적 배열과 재지정
정적 배열 : 처음 선언할 때 부터 그 크기를 고정시키는 배열 동적 배열 : 프로그램 실행 중에 상황에 따라 배열의 크기를 자유롭게 조절할 수 있는 배열 배열에 저장하는 데이터의 개수가 불명확할 때 사용 첨자없이 괄호만으로 배열을 선언하여 필요에 따라 배열의 크기를 재지정하고, 해제할 수 있다. ReDim문을 사용하여 배열 크기를 재지정한다. 이미 선언된 차원의 길이를 변경할 수 있으나, 배열의 차수(차원)는 변경할 수 없다. 사용 형식 Dim 배열명( ) [As 데이터형식] → 배열먼저 선언 ReDim [Preserve] 배열명(첨자) → 사용시 ReDim문으로 재배열

27 동적 배열을 선언하고, ReDim문으로 재정의 하는 예제
데이터 구조와 프로시저 4.1 데이터 구조 동적 배열을 선언하고, ReDim문으로 재정의 하는 예제 Dim CntArray( ) As Integer Dim CntArray2( , ) As Integer ReDim CntArray(4) ReDim CntArray2(3,4) 프로그램 실행 중에 ReDim문을 사용하면 배열에 있는 기존 값이 없어진다. Preserve 키워드를 사용하여 값을 보존할 수 있다. 이전 값을 보존하고, 첨자의 범위를 하나 더 증가시켜 사용하는 경우는 다음과 같이 사용한다. ReDim Preserve CntArray(UBound(CntArray) + 1)

28 데이터 구조와 프로시저 4.1 데이터 구조 배열의 UBound 와 Lbound UBound : 배열의 상위 경계값을 지정
차수 : 1 - 첫번째 첨자, 2 - 두번째 첨자, 3 – 세번째 첨자 Dim CntArray(35, 10) As Byte UBound(CntArray, 1)            ‘반환값 : 35 UBound(CntArray, 2)            ‘반환값 : 10 UBound : 배열 CntArray의 총 크기를 계산하는 예제 Dim Total As Integer Total = (UBound(CntArray, 1) + 1) * (UBound(CntArray, 2) + 1) ‘합을 구하기 위하여 계산한 값인 Total = 36 * 11 은 396이다.

29 다차원 배열에서 Preserve를 사용하면 마지막 차원만 변경 가능 다른 차원을 변경할 경우 런타임 오류 발생
데이터 구조와 프로시저 4.1 데이터 구조 다차원 배열에서 Preserve를 사용하면 마지막 차원만 변경 가능 다른 차원을 변경할 경우 런타임 오류 발생 차원의 현재 크기를 모를 경우 GetLength 메소드를 사용하면 지정한 차원의 길이가 반환됨 ReDim Preserve Matrix(Matrix.GetLength(0), Matrix.GetLength(1) + 10) ○ ReDim Preserve Matrix(Matrix.GetLength(0) + 10, Matrix.GetLength(1)) ☓

30 예제 프로그램 : 동적 배열 예제 프로그램(동적배열)
데이터 구조와 프로시저 예제 프로그램 : 동적 배열 예제 프로그램(동적배열) 동적 배열을 선언하여 선언된 배열의 크기를 재지정하여 배열에 저장된 값을 출력하는 프로그램 1. 폼을 설계한다.

31 데이터 구조와 프로시저 2. 객체(폼, 컨트롤)의 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1
Text : 동적 배열 명령 버튼 Button1 (Name) : btnReDim1 Text : 재지정1 Button2 (Name) : btnReDim2 Text : 재지정2 Button3 (Name) : btnReDim3 Text : Preserve 리스트박스 ListBox1 (Name) : lstNumber IntegralHeight : False

32 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다.
Private Sub btnReDim1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReDim1.Click Dim ArrayName() As String '배열을 재지정 ReDim ArrayName(4) '각 배열에 이름을 저장 ArrayName(0) = "조정길" ArrayName(1) = "홍길동" ArrayName(2) = "박상익" ArrayName(3) = "김동진" ArrayName(4) = "최민철" '리스트박스에 이름 출력 Dim sName As String For Each sName In ArrayName lstName.Items.Add("[" & sName & "]") Next End Sub

33 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다.
Private Sub btnReDim2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReDim2.Click '배열을 초기화 Dim ArrayName() As String = {"조정길", "홍길동", "박상익", "김동진", "최민철"} '첨자7로 배열 재정의 ReDim ArrayName(7) ArrayName(5) = "이정현" ArrayName(6) = "조하은" ArrayName(7) = "이병렬" '리스트박스에 이름 출력 Dim sName As String For Each sName In ArrayName lstName.Items.Add("[" & sName & "]") Next End Sub

34 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다.
Private Sub btnPreserve_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreserve.Click '배열을 초기화 Dim ArrayName() As String = {"조정길", "홍길동", "박상익", "김동진", "최민철"} '첨자7로 배열의 크기를 재정의 ReDim Preserve ArrayName(7) ArrayName(5) = "이정현" ArrayName(6) = "조하은" ArrayName(7) = "이병렬" '리스트박스에 이름 출력 Dim sName As String For Each sName In ArrayName lstName.Items.Add("[" & sName & "]") Next End Sub

35 데이터 구조와 프로시저 4. 프로그램을 실행한다. 5. 프로젝트를 저장한다.
메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “동적배열”로, 위치를 “C:\VB예제 \chapter04”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다.

36 데이터 구조와 프로시저 4.1 데이터 구조 ④ Array 클래스를 이용한 배열 사용
Visual Basic.NET에서 정의하는 모든 형식은 반드시 특정 네임스페이스 (NameSpace)에 속한다. 모든 배열도 System 네임스페이스의 Array 클래스에서 상속되며, 프로 그램 작성에 System.Array 클래스의 메소드(Method)와 속성(Property) 을 사용할 수 있다. Rank 속성 : 다차원 배열에서 배열의 차수를 구하는 속성 Sort() 메소드 : 배열을 정렬하는 메소드 GetLength() 메소드 : 배열 차원의 길이를 구하는 메소드

37 데이터 구조와 프로시저 4.1 데이터 구조 Rank 속성, Sort() 메소드, GetLength() 메소드를 이용한 예제
매개변수가 0인 경우 : 첫 번째 차원의 길이 매개변수가 1인 경우 : 두 번째 차원의 길이 매개변수가 3인 경우 : 세 번째 차원의 길이 Sort() 메소드 : 정렬하고자 하는 배열을 지정 Dim RankArray(20) As Integer Dim SortArray(5) As String Dim LengthArray(7, 10) As Integer '배열의 차수 구함 CntRank1 = RankArray.Rank ‘결과값 1             CntRank2 = LengthArray.Rank ‘결과값 2 ‘배열 차원의 길이 구함 SubLength1 = RankArray.GetLength(0)  ‘결과값 21    SubLength2 = LengthArray.GetLength(0) ‘결과값 8 SubLength3 = LengthArray.GetLength(1) ‘결과값 11 Array.Sort(SortArray)             ‘배열을 정렬함

38 예제 프로그램 : 배열 클래스 예제 프로그램(배열3)
데이터 구조와 프로시저 예제 프로그램 : 배열 클래스 예제 프로그램(배열3) 배열을 선언하여 배열의 차수, 배열 차원의 길이를 구하고, 배열에 저장된 값을 정렬하여 출력하는 프로그램 1. 폼을 설계한다.

39 데이터 구조와 프로시저 2. 객체(폼, 컨트롤)의 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1
Text : 배열 클래스 명령 버튼 Button1 (Name) : btnSubs Text : 차수길이 Button2 (Name) : btnSort Text : 정렬 리스트박스 ListBox1 (Name) : lstName IntegralHeight : False

40 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다.
Private Sub btnSubs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubs.Click Dim RankArray(20) As Integer Dim LengthArray(7, 10) As Integer Dim CntRank1, CntRank2 As Integer Dim SubLength1, SubLength2, SubLength3 As Integer CntRank1 = RankArray.Rank '배열의 차수 구함 CntRank2 = LengthArray.Rank SubLength1 = RankArray.GetLength(0) '배열 차수의 길이 구함 SubLength2 = LengthArray.GetLength(0) SubLength3 = LengthArray.GetLength(1) '리스트박스에 차수와 차수길이 출력 lstName.Items.Add("[" & CntRank1 & "]") lstName.Items.Add("[" & CntRank2 & "]") lstName.Items.Add("[" & SubLength1 & "]") lstName.Items.Add("[" & SubLength2 & "]") lstName.Items.Add("[" & SubLength3 & "]") End Sub

41 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다.
Private Sub btnSort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSort.Click Dim SortArray() As Integer = {45, 3, 66, 13, 8, 6, 78, 100, 34, 11, 20} Array.Sort(SortArray) '배열을 정렬함 '리스트박스에 정렬된 숫자 출력 Dim sNumber As String For Each sNumber In SortArray lstName.Items.Add(sNumber) Next End Sub

42 데이터 구조와 프로시저 4. 프로그램을 실행한다. 5. 프로젝트를 저장한다.
메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “배열3”으로, 위치를 “C:\VB예제 \chapter04”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다.

43 데이터 구조와 프로시저 4.1 데이터 구조 (4) 구조체(structure)
구조체란 기본 데이터 형식인 Integer나 String 등을 묶어서 배열과 같은 새로운 데이터 형식을 구성한다. 즉, 서로 다른 데이터 형식으로 구성된 기억장소들의 모임을 말한다. 사용자가 데이터 형식을 정의할 수 있는 방법 : 구조체, 열거형 구조체 : 하나의 이름으로 다른 형태의 변수들을 그룹화 열거형 : 이름을 가진 정수형 상수들을 나열 예, 학생의 수강신청에 관계된 데이터들의 묶음 학과 학번 신청학점 신청과목 성명 구조체(레코드) 멤버(필드) (String) (Integer)

44 데이터 구조와 프로시저 4.1 데이터 구조 구조체의 각 멤버에 각각 접근할 수도 있지만 일반적으로 구조체는 하나의 단위로 취급된다. 구조체 선언은 Structure문과 End Structure문 안에 구조체의 멤버들을 정의한다. Structure문은 구조체의 이름을 제공하며, 이 이름은 해당 구조체가 정의하고 있는 데이터 형식의 식별자로도 사용된다. 멤버의 선언 순서는 해당 구조체의 데이터 형식으로 선언된 변수의 저장소 순서를 결정한다. Dim문을 사용하는 경우 액세스 기본값은 Public이다. 모든 구조체는 .NET 클래스 System.ValueType에서 상속된다. 구조체의 선언 형식 [Public|Private|Protected] Structure 구조체이름         {Dim|Public|Private|Friend} 멤버1 As 데이터형식1                  {Dim|Public|Private|Friend} 맴버n As 데이터형식N End Structure

45 데이터 구조와 프로시저 4.1 데이터 구조 학생의 수강신청에 관계된 멤버들을 선언한 구조체
Structure Student ‘구조체 정의       Public StdCourse As String       ‘멤버 접근지정자는 Public       Dim StdNumber As String         ’멤버 접근지정자는 기본인 Public       Dim StdName As String       Dim StdLession As String                       Private StdGrade As Integer      ‘멤버 접근지정자는 Private End Structure Dim MyStudent As Student ‘구조체 선언 Student로 정의된 구조체 형식을 가지고, MyStudent 변수의 데이터 형식으로 선언함으로써 사용할 수 있다. 구조체의 각 멤버에 값을 할당하거나 읽을 경우 “구조체이름.멤버명”을 사용한다. MyStudent.StdName = “조정길”

46 예제 프로그램 : 구조체 예제 프로그램(구조체)
데이터 구조와 프로시저 예제 프로그램 : 구조체 예제 프로그램(구조체) 구조체를 선언하고, 선언된 구조체를 생성하여 값을 할당한 후 텍스트 박스에 구조체 데이터들을 출력하는 프로그램 1. 폼을 설계한다.

47 데이터 구조와 프로시저 2. 객체(폼, 컨트롤)의 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1
Text : 구조체 레이블 Label1 Text : 학과 Label2 Text : 학번 Label3 Text : 성명 Label4 Text : 신청과목 Label5 Text : 신청학점 텍스트박스 TextBox1 (Name) : txtCource Text : TextBox2 (Name) : txtNumber TextBox3 (Name) : txtName TextBox4 (Name) : txtLession TextBox5 (Name) : txtGrade 명령 버튼 Button1 (Name) : btnRun Text : 실행

48 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다. Public Class Form1
Inherits System.Windows.Forms.Form Public Structure Student ‘구조체 정의 Public StdCourse As String ‘멤버 접근지정자는 Public Dim StdNumber As String '멤버 접근지정자는 기본인 Public Dim StdName As String Dim StdLession As String Dim StdGrade As Integer ‘멤버 접근지정자는 Private End Structure Private Sub btnRun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRun.Click Dim MyStudent As Student ' Student 구조체 선언(생성) MyStudent.StdCourse = "컴퓨터학부" MyStudent.StdNumber = " " MyStudent.StdName = "조정길" MyStudent.StdLession = "비주얼베이직" MyStudent.StdGrade = 19 '텍스트박스에 구조체의 데이터 출력 txtCourse.Text = MyStudent.StdCourse txtNumber.Text = MyStudent.StdNumber txtName.Text = MyStudent.StdName txtLession.Text = MyStudent.StdLession txtGrade.Text = MyStudent.StdGrade End Sub End Class

49 데이터 구조와 프로시저 4. 프로그램을 실행한다. 5. 프로젝트를 저장한다.
메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “구조체”로, 위치를 “C:\VB예제 \chapter04”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다.

50 데이터 구조와 프로시저 4.1 데이터 구조 (5) 열거형(enumerate)
열거형은 서로 연관관계에 있는 정수형 상수들의 리스트를 정의하는 기 능이다. 기본 데이터 형식은 Integer형이며, Byte, Short, Long 형식이 될 수도 있다. 데이터 형식이 취할 수 있는 변수 값의 범위를 정하며, 어떤 것을 항목별로 쓰거나 나열하는데 사용한다. [접근지정자] Enum 열거형이름[ As 데이터형식]         열거형요소1 [ = 초기화식1 ]         열거형요소2 [ = 초기화식2 ]         ...    End Enum

51 데이터 구조와 프로시저 4.1 데이터 구조 Course 라는 열거형을 정의한 예
값을 가지고 있지 않으면, 첫번째 열거자를 0으로 해서 1씩 증가 열거형의 멤버인 열거자를 참조하기 위해서는 “열거형이름.열거자”의 형식으로 사용한다. Course 열거형의 참조 형식 ‘열거형 정의 Public Enum Course As Integer         VisualBasic = 1         VisualC = 2         C = 3         JAVA = 4         Delphi = 5         PowerBuilder = 6 End Enum 열거형의 열거자 열거자의 참조 형식 VisualBasic Course.VisualBasic 1 VisualC Course.VisualC 2 C Course.C 3 JAVA Course.JAVA 4 Delphi Course.Delphi 5 PowerBuilder Course.PowerBuilder 6

52 예제 프로그램 : 열거형 예제 프로그램(열거형)
데이터 구조와 프로시저 예제 프로그램 : 열거형 예제 프로그램(열거형) 열거형 상수를 선언하여 선언된 특정 열거자의 값을 리스트 박스에 출력하는 프로그램 1. 폼을 설계한다.

53 데이터 구조와 프로시저 2. 객체(폼, 컨트롤)의 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1
Text : 열거형 명령 버튼 Button1 (Name) : btnRun Text : 실행 리스트박스 ListBox1 (Name) : lstList IntegralHeight : False

54 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다. Public Class Form1
Inherits System.Windows.Forms.Form '열거형 상수 선언 Public Enum Course As Integer VisualBasic = 1 VisualC = 2 C = 3 JAVA = 4 Delphi = 5 PowerBuilder = 6 End Enum Private Sub btnRun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRun.Click '리스트박스에 JAVA와 PowerBuilder의 값 출력 lstList.Items.Add("[ " & Course.JAVA & " ]") lstList.Items.Add("[ " & Course.PowerBuilder & " ]") End Sub End Class

55 데이터 구조와 프로시저 4. 프로그램을 실행한다. 5. 프로젝트를 저장한다.
메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “열거형”으로, 위치를 “C:\VB예제 \chapter04”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다.

56 데이터 구조와 프로시저 4.1 데이터 구조 (6) 컬렉션(collection)
컬렉션은 관련된 개체를 그룹화하고 관리하는 데 사용되는 개체이다. 모든 Form에는 컨트롤 컬렉션이 있으며, 폼의 Controls 속성을 통해 이 컬렉션에 액세스할 수 있다. 이 컬렉션은 해당 폼의 모든 컨트롤을 나타내는 개체이다. 이 컬렉션을 사용하면 해당 인덱스로 컬렉션의 컨트롤을 검색하고, For Each...Next 문을 사용하여 컬렉션의 요소 전체에 접근할 수 있다. Visual Basic에서는 사용자 고유의 컬렉션을 정의하고 만드는 데 사용할 수 있는 Collection 클래스를 제공한다. Collection 클래스 인스턴스에서는 숫자 인덱스나 String 키를 사용하여 항목을 액세스할 수 있다. ① 컬렉션 초기화 컬렉션 초기화는 컬렉션을 만들고, 값을 초기 설정으로 지정한다. 중괄호 다음의 키워드({})를 사용하여 컬렉션 초기화를 식별한다.

57 데이터 구조와 프로시저 4.1 데이터 구조 컬렉션을 만들고, 초기 설정으로 값을 지정
컬렉션을 만들고, 초기 설정으로 값을 지정 'String() 타입의 배열 생성. Dim winterMonths = {"December", "January", "February"} 'Integer() 타입의 배열 생성 Dim numbers = {1, 2, 3, 4, 5} '메뉴 옵션의 리스트 생성 'Requires an extension method named Add for List(Of MenuOption) Dim menuOptions = New List(Of MenuOption) From {{1, "Home"}, {2, "Products"}, {3, "News"}, {4, "Contact Us"}} 컬렉션의 초기화는 중괄호로 묶어 From 키워드 다음에 나타낸다. ‘중괄호로 묶어 쉼표로 구분된 값 목록으로 지정 Dim names As New List(Of String) From {"Christa", "Brian", "Tim“}

58 데이터 구조와 프로시저 4.1 데이터 구조 ② 항목 추가 및 제거
컬렉션은 컬렉션에 항목을 추가할 수 있는지 여부와 추가할 수 있는 경우 항목을 추가하는 방식에서 차이가 있다. Collection 객체에는 컬렉션에 항목을 추가하기 위한 Add 메서드와 항목을 제거하기 위한 Remove 메서드가 포함되어 있다. 특수 컬렉션을 사용하여 코드로 요소를 추가하거나 제거할 수가 없다. 예를 들어, CheckedListBox.CheckedItems 속성은 인덱스로 항목에 대한 참조 컬렉션을 반환하지만 코드로 해당 컬렉션에서 항목을 추가하거나 제거할 수 없다. 이 작업은 사용자가 사용자 인터페이스에서 해당 확인란을 선택하거나 선택 취소하는 방법으로만 수행할 수 있다. 이 컬렉션에 대한 Add 또는 Remove 메서드는 없다.

59 ③ ArrayList 클래스를 이용한 자료구조
데이터 구조와 프로시저 4.1 데이터 구조 ③ ArrayList 클래스를 이용한 자료구조 닷넷 클래스 라이브러리 중에 System.Collections 네임 스페이스에는 데이터 처리와 관계된 다음과 같은 클래스들을 제공한다. 동적 데이터 처리 : ArrayList 클래스 해쉬 구현 : HashTable 클래스 검색 해결 : SortedList 클래스 큐 구현 : Queue 클래스 스택 구현 : Stack 클래스 ArrayList 클래스는 필요에 따라 크기가 동적으로 증가하는 배열을 사 용하여 IList 인터페이스를 구현한다. ArrayList의 특징은 동적으로 데이터를 저장하는 가장 단순한 구조이며, 1차원 배열 형태로 첨자와 값의 형태를 사용하여 저장할 때 이용한다.

60 데이터 구조와 프로시저 4.1 데이터 구조 ArrayList의 속성 및 메서드 2018-11-16 속성 내용 Count
Capacity ArrayList에 저장할 수 있는 요소의 수를 가져오거나 설정한다. Item(index) 지정한 인덱스에 있는 요소를 가져오거나 설정한다. 메서드 내용 Add ArrayList의 끝 부분에 요소를 추가한다. Clear ArrayList의 모든 요소를 제거한다. Contains ArrayList에 요소가 있는지를 Boolean 값으로 나타낸다. 있으면 True Insert ArrayList에 지정한 인덱스에 요소를 삽입한다. RemoveAt ArrayList의 지정한 인덱스에서 요소를 삭제한다. Remove ArrayList에서 맨 처음 나타나는 특정 객체를 제거한다. Sort 전체 ArrayList의 요소를 정렬한다. BinarySearch 기본 비교자를 사용하여 정렬된 전체 ArrayList에서 요소를 검색하고 요소의 0부터 시작하는 인덱스를 반환한다. TimeToSize 용량을 ArrayList의 실제 요소 수로 설정한다.

61 예제 프로그램 : 컬렉션 예제 프로그램(ArrayList)
데이터 구조와 프로시저 예제 프로그램 : 컬렉션 예제 프로그램(ArrayList) ArrayList를 만들고, 초기화하여 특정 값을 제거 및 검색하는 프로그램 1. 폼을 설계한다.

62 데이터 구조와 프로시저 2. 객체(폼, 컨트롤)의 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1
Text : ArrayList 레이블 Label1 Text : 이름 텍스트 박스 TextBox1 (Name) : txtName ImeMode : HangullFull 명령 버튼 Button1 (Name) : btnAdd Text : 추가 (Name) : btnRemove Text : 제거 (Name) : btnFind Text : 검색 (Name) : btnAll Text : 전체목록 리스트박스 ListBox1 (Name) : lstResult

63 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다. Public Class Form1
'ArrayList생성 Private nAL As New ArrayList() Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click 'ArrayList에 이름 추가 nAL.Add(txtName.Text) lstResult.Items.Add(txtName.Text & "입력 ...") '이름 항목 Clear txtName.Text = "" End Sub Private Sub btnRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemove.Click 'ArrayList에서 이름 제거 nAL.Remove(txtName.Text) lstResult.Items.Add(txtName.Text & "제거 ...")

64 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다.
Private Sub btnFind_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFind.Click '바이너리 검색을 위해 ArrayList 정렬 nAL.Sort() '검색결과표시 : 결과값=순서번호(있는경우), 결과값=-4(없는경우) lstResult.Items.Add("결과 : " & nAL.BinarySearch(txtName.Text)) '이름 항목 Clear txtName.Text = "" End Sub Private Sub btnAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAll.Click lstResult.Items.Add("개수 : " & nAL.Count) lstResult.Items.Add("현재용량 : " & nAL.Capacity) Dim x As Integer For x = 0 To nAL.Count - 1 lstResult.Items.Add("내용 : " & nAL.Item(x)) Next End Class

65 데이터 구조와 프로시저 4. 프로그램을 실행한다. 5. 프로젝트를 저장한다.
해당 이름을 [추가] 버튼을 클릭하여 입력하고, [전체목록] 버튼을 클릭하면 다음과 같은 결과가 출력된다. 5. 프로젝트를 저장한다. 메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “ArrayList”로, 위치를 “C:\VB예제 \chapter04”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다.

66 데이터 구조와 프로시저 4.1 데이터 구조 (7) 제네릭(generic) 형식
제네릭 프로그래밍은 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재 사용성을 높일 수 있는 프로그래밍 방식이다. 제네릭 형식은 다양한 데이터 형식에 대해 같은 기능을 수행하도록 조정되는 단일 프로그래밍 요소이다. 제네릭 형식을 정의할 때 하나 이상의 데이터 형식으로 제네릭 형식을 매개 변수화 한다. ① 제네릭 클래스의 정의 및 사용 제네릭 클래스는 형식 매개 변수를 사용하는 클래스를 말한다. 각 매개 변수에 대한 형식 인수를 제공하여 제네릭 클래스에서 생성된 클래스를 만들 수 있다. 생성된 클래스 형식의 변수를 선언하고 생성된 클래스 인스턴스를 만든 다음 해당 변수에 할당할 수 있다. 클래스 이외에 제네릭 구조체, 인터페이스, 프로시저, 대리자 등을 정의하여 사용할 수도 있다.

67 데이터 구조와 프로시저 4.1 데이터 구조 닷넷 프레임워크에 정의된 제네릭 클래스를 사용하여 인스턴스를 만 드는 과정
1) import문 선언 import System.Collections.Generic 2) 개체 생성 Public Class Generic(Of T) . . . End Class 3) 형식 매개변수를 대체할 실제 형식 지정 Dim gen As New Generic(Of String)

68 데이터 구조와 프로시저 4.1 데이터 구조 ② List(T) 제네릭 클래스
List(T) 클래스는 ArrayList 클래스의 제네릭 형태에 해당된다. 필요에 따라 크기가 동적으로 증가하는 배열을 사용하여 IList(T) 제네릭 인터페이스를 구현한다. 사용 형식 Dim instance As List(Of T) • T : 목록에 있는 요소의 형식이다. 속성 내용 Count 리스트(목록) 요소(항목)의 갯수를 반환한다. List(T)에 실제로 있는 요소의 수 Capacity 저장할 수 있는 리스트 요소의 갯수를 반환한다. 크기를 조정하지 않고 List(T)에 저장할 수 있는 요소의 수 Item 지정한 리스트의 인덱스 값을 가져오거나 설정한다.

69 데이터 구조와 프로시저 4.1 데이터 구조 메서드 내용 Add 리스트 끝부분에 개체를 추가한다. Clear
리스트의 모든 요소를 제거한다. Contains 리스트에 요소가 있는지를 Boolean 값으로 나타낸다. 있으면 True FindIndex 지정된 조건자에 정의된 조건과 일치하는 요소를 검색하고 리스트나 그 일부에서 처음으로 검색한 요소의 인덱스를 반환한다. 인덱스는 0부터 시작한다. Insert 지정한 인덱스에 요소를 삽입한다. RemoveAt 지정한 인덱스에서 요소를 삭제한다. Remove ArrayList에서 맨 처음 나타나는 특정 객체를 제거한다. 검색되지 않으면 요소 제거작업을 수행하지 않는다. Sort 리스트를 정렬한다. ToString String 값으로 변환한다. TimeExcess 리스트의 객수와 일치하도록 용량을 줄인다. 사용하지 않는 용량이 총용량의 10%보다 작으면 리스트의 크기가 조정되지 않는다.

70 예제 프로그램 : 제네릭 예제 프로그램(제네릭)
데이터 구조와 프로시저 예제 프로그램 : 제네릭 예제 프로그램(제네릭) 제네릭 형식을 이용하여 처리된 결과값을 출력하는 프로그램 1. 폼을 설계한다.

71 데이터 구조와 프로시저 2. 객체(폼, 컨트롤)의 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1
Text : List(T) 제네릭 클래스 명령 버튼 Button1 (Name) : btnResult Text : 실행 레이블 Label1 Text : 선택할 차 이름 텍스트 박스 TextBox1 (Name) : txtSearch TextBox2 (Name) : txtResult MultiLine : True

72 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다. Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnResult.Click '제네릭 타입의 cars 생성자를 생성 Dim cars As New List(Of String) '리스트에서 요소를 모두 제거 cars.Clear() '요소(항목) 추가 cars.Add("아반테") cars.Add("소나타") cars.Add("제네시스") cars.Add("산타페") cars.Add("벤츠") cars.Add("BMW") cars.Add("아우디")

73 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다. txtResult.Clear()
txtResult.Text += "용량 : " + cars.Capacity.ToString() + vbCrLf txtResult.Text += "요소(항목) 수 : " + cars.Count.ToString() + vbCrLf txtResult.Text += "선택한 차 포함여부 : " + cars.Contains(txtSearch.Text).ToString() + vbCrLf txtResult.Text += "포함된 항목 : " + vbCrLf For Each car As String In cars txtResult.Text += vbTab + car + vbCrLf Next End Sub End Class

74 데이터 구조와 프로시저 4. 프로그램을 실행한다. 5. 프로젝트를 저장한다.
차 이름을 입력하고, [실행] 버튼을 클릭하면 다음과 같은 결과가 출력된다. 5. 프로젝트를 저장한다. 메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “제네릭”으로, 위치를 “C:\VB예제 \chapter04”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다.

75 데이터 구조와 프로시저 4.2 프로시저(Procedure)
프로그램을 작성하는데 있어서 프로그램을 작은 논리적 단위로 분할하여 작성함으로써 좀더 쉽고 편리하게 프로그램을 작성할 수 있다. 프로그램에서 이러한 작은 논리적 단위를 프로시저(Procedure)라고 한다. Visual Basic.Net 에서도 프로그램 작성을 프로시저라는 논리적인 단위로 작성하고, 하나 이상의 프로시저로 구성된다. A 프로시저 프로시저 호출 F 프로시저 제어 넘김 제어 받음

76 데이터 구조와 프로시저 4.2 프로시저(Procedure) 프로시저의 종류 Sub 프로시저
   해당 루틴을 처리하고, 값을 반환(Return) 하지 않는다. Function 프로시저 해당 루틴을 처리하고, 처리 결과 값을 반환(Return) 한다. (1) 서브 프로시저(Sub Procedure) 일반적으로 반환 값이 없고, 단순히 프로시저의 내용을 실행할 경우에 주로 사 용한다. 서브 프로시저에는 객체에 대한 특정 이벤트가 발생했을 때 호출되는 이벤트 프로시저(Event Procedure)와 반복적으로 자주 사용되는 단위 프로그램인 일반 프로시저(General Procedure)로 구분한다. 서브 프로시저 사용 형식 [접근지정자] Sub 프로시저이름[(매개변수리스트)]       명령문들       [Exit Sub]         ... End Sub

77 데이터 구조와 프로시저 4.2 프로시저(Procedure) 매개 변수가 없는 간단한 Sub 프로시저 서브 프로시저 호출 방법
Private Sub ChooseBox( )       Dim strName As String       strName = "첫번째 버튼“       '메시지박스 디스플레이       MessageBox.Show("Hello, Visual Basic", strName) End Sub 서브 프로시저 호출 방법 사용 예 1) Call 프로시저 이름(매개변수) 2) 프로시저 이름(매개변수) 1) Call ChooseBox( ) 2) ChooseBox( )

78 데이터 구조와 프로시저 4.2 프로시저(Procedure) 이벤트 프로시저
이벤트 프로시저(Event Procedure)는 특정 객체에서 이벤트가 발생 되면 호출되는 프로시저 Visual Basic은 어떤 객체에서 이벤트가 발생되면 자동적으로 그 객체에 해당되는 이름을 사용한 이벤트 프로시저가 호출된다. 프로시저 이름은 “컨트롤이름_이벤트” 로 구성된다. 이벤트 프로시저 사용 형식 [접근지정자] Sub 컨트롤이름_이벤트[(매개변수리스트)]       명령문들       [Exit Sub]         ... End Sub

79 btnBtn1이라는 컨트롤에 대한 이벤트 프로시저
데이터 구조와 프로시저 4.2 프로시저(Procedure) btnBtn1이라는 컨트롤에 대한 이벤트 프로시저 Private Sub btnBtn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBtn1.Click ‘새로운 명령문들 입력 End Sub 이벤트 프로시저를 작성하는 과정 ① 객체인 클래스 이름을 선택한다.

80 데이터 구조와 프로시저 4.2 프로시저(Procedure) ② 선택한 클래스 이름에 속해있는 이벤트인 메서드 이름을 선택한다.
③ 이벤트 프로시저의 틀(뼈대)이 만들어진다.

81 예제 프로그램 : 서브 프로시저 예제 프로그램(서브루틴)
데이터 구조와 프로시저 예제 프로그램 : 서브 프로시저 예제 프로그램(서브루틴) 일반 Sub 프로시저를 작성하여 서브 프로시저 호출을 ‘Call’ 명령을 사용하여 호출하는 방법과 프로시저 이름으로 호출하는 방법을 상용한 프로그램 1. 폼을 설계한다.

82 데이터 구조와 프로시저 2. 객체(폼, 컨트롤)의 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1
Text : 서브루틴 명령 버튼 Button1 (Name) : btnBtn1 Text : Call사용 Sub 프로시저 호출 Button2 (Name) : btnBtn2 Text : Sub 프로시저 호출

83 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다. Public Class Form1
Private Sub ChooseBox1() Dim strName As String strName = "Call사용 Sub 프로시저 호출" '메시지박스 디스플레이 MessageBox.Show("Hello, Visual Basic 2010", strName) End Sub Private Sub ChooseBox2() strName = "Sub 프로시저 호출"

84 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다.
Private Sub btnBtn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBtn1.Click 'Call 사용 새로운 서브루틴을 Call Call ChooseBox1() End Sub Private Sub btnBtn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBtn2.Click '새로운 서브루틴을 Call ChooseBox2() End Class

85 데이터 구조와 프로시저 4. 프로그램을 실행한다. 5. 프로젝트를 저장한다.
메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “서브루틴”으로, 위치를 “C:\VB예제 \chapter04”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다.

86 데이터 구조와 프로시저 4.2 프로시저(Procedure) (2) 함수 프로시저(Function Procedure)
매개변수의 값을 받아 프로시저의 내용을 처리하고, 그 결과를 반환하는 경우에 사용한다. [접근지정자] Function 함수이름[(매개변수리스트)] [As 데이터 형식]       명령문들       [Exit Function]         ... End Function “As 데이터 형식”은 프로시저가 반환하는 반환값에 대한 데이터 형식을 지정 한다. “Return” 이나 “Exit Function” 은 프로그램 흐름상 종료 전에 Function 프로 시저의 실행을 끝마치고자 할 때 사용한다. 반환값을 반환하는 두가지 형식 ① 함수이름에 반환값이나 반환식을 대입 반환값이 지정된 후에도 Function 프로시저는 계속 실행하다가 End Function문이나 Exit Function문을 만나서 실행을 마치게 되면, 그때에 유지된 값을 반환하게 된다.

87 데이터 구조와 프로시저 4.2 프로시저(Procedure) ② Return 문을 사용하여 반환값을 반환
[접근지정자] Function 함수이름[(매개변수리스트)] [ As 데이터형식 ]         . . .         함수이름 = 반환값(반환식) End Function ② Return 문을 사용하여 반환값을 반환 Function 프로시저가 실행되다가 Return문을 만나면 나머지 명령문들은 무시하고 즉시 실행을 마치며, 반환값과 제어를 프로시저를 부른 문장으로 넘겨준다. [접근지정자] Function 함수이름[(매개변수리스트)] [ As 데이터형식 ]         . . .         Return 반환값(반환식) End Function

88 데이터 구조와 프로시저 4.2 프로시저(Procedure) Function 프로시저 호출
실제로 사용하려는 부분에서 프로시저를 호출하여 사용 : 호출 명 령어 필요 전달되는 변수의 값(매개변수)는 수정 가능하고, 프로시저를 처리 하고 난 후의 값은 반환할 수가 있다. [Call] 프로시저이름[(매개변수리스트)] 반환값을 반환하는 방법에는 Call 문을 사용하지 않는다. If ( iCount > 0 ) Then returnVal = CalcuSquare(100) lValue = MyFunction(100)

89 예제 프로그램 : 함수 프로시저 사용 예제 프로그램(함수)
데이터 구조와 프로시저 예제 프로그램 : 함수 프로시저 사용 예제 프로그램(함수) 함수 프로시저를 선언하여 함수 이름과 Return문을 사용하여 결과 값을 반환하는 프로그램 1. 폼을 설계한다.

90 데이터 구조와 프로시저 2. 객체(폼, 컨트롤)의 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1
Text : 함수 프로시저 명령 버튼 Button1 (Name) : btnName Text : 함수이름사용 Button2 (Name) : btnReturn Text : Return문사용 레이블 Label1 (Name) : lblName BorderStyle : Fixed3D Text : Label2 (Name) : lblReturn

91 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다. Public Class Form1
Function CalcuSquare(ByVal iNumber As Double) As Double If iNumber < 0 Then '매개변수 측정 Exit Function ‘호출 프로시저로 빠져나감 Else CalcuSquare = Math.Sqrt(iNumber) '제곱근을 반환 End If End Function Function MyFunction(ByVal jNumber As Integer) As Double Dim ReturnNum As Single ReturnNum = jNumber * Math.PI Return ReturnNum

92 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다.
Private Sub btnName_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnName.Click Dim returnval As Integer Dim iCount As Integer = 50 If (iCount > 0) Then returnval = CalcuSquare(500) lblName.Text = returnval End Sub Private Sub btnReturn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReturn.Click Dim iValue As Double iValue = MyFunction(500) lblReturn.Text = iValue End Class

93 데이터 구조와 프로시저 4. 프로그램을 실행한다. 5. 프로젝트를 저장한다.
메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “함수”로, 위치를 “C:\VB예제 \chapter04”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다.

94 데이터 구조와 프로시저 4.2 프로시저(Procedure) (3) 프로시저 매개변수(Procedure Parameter)
실 매개변수(actual parameter) : 호출하는 프로시저의 매개변수 형식 매개변수(formal parameter) : 호출받는 프로시저의 매개변수 [ Optional ] [{ ByVal | ByRef }] [ ParamArray ] 매개변수이름 [ As 데이터형식 ] Optional Optiona 매개변수는 기본값을 이용해 특정 매개변수를 생략한 형태로 호출하기 위해 프로시저의 기본값과 데이터 형식을 지정해 준다. Optional 매개변수 다음에 선언되는 모든 매개변수는 반드시 Optional로 지정되어야 한다.

95 데이터 구조와 프로시저 4.2 프로시저(Procedure) 프로시저 매개변수 정의 프로시저는 다음과 같이 호출할 수 있다.
Function MyFunction(MyStr As String, Optional MyArg1 As Integer = 8, _                 Optional MyArg2 As String = "NET") As Object . . . Dim objVal As Object 프로시저는 다음과 같이 호출할 수 있다. objVal = MyFunction("Visual", 2, "Basic")      '3개의 매개변수 모두 지원 objVal = MyFunction("Test", ,"Version")        '두 번째 매개변수 생략 objVal = MyFunction("Visual", 5)                '세 번째 매개변수 생략  '이름으로 매개변수 호출 objVal = MyFunction(MyArg1:=7, MyStr:="Visual")      

96 데이터 구조와 프로시저 4.2 프로시저(Procedure) 프로시저에 데이터를 전달하는 방법 값에 의한 호출방법(ByVal)
호출하는 프로시저에 있는 실 매개변수 값을 복사해서 호출된 프로시저에 보낸다. 참조에 의한 호출방법(ByRef) 실 매개변수의 주소를 전달하여 가 매개변수는 이 주소를 참조하여 실행한다. 데이터 전달방법 참조에 의한 호출 값에 의한 호출

97 예제 프로그램 : 매개변수 사용 예제 프로그램(매개변수)
데이터 구조와 프로시저 예제 프로그램 : 매개변수 사용 예제 프로그램(매개변수) 매개 변수 전달방식인 값에 의한 호출 방식(ByVal)과 참조에 의한 호출 방식(ByRef)을 사용하여 전달받은 매개 변수를 텍스트 박스에 출력하는 프로그램 1. 폼을 설계한다.

98 데이터 구조와 프로시저 2. 객체(폼, 컨트롤)의 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1
Text : 프로시저 매개변수 명령 버튼 Button1 (Name) : btnByVal Text : ByVal Button2 (Name) : btnByRef Text : ByRef 레이블 Label1 Text : A값: Label2 Text : B값: 텍스트박스 TextBox1 (Name) : txtAVal TextBox2 (Name) : txtBVal

99 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다. Public Class Form1
Sub ExSubPro1(ByVal x As Integer, ByVal y As Integer) x = 3 y = 4 End Sub Sub ExSubPro2(ByRef x As Integer, ByRef y As Integer) Private Sub btnByVal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnByVal.Click Dim a, b As Integer a = 5 b = 8 '서브 프로시저 호출 Call ExSubPro1(a, b) txtAVal.Text = a txtBVal.Text = b

100 데이터 구조와 프로시저 3. 코드 창을 열고, 코드(이벤트 프로시저)를 작성한다.
Private Sub btnByRef_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnByRef.Click Dim a, b As Integer a = 5 b = 8 '서브 프로시저 호출 Call ExSubPro2(a, b) txtAVal.Text = a txtBVal.Text = b End Sub End Class

101 데이터 구조와 프로시저 4. 프로그램을 실행한다. 5. 프로젝트를 저장한다.
메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “매개변수”로, 위치를 “C:\VB예제 \chapter04”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다.


Download ppt "4 장 데이터 구조와 프로시저 4.1 데이터 구조 4.2 프로시저 2018-11-16."

Similar presentations


Ads by Google