1. 변수


변수(Variable)란 무엇일까요? 이미 아시는 분들도, 모르시는 분들도 있겠지만 변수는 데이터를 담을수 있는 메모리 공간을 의미합니다. 데이터를 어느 한곳에 저장하여 이것을 참조할때 사용됩니다.


변수를 선언하는 방법은 아래와 같습니다:

Dim 변수명 As 데이터 형식


보시면 Dim 키워드를 사용해 변수를 선언할 수 있으며, 변수명은 말그대로 변수에 붙여지는 이름이며 데이터 형식은 변수에 담길 데이터의 형식을 말합니다.


아래를 보시면 데이터형을 간단하게 표로 정리하였습니다.



그런데 왜 데이터형이 필요할까요? 데이터 형을 사용하면 데이터를 쉽게 관리할수 있고 메모리 낭비를 줄일 수 있습니다. 예를 들어서 100이란 숫자를 담기위해 우리는 Byte형, Variant형 둘다 사용할 수 있습니다. 하지만 크기를 보면 각 1바이트, 16바이트로 메모리 공간의 차이가 나며 똑같은 데이터를 기억시키나 15바이트의 메모리 낭비가 발생합니다. 이 메모리 낭비를 줄이기 위해서는 적절한 데이터형을 선택하여 사용할 필요가 있습니다.


이제 직접 변수를 선언하여 간단한 프로그램을 만들어 봅시다.


2. 변수 선언


비주얼 베이직 6.0을 열어 프로젝트를 만들기 전에, 변수의 이름을 지정 시 규칙을 지켜야 합니다. 규칙은 다음과 같습니다.


1. 변수의 이름은 256자 이상 넘어갈 수 없습니다.

2. 영문, 숫자, 언더바(_)만 사용이 가능합니다.

3. 첫 문자에 숫자가 올 수 없습니다.

4. 키워드와 같은 이름을 사용해서는 안됩니다.

5. 대소문자를 구분하지 않습니다.

 

마지막으로, 변수는 사람들이 이해하기 쉽도록 지정해야 합니다. 이해하기 쉬운 변수명은 가독성을 높여주며, 변수의 용도를 쉽게 파악할 수 있어 많은 도움이 됩니다.


이제 폼 디자인은 제껴두고 코드 편집창으로 가봅시다.


그리고 코드를 작성해봅시다.


Private Sub Form_Load()

Dim A As Integer 'A라는 이름으로 정수형 변수 선언

Dim B As Integer 'B라는 이름으로 정수형 변수 선언

Dim Result As Integer 'Result라는 이름으로 정수형 변수 선언


A = 1000 'A에 1000 값을 대입시킴

B = 2471 'B에 2471 값을 대입시킴

Result = A + B 'A와 B를 합한 결과를 Result에 대입시킴


MsgBox "A + B = " & Result '메세지 박스로 A와 B를 합한 값인 Result의 값을 출력시키게 함

End Sub


이제 결과를 확인해보면 3471 이라는 결과를 확인하실 수 있습니다. 대충 감이 잡히시나요?

이번에는 이름과 나이를 변수에 대입하여 메세지 박스에 띄워봅시다.


Private Sub Form_Load()

Dim Name As String '문자열 변수 Name 선언

Dim Age As Integer


Name = "홍길동" '문자열 변수 Name에 홍길동이란 값 대입

Age = 17


MsgBox "제 이름은 " & Name & "이고, 나이는 " & Age & "살 입니다."

End Sub


그리고 F5를 눌러 결과를 확인해보면, "제 이름은 홍길동이고, 나이는 17살 입니다." 라는 메세지 박스가 등장할 것입니다. 예상대로 잘 출력이 됬다면 다음으로 넘어갑시다.


마지막으로 Double형을 사용하여 소수끼리 계산하는 프로그램을 만들어 봅시다.


Private Sub Form_Load()

Dim A As Double

Dim B As Double

Dim Result As Double


A = 212.4171

B = 6911.643

Result = A + B


MsgBox "A + B = " & Result

End Sub


이제 다시 결과를 확인해보시면 'A + B = 7124.0601'이라는 결과를 확인하실 수 있게됩니다.


갑자기 서로 다른 데이터형끼리의 합은 어떻게 결과가 나올지 궁금하지 않나요? B의 데이터형을 정수형(Integer)으로 A와 Result는 배정도 부동 소수점(Double)으로 두고 다시 F5를 누릅시다.


아까와는 결과가 다르죠? 아까의 답이 7124.0601이라면 이번에는 7124.4171이 나왔습니다.

어떤분들은 이미 눈치채셨을지 모르지만, B의 데이터형을 정수형으로 지정했고 6911.643이란 값을 대입했습니다.

여기서 우리가 알고있는 정수(Integer)형은 소수를 담기에 적합한 자료형이 아닙니다. 0.643의 데이터 손실이 일어나고, 6911이 B에 저장됩니다. 그러므로 212.4171과 6911을 더한 7424.4171이 나온 것입니다.


3. 형 변환 함수


프로그램을 작성하다 보면 강제 형변환이 필요한 경우가 가끔 있는데, 여기서 '형 변환 함수'를 사용하면 그 데이터의 데이터형이 강제로 변환됩니다. 형 변환 함수엔 어떤것이 있는지 살펴보겠습니다.


 함

 기능

함수 

기능 

 CBool

 Bool형으로 형 변환

 CSng

 Single형으로 형 변환

 CByte

 Byte형으로 형 변환

 CDbl

 Double형으로 형 변환

 CCur

 Currency형으로 형 변환

 CStr

 String형으로 형 변환

 CDate

 Date형으로 형 변환

 CVar

 Variant형으로 형 변환

 CInt

 Integer형으로 형 변환

 CVErr

 사용자 정의 오류번호 반환

 CLng

 Long형으로 형 변환

   


다 살펴보셨으면, 직접 우리가 형변환 함수를 사용해봅시다.


Private Sub Form_Load()

MsgBox "CInt(1111.44): " & CInt(1111.44) '1111.44 -> 1111

MsgBox "CInt(123.5678): " & CInt(123.5678) '123.5678 -> 124 형 변환시 반올림이 일어남

MsgBox "CInt(""abc""): " & CInt("abc") '오류 발생. 문자열을 정수로 형변환이 불가능합니다.

MsgBox "CInt(32768): " & CInt(32768) '오버플로우 발생. Integer형의 범위를 넘음.

End Sub


이 코드를 컴파일하시면 두개의 오류가 발생합니다.
4행: 형식이 일치하지 않습니다.
5행: 숫자가 너무 큽니다.

4행과 5행을 주석처리(') 한뒤 컴파일을 다시 해봅시다. 컴파일 하시면 1111과 124란 결과를 얻으실 수 있습니다.

4. 전역 변수, 지역 변수

전역 변수는 뭐고, 지역 변수는 또 뭘까요? 먼저 전역 변수(Global Variable)란 모든 프로시저에서 사용이 가능하며 프로그램이 종료될때까지 그 값이 계속 유지됩니다. 반면 지역 변수(Local Variable)는 선언한 프로시저에서만 사용이 가능하며 블록을 빠져나가거나 프로시저가 끝나면 자동으로 소멸합니다.

그렇다면 우리가 지금까지 본 변수들은 무엇에 속할까요? 모두 지역변수에 속하며 Dim이라는 키워드를 사용하여 지역변수를 선언할 수 있습니다. 그리고 전역 변수는 모듈 상단 선언부에 Public라는 키워드를 사용해 선언할 수 있습니다. 


모듈을 하나 만들고 모듈 상단 선언부에,


Public Number As Integer


그리고 다시 폼1의 코드 편집창으로 들어와 다음과 같은 코드를 작성합니다.


Private Sub Command1_Click()

Number = Number + 100

MsgBox "Number의 값은 " & Number & "입니다."

End Sub


F5를 눌러 컴파일 후 결과를 확인하면 Number의 값이 초기화 되지않고 계속 100씩 증가하는 것을 확인할 수 있습니다. 

전역 변수는 Private라는 키워드로도 선언할 수 있는데, Private로 선언하게 되면 모듈 외부에서는 접근할 수 없게 됩니다. 그렇지만 그 모듈의 모든 프로시저에서 그 변수에 접근할 수 있습니다.

굳이 전역변수를 사용하지 않고 값을 유지시키는 방법도 있습니다. 바로 Static 문으로 유지가 가능한데,

Private Sub Command1_Click()
Static Number As Integer 'Static 키워드 사용, 프로젝트가 끝날때까지 값을 유지
Number = Number + 100
MsgBox "Number의 값은 " & Number & "입니다."
End Sub

결과를 확인하여 보면 커맨드 박스를 클릭시 100씩 누적됩니다. 그렇지만 Static 문은 전역 변수와 다른게 있습니다. 선언되고 나면 다른 프로시저에서 사용이 불가능 하다는 것입니다. 만약에 Static이 아닌 Dim으로 선언했다면, 누적되지 않고 계속 100으로 고정되어 값이 표시되었을 것입니다. 

5. 연산자

비주얼 베이직에서는 비교 연산자, 논리 연산자, 산술 연산자, 연결 연산자 등이 사용되며 비교 연산자는 대소 관계를 비교할때 사용되며, 논리 연산자는 두개 이상의 조건을 판단할때, 산술 연산자는 일반적인 연산에 사용됩니다.

우선 산술 연산자부터 들어가보도록 하겠습니다. 산술 연산자에는 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(Mod) 등 여러개의 연산자가 존재합니다.


사용 예:

Private Sub Form_Load()

Dim A As Integer

Dim B As Integer


A = 2000

B = 10


MsgBox "A + B = " & A + B 'A와 B를 합한 값 2010이 나옴

MsgBox "A - B = " & A - B 'A에서 B를 뺀 값 1990이 나옴

MsgBox "A * B = " & A * B 'A와 B를 곱한 값 20000이 나옴

MsgBox "A / B = " & A / B 'A를 B로 나눈 값 200이 나옴

MsgBox "A Mod B = " & A Mod B 'A를 B로 나눈 나머지 값 0이 나옴

MsgBox "A \ B = " & A \ B '정수 A를 정수 B로 나눈 값 200이 나옴

MsgBox "A ^ B = " & A ^ B '1.024E+33 'A를 B번 곱함. 계산범위 초과.

End Sub


이번엔 비교 연산자에 대해서 알아보도록 하겠습니다. 비교 연산자는 앞에서 말했듯이 대소 관계를 비교할때 사용됩니다. 연산 결과는 참(True)과 거짓(False)로 나뉩니다.



사용 예:
Private Sub Form_Load()
Dim A As Integer
Dim B As Integer
Dim C As String
Dim D As String

A = 200
B = 10
C = "A"
D = "A"

MsgBox "A = B = " & (A = B) 'A와 B는 같지 않으므로 False를 반환
MsgBox "A <> B = " & (A <> B) 'A와 B가 서로 다르므로 True를 반환
MsgBox "A > B = " & (A > B) 'A가 B보다 더 크므로 True를 반환
MsgBox "A >= B = " & (A >= B) 'A가 B보다 크거나 같으므로 True를 반환
MsgBox "A < B = " & (A < B) 'B가 A보다 크지 않으므로 False를 반환
MsgBox "A <= B = " & (A <= B) 'B가 A보다 크거나 같지 않으므로 False를 반환
MsgBox "C Like D = " & (C Like D) 'C와 D가 같으므로 True를 반환
End Sub



사용 예:

Private Sub Form_Load()

Dim A As Integer

Dim B As Integer


A = 200

B = 10


MsgBox "A <> B And A > B = " & (A <> B And A > B) 'A와 B가 다르고 A가 B보다 크므로 True를 반환

MsgBox "Not A > B = " & (Not A > B) 'A가 B보다 크므로 True를 반환해야 하나 부정으로 False 반환 

MsgBox "A > B Or A < B = " & (A > B Or A < B) 'A가 B보다 크거나 B가 A보다 크면 True를 반환

MsgBox "A > B Xor A < B = " & (A > B Xor A < B) '두 조건식 중 하나만 참일 경우에 True를 반환

MsgBox "A > B Eqv A > B = " & (A > B Eqv A > B) '두 조건식이 같으면 True를 반환

End Sub


6. 상수

상수(Const)는 고정되어 있는 수로 변수와는 반대 개념이며, 비주얼 베이직에선 상수의 종류가 내장 상수와 사용자 정의 상수로 나뉩니다. 내장 상수는 vbCrLf, vbBlue, vbObjectError 등 상수명 앞에 vb가 붙습니다. 

내장 상수의 예:
Private Sub Form_Load()
Dim Number As Integer

Number = 5437 '5437는 실제 숫자를 나타내는 상수.
MsgBox "결과: " & vbCrLf & vbCrLf & "Number = " & Number 'vbCrLf는 내장 상수.
End Sub

사용자 정의 상수는 말그대로 사용자가 직접 정의하여 사용하는 함수로 Const 키워드를 사용하여 상수를 지정할 수 있습니다.

상수 지정 예:
Const 상수명 As 데이터형 = 값

사용 예:
Private Sub Form_Load()
Const Number As Integer = "5437"

Number = 5437 '여기서 에러가 발생함.
MsgBox "결과: " & vbCrLf & vbCrLf & "Number = " & Number
End Sub

이 코드를 컴파일 하면 상수를 지정할 수 없다는 오류가 표시될 것입니다. 상수로 지정된 데이터는 값의 변경이 불가능합니다. 4행을 주석처리하면 오류가 사라지고 정상적으로 컴파일 됩니다.