C Visual Basic 기본문법 - 데이터형과 상수, 변수

Cugain 2007.02.21 14:42 조회 수 : 583 추천:96

sitelink1  
sitelink2  
extra_vars5  
extra_vars6  
1.데이터형과 상수

?변수, 상수
쉽게 말해서 변하는 값이다...^^'
대부분의 프로그래밍 언어와 마찬가지로 Visual Basic 역시 값을 저장하기 위해 변수를 사용합니다. 변수는 이름(변수가 가지고 있는 값을 참조하기 위해 사용하는 단어)과 데이터 형식(변수가 저장할 수 있는 데이터의 종류를 결정한 것)을 가집니다. 관련 변수들의 인덱스 처리된 컬렉션들을 저장하기 위해 배열을 사용할 수도 있습니다.

상수 역시 값을 저장하지만 상수라는 이름이 의미하듯이 이 값은 응용 프로그램이 종료될 때까지 항상 일정합니다. 상수를 사용하면 숫자 대신 의미있는 이름을 사용하므로 코드를 한결 쉽게 이해할 수 있습니다. Visual Basic에는 내부 상수들이 많이 있으나 새로운 상수를 만들 수도 있습니다.

?선언

Dim[ | Public | Static] 변수명 [ As 데이터형 ]     (링크를 누르면 비베에서 제공하는 데이터형들을 볼 수 있슴다.)

변수를 선언하지 않고도 사용할 수 있다.
이때 데이터형은 Variant가 된다.
변수를 선언하지 않고 사용하다보면 왜 변수를 선언하는게 좋은지 금방 알 수 있다. 변수를 선언해도 이름을 대충지어서 사용하면 나중에 머리에 쥐난다.(주석문을 사용하던지 아니면 뭔가 규칙을 가지고 정해야 한다.)
참고) 주석문은 컴파일에는 영향을 주지않는 쉽게말해서 설명문이다. ' (어포스트로피) 를 사용하면 해당 줄은 주석처리된다.
변수 선언을 의무화시키기 위해서는 코드창의 맨위에 아래 그림처럼 Option Explicit 라고 써주면된다.
이렇게 하면 선언하지 않은 변수는 사용될 수 없다
.

매번 option explicit 라고 써주고 코딩 시작하는것도 쉬운일은(?) 아닌듯...
도구메뉴에서 옵션을 선택하면 변수선언의무화라는 체크박스가 있다. 여기에 체크하면 이런 수고를 그만해도 된다.
위에서처럼 코드창의 맨위(일반 선언부)에 선언된 변수를 전역변수라고 한다. 전역변수는 현재 코드창안에서는 어디서든지 사용가능하다. 하지만 프로시저안에서 선언된 변수는 그안에서만 사용할 수 있다.(지역변수)
모듈에서 선언한 변수는 프로그램어디에서든 사용가능하다.  메뉴에 프로젝트를 선택하면 모듈추가라는 항목이 보일것이다.  모듈에 변수를 선언할때에는 Dim 이아니고 Public를 사용해서 선언해야 한다.

?선언방법
위에 그림에서처럼 "Dim 변수명 As 데이터형"  이런방식으로 선언하면 된다.
비베5.0(한글판)에서부터 한글변수를 사용할 수 있다. 물론 컨트롤,함수,이벤트이름까지 한글로 가능하다고 한다.
변수이름은 첫글자를 소문자로 사용하는게 좋다고 합니다. 확실히 다른 함수나 프로시저 등과의 구분을 위해서 첫글자를 소문자로 정하는게 좋은거 같네요.
     처음에 버릇을 잘 들여야지, 습관이 되서 그런지 자꾸 까먹습니다. 첫글자는 소문자,.. 첫글자는 소문자,...

비베를 처음하면서 가장 많이 사용하는 데이터형이 integer하고 string 인거 같다.
integer는 숫자, string는 문자형 데이터형식이다.
참고> integer데이터형에는 -32,768 ~ 32,767 까지의 숫자만 사용가능하다.
32,768 이라는 값을 integer로 선언한 변수에 저장하려고 하면 에러메시지를 만나게된다.
하지만 변수에 들어갈 값이 항상 1000을 못 넘는다고 가정할 때 이런 변수를 위해서 long형식이나 variant 형식등을 사용하는 것은 자원의 낭비이다.


? Private , Static , Dim, Public 이런건 다 뭐야?

Option Explicit
Dim abC As Integer
폼의 선언부분에서 선언된 abC 라는 변수는 현재 폼의 코드 어디에서나 사용가능하다.
다른 폼의 코드에서는 사용할 수 없다.
모듈을 하나 추가하고 거기에 선언.
Option Explicit
Public abC As Integer
모듈에서 Public 로 선언된 abC 라는 변수는 현재 프로젝트 어디에서나 사용가능하다.
폼을 두개 만들어서 두곳에서 모두 abC 변수를 사용해보면 알쥐.
Private Sub Command1_Click()
Dim abC As Integer
abC = abC+ 5
Text1.Text = abC
End Sub
abC 라는 변수는 현재 Sub(서브) 프로시저를 벗어나면 사용될 수 없다.
현재 프로시저가 종료되면 abC 라는 변수에 저장된 값은 사라진다.
명령버튼을 누르면 항상 5가 표시된다.
Private Sub Command1_Click()
Static abC As Integer
abC = abC + 5
Text1.Text = abC
End Sub
abC 라는 변수는 현재 Sub(서브) 프로시저를 벗어나면 사용될 수 없다.
현재 프로시저가 종료해도  abC 라는 변수에 저장된 값은 사라지지 않는다.
명령버튼을 누르면 값이 계속 5씩 증가한다.
Static Sub Command1_Click()
dim abC As Integer
abC = abC + 5
Text1.Text = abC
End Sub
Sub  Procedure(프로시저) 앞에 Static 을 사용하면 해당 프로시저안에 변수들은 모두 Static 로 선언된것과 동일하게 된다.

상수선언

상수 : 변하지 않는 값이다. 변수에는 다른 값을 넣어서 사용할 수 있지만, 상수는 선언된 값만을 계속 사용해야 한다. 다른말로  left value 가 될 수 없다고도 한다.
left value = right value    이건 다시말하면 aaa 변수가 있다고할때 이 변수의 사용은 aaa = "접니다"  또는 Text1.Text = aaa 이런식으로 식의 왼쪽과 오른쪽 모두에 사용될 수 있다. 하지만 상수에는 선언시외에는 값을 지정할 수 없기 때문에 aaa 상수가 있다면  aaa = "접니다" 로 사용될 수 없는 것이다.

[Public | private ] const 상수명 [As 데이터형] = 값

[]는 생략가능하다는 표시이다.
어떤 소스들을 보면 1,10 등의 의미를 모를 숫자가 사용된것이 있는데 이런것들은 상수로 정의되엉 있는것들이다. 1이라는 값은 정의된 다른값으로 치환되어서 사용된다고 보면 된다.
MsgBox 에 사용된 상수들을 보면 vbOKOnly 라는 상수는 0이라는 값으로도 사용할 수 있도록 내부상수가 정의되어 있다. 나중에 메시지박스의 사용부분을 보면 나온다.
비베에서 vbCrLf 또는 vbYes 등은 비베에서 사용하는 상수이다. 이런 것들은 어떤 특정한 값을 가지고 있는데 이걸 쉽게 사용하기위해 내부적으로 상수로 선언되어 있어서 쉽게 사용할 수 있는것이다.  아스키코드 65 는 키보드의 A 키를 의미하는데 우리는 VbKeyA 라는 상수를 대신해서 사용할 수 있는 것이다.

사용예제 : sin30도의 값을 구하고자 합니다. (sin 30 도는 0.5 임을 수학시간에 배웠을것이라 여겨진다.)

각도를 라디안으로 환산하려면 각도에 pi/180를 곱합니다.
수학에서 π(파이) 는 3.14159265358979
Const Pi = 3.14159265358979
Text1.Text = Sin(30 * (Pi / 180))
코드에서 파이 Pi 값을 많이 사용해야 한다면 아주 유용하겠죠.

?사용자정의형(type 형)

[Private | public] type 사용자정의형 이름
......
구성요소 as 데이터형
.....
end type

묘둘에서 선언한다. (모듈에서 선언된 변수등은 프로그램어디에서든지 사용할 수 있다.)
예제.(책에 있는 예제그대로...)

Type 소프트동회원
        ID as string * 8
        이름 as string * 20
        나이 as integer
End Type


사용.
Sub CreateRecord()
dim 기존회원 as 소프트동회원  
'기존회원이라는 변수를 위에서 만든 데이터형으로 선언했다.
'기존회원이라는 변수는 지역변수로 선언되었기때문에 현재 sub안에서만 사용가능하다.
기존회원.ID = "crack90"
기존회원.이름 = "박성완"
기존회원.나이 = 28
End Sub

좋은거 같은데 어디에 써먹어야할지는 잘 모르겠다...