티스토리 뷰

프로그래밍

VB.Net 언어 이해하기

야라바 2015. 3. 9. 16:10


지금까지는 간단하게 프로그램을 만들어보고 실행해 보았으며 비주얼 스튜디오의 다양한 도구를 사용하는 방법을 다루었다면 이제는 본격적으로 VB .Net 언어를 만날 차례입니다.


VB가 컴퓨터와 사람이 대화하기 위한 프로그래밍 언어라고 한다면 한국어, 중국어, 영어와 같이 컴퓨터와 관계없이 사람간의 대화에 사용하는 언어를 자연어(Natural language)라고 합니다. 자연어의 경우에는 민족과 습관 그리고 감정과 상황에 따라 약간의 차이가 있어도 어느 정도의 소통 능력만 있으면 상호 대화가 가능합니다. 심지어 언어를 모르는 상태에서 몸으로만 표현해서 의사를 전달할 수도 있으니 자연어의 범위는 상당히 넓다고 하겠습니다. 그렇지만, 자연어의 경우에도 원활한 대화를 위해서는 나름의 규칙인 문법에 맞도록 언어를 사용해야 합니다. 요즘처럼 말을 줄여쓰거나 하면 상대방이 못 알아듣는 경우가 생기는 것도 잘못 사용한 언어의 사례가 아닌가 싶습니다. 


프로그래밍 언어의 경우에는 컴퓨터(실제로는 컴파일러)가 이해할 수 있는 언어의 한계가 있기 때문에 엄격한 언어 규칙을 가지고 있습니다. 프로그래밍 언어의 문법(규칙)은 자연어처럼 자연스럽게 모든 것을 표현하지 못한다는 단점으로 보일 수도 있지만, 아주 단순하기 때문에 몇가지 규칙을 외울 필요 없이 기본 문법 아래서 필요한 기능을 지시하면 됩니다. 특히 VB.Net이나 C#.Net의 경우 다양한 기능을 이미 .Net 프레임워크에서 준비하고 있기 때문에 VB나 C#의 언어를 가지고 이들 기능을 레고 블럭을 조립하듯이 "필요에 따라 적절히 배치한다"는 생각으로 프로그래밍 하면 됩니다.




* VB 언어의 구성 요소

VB 언어의 중요한 특징은 "행 단위로 문장을 기술한다" 입니다. C와 같은 다른 언어의 경우에는 많은 경우 세미콜론 (;)을 한 문장의 끝으로 인식하지만 VB는 눈에 보이는 한 줄(행, Line) 그대로가 하나의 문장이라는 의미입니다. 편집기 내부적으로는 눈에 보이지 않는 문자를 행 구분자로 사용하여 해당 문자를 만날 때 줄 나누기를 합니다. 윈도우에서는 이 행 구분자로 CR(\n, 0x0d) LF(\r, 0x0a)를 사용합니다.


한 행에 한 문장을 기술하는 것이 일반적이지만 다음의 예와 같이 콜론(:)을 문장 사이에 삽입하여 한 줄에 여러 문장을 기술할 수도 있습니다.

Dim vString As String = "Hello Tester" : MsgBox(vString)

또한 반대로 한 문장이 긴 경우 여러 줄에 걸쳐서 한 문장을 기술할 수 있는데 아래의 예와 같이 명시적으로 공백+밑줄(_)+행구분자로 한 행이 이어짐을 표시할 수 있고, 쉼표나 괄호 다음에는 명시적으로 행 이어짐을 표시하지 않고도 암묵적으로 행 이어짐을 사용할 수도 있습니다.


Public Function GetUsername(ByVal username As String,
                            ByVal delimiter As Char,
                            ByVal position As Integer) As String

    Return username.Split(delimiter)(position)
End Function

Dim username = GetUsername(
    Security.Principal.WindowsIdentity.GetCurrent().Name,
    CChar("\"),
    1
  )
※ 출처 : MSDN 예제


영어나 한국어와 같은 자연어의 가장 기본은 알파벳인 것 처럼 VB언어 가장 기본에는 사용할 수 문자들이 있습니다. 영어 알파벳과 숫자 그리고 일부 특수문자를 사용할 수 있는데 이들 문자를 기반으로 VB언어를 이루는 가장 기본적인 문법 요소인 토큰(Token)을 구성합니다. VB의 가장 기본적인 요소인 토큰에는 다음과 같은 종류가 있습니다.


  • Identifier(식별자) : 영문자 또는 밑줄(_)로 시작하고 영문자, 숫자, 밑줄로 구성합니다. 대소문자를 가리지 않습니다.
    정보를 보관하는 곳을 지칭하는 이름의 역할을 합니다. 위의 예제에서 username, delimeter, position 등은 식별자로 사용된 것입니다.

  • Keyword(키워드) : 예약어(reserved word)라고도 하며, 시스템에 내장되어 특별한 용도로 사용합니다. 위의 예제에서는 Public, Function, End, Dim등을 예로 들 수 있습니다. VB의 키워드는 https://msdn.microsoft.com/en-us/library/dd409611(v=vs.110).aspx 에서 자세하게 확인할 수 있습니다.

  • Literal(리터럴) : 상수(Constant)라고 부리기도 합니다. 논리, 정수, 부동소숫점, 문자열, 문자, 일자 리터럴 등이 있습니다. 정해진 값, 변하지 않는 값으로 정리할 수 있습니다.
    - 논리 리터럴 : TrueFalse로 표현 합니다. Boolean 타입입니다.
    - 정수 리터럴 : 10진, 8진 16진 표현이 있으며, 8진수는 0-7, 10진수는 0-9, 16진수는 0-9와 A-F를 사용하여 표현합니다. &H0F0F 나 &O453와 같이 숫자앞에 &H 또는 &O를 붙여 16진수 또는 8진수 임을 나타냅니다.
    정수 리터럴은 저장 장소의 크기에 따라 Short(16비트), Integer(32비트), Long(64비트) 타입으로 숫자를 표현할 수 있는데 각각 숫자 뒤에 345S, 9223372036854L 처럼 S, I, L을 붙여서 리터럴의 타입을 명시적으로 표현할 수 있습니다. 또한 각 정수형 타입은 부호를 저장할지 아닐지에 따라 숫자 표현 범위가 달라지는데 US, UI, UL처럼 숫자 뒤에 붙여서 부호 표현 여부를 지정할 수 있습니다. 정수 각 타입의 숫자 표현 범위는 다음과 같습니다.
    Short : -32,768 ~ 32,767                            UShort : 0 ~ 65,535
    Integer : -2,147,483,648 ~ 2,147,483,647            UInteger :  0 ~ 4,294,967,295
    Long : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807    ULong :  0 ~ 18,446,744,073,709,551,615 
    - 부동소숫점 리터럴 : 숫자 및 소숫점으로 표현하며 타입에 따라 뒤에 F(단정도, Single, 4바이트), R(배정도, Double, 8바이트), D(십진표현, Decimal, 16바이트)를 각각 붙입니다. 실제적인 소숫점의 위치는 지수부 표현에 따라 달라 질 수 있으며 E+부호+숫자 형태로 표현합니다. 예를 들어 단정도 부동소숫점 Single 타입의 리터럴의 표현 범위는 -3.4028235E+38 ~ -1.401298E-45입니다. 엄밀히 말하면 Decimal은 정밀도가 유동적인 부동소숫점 표현은 아니면 속도가 느려질수 있으므로 사용에 주의합니다.
    - 문자열 리터럴 : " " 내부에 유니코드 문자열을 기술합니다. String 타입입니다.
    - 문자 리터럴 : 하나의 유니코드 문자를 표현하는 Char 타입으로
    "문자"C의 형태로 기술합니다. 내부적으로는 유니코드 문자 2바이트를 저장합니다.
    - 일자 리터럴 : ##에 일자 및 시간을 표현하는 Date 타입으로 일자는 월/일/년 또는 월-일-년 형태로 모두 표현할 수 있고 시간은 시:분:초 AM의 형태로 시 PM 형태로 단순하게 기술할 수도 있습니다. #3/9/2015 12:00 PM#.


  • Separator(구분자) : 토큰을 구별해 주는 문법 요소로 ( ) { } ! # , . : ? 등을 사용합니다.

  • Operator(연산자) : 식별자와 리터럴 등을 대상으로 연산을 지시하는 문법 요소로 & * + - / \ ^ < = > 등을 사용합니다. 연산자는 특정 대상을 가지고 연산을 수행하는데 연산 대상을 한개만 취하는 단항 연산자(Unary Operator)와 연산 대상 2개를 취하는 이항 연산자(Binary Operator)가 있습니다.
    단항 연산자에는 +, -, Not 3가지가 있습니다.
    이항 연산자에는 +, -, *, /, \, Mod, ^, =, <>, <, >, <=, >=, &, And, Or, Xor, AndAlso, OrElse, <<, >> 등이 있으며 자세한 내용은 추후에 다루도록 하겠습니다.


* VB 언어의 문장

앞서 VB 언어를 구성하는 기본적인 문법 요소인 토큰을 다루었는데 이 토큰들이 적절하게 조합되어 문장을 이루고 문장들이 통합되어 하나의 프로그램으로 만들어지는 것입니다.


VB의 문장은 크게 선언문과 실행문으로 나뉘고 부가적으로 주석문을 언급할 수 있습니다. 주석문은 프로그램 실행에는 아무런 영향을 주지 못하며 코드 내에서 참고 자료나 설명을 남길 때 사용합니다. VB에서 주석은 REM이나 '를 앞에 붙여서 표현합니다. 행 맨 앞에 REM이나 '가 있으면 행 전체를 주석 처리하고 선언문이나 실행문 다음에 REM 이나 '가 오면 그 이후만 주석 처리합니다. 아래의 예에서는 'Calculate new salary부분으로 프로그램 실행과는 전혀 연관성이 없습니다.


Public Sub calcSalary(ByVal days As Integer)
    Const base As Integer = 10500
    Dim rstSalary As Integer
    ' Calculate new salary.
    rstSalary = base * days
End Sub


선언문은 변수나 상수 또는 함수등을 본격적인 사용이전에 그 데이터 타입을 정의하고 초기값을 설정하는데 사용하는 문장입니다. 위의 예제를 보면 calcSalary라는 함수가 정의되었고 그 내부에 base라는 상수와 rstSalary라는 변수를 정수형으로 선언 했음을 확인할 수 있습니다. 함수 정의에 대해서는 추후에 다루기로 하고 일반적인 변수의 선언은 "Dim 변수명 또는 변수  리스트 As 타입 = 초기값"의 형태로 사용할 수 있습니다. As 타입의 부분을 생략할 수도 있는데 이런 경우에는 이어서 기술하는 초기값의 리터럴 타입으로 컴파일러가 조정합니다. 예를 들어 위의 예제에서 "Dim rstSalary = 1.05F"로 기술했다면 rstSalary 변수는 단정도 부동소숫점으로 자동 취급됩니다. Dim 이후의 변수 선언에서 서로 다른 타입의 여러 변수를 콤마(,)로 구분해서 연속적으로 선언할 수 있습니다. "Dim i, j, k As Integer, l, m As Long, x, y As Single" 처럼 여러 변수에 대하여 서로 다른 타입으로 선언하면서 여러 변수를 다룰 수 있습니다.


선언문에서 지정할 수 있는 타입은 위에서 언급한 리터털의 타입을 참조하면 됩니다. 위에서 언급되지 않은 타입 중에 Byte가 있는데 0~255의 부호없는 1바이트의 자료를 보관 할 수 있는 데이터 타입입니다. Object와 사용자 정의 타입 등은 추후에 다루게 되겠습니다. 선언문에서 초기값을 설정하지 않으면 값은 0으로 설정됩니다. Boolean의 경우에는 False이고 일자는 #1/1/1 12:00 AM#입니다.


변수 선언 방식은 위에서 언급한 "Dim 변수명 As 타입" 형태와 데이터 타입 없이 "Dim 변수명"만 선언 했다가 첫 대입문에서 대입되어 지는 값의 타입에 따라 자동으로 데이터 타입을 인식하는 형태와 함께 변수명에 형선언 문자를 붙이는 방식으로 데이터 형을 지정할 수도 있습니다. 


    Sub Main()
        Dim objTest1$

        objTest1 = "test"
        Console.WriteLine(objTest1)
        Console.ReadLine()
    End Sub

위의 예제에서 objTest1이란 변수 뒤에 $를 붙임으로써 문자열 데이터 타입임을 지정했는데 이러한 형 선언 문자에는 다음과 같은 것들이 있습니다.

  • % : Integer 정수형(4 byte)
  • & : Long 정수형(8 byte)
  • @ : Decimal 십진 고정소숫점
  • ! : Single 단정도 부동 소숫점
  • # : Double 배정도 부동 소숫점
  • $ : String 문자열


실행문은 실제 프로그램의 실행에 영향을 미치는 것으로 조건 분기나 반복문, 함수 호출, 대입 연산등의 문장을 예로 들 수 있으며 위의 예제에서는 "rstSalary = base * days" 대입문이 실행문입니다. 실행문 및 선언문의 설명에서 자주 언급하는 용어가 있는 바로 식(Expressions)입니다. 식은 완전한 하나의 선언문 또는 실행문은 아니지만 문장의 요소로서 어떤 값을 산출하는 문법적 요소를 의미합니다. 예를 들어 선언문의 초기값이나 대입문의 r-value(= 연산자 우측)에는 문법적으로는 식이 올 수 있습니다. 그래서 "Dim rstSalary As Integer = 100" 도 가능하고 "Dim rstSalary As Integer = 100*3600" 과 같은 문장도 가능합니다. 즉, 100과 같은 단일 리터럴도 값을 산출하는 식(Expressions)이고 100*3600과 같이 리터럴과 연산자를 조합하여 값을 산출하는 것도 식(Expressions)입니다.


* 빠른 이해를 위한 실습

위에서 언급한 데이터 타입과 리터럴 기입 방법 등은 실제로 코딩해서 실행해 보아야 이해가 잘 되고 기억에 오래 남습니다. VB .Net 첫 콘솔 응용 프로그램만들기글을 참조하시고 아래의 코드를 참조하셔서 실제로 프로그램을 입력해보고 실행하면서 선언문과 대입문 등을 간단히 실습해 보면 많은 도움이 될 수 있습니다.


Module Module1

    Sub Main()
        Dim objTest1 As Boolean

        Console.WriteLine(objTest1)
        Console.ReadLine()
    End Sub

End Module





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

VB.Net 흐름 제어(Flow Control) 익히기  (0) 2015.03.16
VB 문자열 다루기  (0) 2015.03.10
VB.Net 언어 이해하기  (0) 2015.03.09
VB .Net 핫키와 IntelliSense  (0) 2015.02.10
VB .Net 도구 사용법(2)  (0) 2015.02.09
VB .Net 도구 사용법(1)  (0) 2015.02.07

댓글
댓글쓰기 폼