티스토리 뷰



앞서 작성한 VB.Net 언어 이해하기에서 VB.Net 언어 구성 요소의 하나로 리터럴을 설명하면서 다양한 데이터 타입을 언급했고 변수 뒤에 특수 문자를 붙여 데이터 타입을 지정하는 방법을 다루었습니다. 데이터 타입 또는 자료형은 특정한 저장 장소에 있는 정보를 어떠한 형태로 인식할 것인가를 다루는 것으로 컴퓨터에 저장되는 정보는 0과 1이라는 디지털 형태로 보관하는 특성상 그 값을 문자로 인식할지 아니면 숫자로 인식할지, 숫자 중에서 정수 인식할지 아니면 실수로 인식할 지에 따라 다양한 해석이 있을 수 있습니다. 다음은 VB.Net의 데이터형을 정리한 것으로 저장소의 크기와 값의 범위를 확인해 둘 필요가 있습니다.

  • Boolean : True , False
  • Byte : 0~255(1 byte) 메모리의 내용을 데이터 형과 무관하게 그 값을 처리할 때 사용합니다.
  • SByte : -128~127(1 byte) Byte 내용을 부호를 감안하여 처리
  • Char : 0~65535(2 byte) 문자
  • String : 가변 길이로 유니코드 문자열 저장
  • Short : -32,768~32,767(2 byte) 정수형
  • UShort : 0~65,535(2 byte) 부호 없는 정수형
  • Integer : -2,147,483,648~2,147,483,647(4 byte) 정수형
  • UInteger : 0~4,294,967,295(4 byte) 부호 없는 정수형
  • Long : -9,223,372,036,854,775,808~9,223,372,036,854,775,807(8 byte) 정수형
  • ULong : 0~18,446,744,073,709,551,615(8 byte) 부호 없는 정수형
  • Single : -3.4028235E+38~3.4028235E+38(4 byte) 단정도 부동 소숫점
  • Double : -1.79769313486231570E+308~1.79769313486231570E+308(8 byte) 배정도 부동 소숫점
  • Decimal : 0~+/-79,228,162,514,264,337,593,543,950,335(16 byte) 십진 실수
  • Date : 1/1/1 00:00:00~9999/12/31 11:59:59(8 byte)
  • Object : 모든 데이터 형식 수용(32비트 운영체제에서는 4byte, 64비트 운영체제는 8byte)

위에서 언급한 데이터 형식은 대부분 .Net의 데이터 형식명과 일치하고 차이점은 Short, Integer, Long이 Int16, Int32, Int64로 바뀌고, Date과 DateTime으로 바뀌는 정도 입니다.


위에서 언급한 기본 타입들은 프로그램 수행 과정에서 연산 대상으로 상호 섞이는 경우에는 형 변환이 필요합니다. 예를 들어 숫자 값을 스트링으로 변환하거나 문자열 자료를 정수형이나 실수형으로 변환하는 경우, 숫자의 경우에도 소숫점을 가진 부동소숫점 자료를 정수형 변수에 저장하는 경우 등입니다. VB에서는 타입이 다르더라도 숫자 항목 간에는 암시적으로 자동 형변환을 지원해서 정수 변수에 소숫점을 입력하거나 부호가 있는 변수에 부호 없는 정수값을 입력하는 등의 대입문도 가능합니다. 이러한 암시적 형변환에는 일부 데이터의 소실이 있을 수 있습니다. 실수값 10.25를 정수형 변수에 암시적 형변환으로 입력하면 0.25는 소실된다는 의미입니다. 암시적 형변환으로 인한 소실을 막으면서 혹시 모를 프로그래머의 실수를 예방하려면 클래스나 모듈 바깥에 "Option Strict On" 문장을 기술합니다. "Option Strict On"을 프로그램 상단에 적어두면 이런 암시적 변환을 도구에서 막아줍니다.


암시적 형변환보다 널리 사용것이 명시적 형변환입니다. 명시적 형변환은 VB에서 제공하는 다양한 함수나 메소드를 활용할 수 있습니다. 많이 사용하는 형변환 함수는 아래의 예제 코드와 같은 "Ctype(식, 타입)"으로 데이터 타입에는 VB의 기본형외에도 다양한 클래스를 사용할 수 있습니다.

Private Sub View_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
                                           Handles RightView.MouseClick, LeftView.MouseClick
    If e.Button = Windows.Forms.MouseButtons.Right Then
        ClickedRightTreeView = (CType(sender, Control).Name = "RightView")
        If ClickedRightTreeView Then
            RightView.SelectedNode = RightView.GetNodeAt(e.Location)
        Else
            LeftView.SelectedNode = LeftView.GetNodeAt(e.Location)
        End If
    End If
End Sub

CType() 함수외에 가장 많이 사용하는 형변환 함수는 숫자를 문자열로 변환하는 Str(), Format()과 거꾸로 문자열을 숫자로 변환하는 Val()입니다. 특정한 VB 기본 데이터형으로 변환할 경우에는 CBool(), CByte(), CChar(), CStr(), CShort(), CInt(), CLng(), CObj(), CSng(), CDbl(), CDec(), CDate() 함수를 사용합니다. 특정한 문자의 코드값을 알고 싶을 때는 Asc()를 사용하고 거꾸로 코드값에 해당하는 문자는 Chr()함수를 사용합니다. 


Public Const Scheduling As String = "Scheduling"
Public Const SchedulingSettingsCount As Integer = 5

Enum SyncMethod
    LRMirror = 0
    LRIncremental = 1
    BiIncremental = 2
End Enum

Public Const DefaultMethod As Integer = CInt(SyncMethod.LRIncremental)

위의 코드를 보면 Public은 모듈이나 네임 스페이스의 영향 범위를(Scope) 나타내는 것으로 VB.Net에서는 블럭 범위<함수 범위<모듈(클래스, 구조체 포함) 범위<네임 스페이스 범위로 관리하는데 위의 코드는 특정 모듈에서 변수를 Public 또는 Friend로 범위를 지정하여 동일한 네임스페이스의 어떤 모듈, 어떤 함수에서도 참조할 수 있도록 한것입니다. Public 대신 Private로 범위를 지정하거나 범위를 지정하지 않으면 해당 변수는 해당 모듈에서만 참조할 수 있습니다. 또한 특정 블럭(If, Select, For, While구문 등의 블럭)이나 함수에서 선언한 변수는 해당 블럭이나 함수에서만 참조할 수 있고 그 외부에서는 참조할 수 없습니다(지역변수). 클래스의 경우 Protected도 사용할 수 있는데 Protected는 변수나 함수를 선언한 클래스와 해당 클래스를 상속한 하위 클래스까지만 접근을 허용하는 Private 보다는 약간 더 영향 범위를 넓힌 것입니다.


위 예제 코드에서 변수 선언에 주목할 한가지 특성은 Scheduling, SchedulingSettingsCount 변수 선언에 사용한 Const 구문입니다. Const 문을 변수 선언 앞에 붙여서 이 변수를 "상수"로 취급하여 프로그램에서 이 변수를 참조할 수는 있지만 변경은 불가함을 지시할 수 있습니다. Const문을 통한 상수 정의에 더불어 Enum 구문을 활용한 열거형 정의는 여러개의 상수 정의를 대체할 수 있는 것으로 "Enum 열거형변수......End Enum"의 구조로 정의 합니다. 내부의 변수는 정수형만 올 수 있으며 초기값을 입력하지 않은 변수는 직전 변수 값에 +1 값을 자동 설정합니다. 위의 예에서 LRIncremental, BiIncremental 변수는 초기값을 입력하지 않아도 1과 2로 설정됩니다.


변수 선언에서 미지막으로 다룰 내용은 배열(Array)입니다. 배열은 데이터형이 동일한 원소들을 모아 놓은 것으로 VB.Net에서의 배열 선언 및 사용은 변수명 옆에 괄호()를 붙임으로 가능합니다. 

ConfigLine = FileReader.ReadLine()
Dim Param() As String = ConfigLine.Split(":".ToCharArray, 2)
If Param.Length < 2 Then
    Interaction.ShowMsg(Translation.TranslateFormat("\INVALID_SETTING", ConfigLine))
    ProgramConfig.LogAppEvent("Invalid setting for profile '" & ProfileName & "': " & ConfigLine)
ElseIf Not Configuration.ContainsKey(Param(0)) Then
    Configuration.Add(Param(0), Param(1))
End If

위의 예제를 보면 Param을 문자열 배열로 선언하여 특정 문자로 문자열을 나누어 배열로 리턴하는 Split()함수의 결과를 받고 있습니다. 배열 선언시 괄호 안에는 마지막 첨자(인덱스)를 지정하는데 예를 들어 "Dim x(10) As Integer"로 선언한다면 마지막 첨자가 10이라는 의미로 첫 첨자가 0이므로 배열의 크기는 11이 됩니다. 배열의 크기는 위의 코드처럼 배열변수.Length 속성을 사용할 수도 있습니다. 배열 선언이 C언어의 경우에는 배열 원소의 개수를 적지만 VB에서는 마지막 첨자로 원소의 개수로는 +1이 된다는 점에 유의하고 VB.Net에서는 Redim 구문으로 배열의 크기를 조정할 수도 있음을 기억해야 합니다. 위의 코드에서 선언한 Param()의 경우에도 실행 과정에서 "Redim Param(100)"과 같이 크기를 재조정할 수 있습니다. 단, 이 구문을 사용하면 기존 데이터가 지워지는 문제가 있습니다. 기존 데이터를 보존 하면서 배열 크기를 조정하고 싶을 경우에는 Preserve문을 사용하여 "Redim Preserve Param(100)"로 기술하면 기존 데이터를 보존하면서 배열 크기를 조정할 수 있습니다.


다차원 배열은 "Dim x(2,9) As Integer"와 같이 괄호 안에 콤마(,)로 구분하여 선언할 수 있습니다. 배열도 초기값을 설정할 수 있으며 중괄호{}를 사용하여 "Dim y(,) As Integer = { {1,2,3}, {4,5,6}}"와 같이 입력할 수 있습니다. 아래의 그림은 배열 x(2,9)를 그림으로 나타낸 것입니다.



※ 코드 참조 : http://synchronicity.sourceforge.net

'프로그래밍' 카테고리의 다른 글

VB.Net 함수와 프로시저  (0) 2015.04.01
VB.Net 연산자 살펴보기  (0) 2015.03.17
VB.Net 데이터 타입과 형 변환, 영향 범위  (0) 2015.03.17
VB.Net 흐름 제어(Flow Control) 익히기  (0) 2015.03.16
VB 문자열 다루기  (0) 2015.03.10
VB.Net 언어 이해하기  (0) 2015.03.09

댓글
댓글쓰기 폼