반응형

오늘 이시간부터는 본격적으로 프로그래밍에 필요한 사항들을 하나하나, 조목조목? 허접하게 짚어나가도록 하겠습니다.

먼저 변수에 대한 내용부터 시작하겠습니다.
변수란 무엇일까요?
쉽게 말하자면 프로그래밍에서 쓰이는 가지가지의 값들을 저장하는 공간이라고 생각하시면 될 듯합니다.

그런 변수는 Dim 문을 사용해서 선언을 할 수가 있습니다.

Dim woojja

이렇게 선언을 했을때 프로그램은 자연스레 woojja 라는 변수를 나중에 사용할 것이라고 알게 되고 변수의 크기만큼의 자리를 메모리에 준비를 하지요.
선언을 할때 다른 키워드를 사용하는 경우 Dim을 사용하지 않을 수도 있고
As 절을 사용함으로써 변수의 데이터 형식을 지정할 수 있습니다.

As 절을 사용하지 않는다면 Object 형으로 데이터 형식을 지정하게 되고요.

변수의 초기값을 지정하지 않으면 변수가 선언되는 코드가 처음 실행될때 해당 변수의 형식에 맞는 기본 초기값을 할당하게 됩니다.

Public Static newCustomer As Customer

만약 변수의 데이터 형식이 참조형식(추후에 다시 설명)일 경우 초기값은 Nothing 이 되며 As 절에 New 키워드를 포함함으로써 인스턴스를 만들수 있습니다.

Public Static newCustomer As New Customer


변수의 Scope
변수는 액세스 수준에 따라서 변수의 범위가 영향을 줄수 있습니다.

조건문, Loop 같이 블록 또는 프로시져 수준에서/모듈 또는 네임스페이스 수준의 범위 에서 참조할 수 있도록 할 수 있습니다.

첫번째 블락 사이일때는 변수 선언을 For문의경우 For와 Next 사이에 변수를 선언하고
두번째 sub나 Function 프로시져 내에 변수를 선언합니다. 이런 경우는 그 프로시져 내에서, 프로시져 내의 블락 내에서 참조가능하겠지요.
세번째 모듈이라 함은 클래스나 구조체를 말하며 그 내부에 선언한 변수는 모듈내의 모든 프로시져에서 접근가능하며 private키워드를 포함합니다.
네임스페이스내의 변수선언은 Friend 나 public 키워드를 사용해서 변수를 선언하면 되는 데 이에 대한 설명은 다시한번 이루어 지겠죠?.

이렇게 변수의 접근범위를 설정함으로써 OOP 의 장점을 살릴수 있고 범위를 좁힘으로써 외부의 악의의 코드로 부터 우리의 소스를 보호할 수 있을 것입니다.
반응형

'.NET > VB.NET' 카테고리의 다른 글

[VB.NET] Visual Basic 2005 Power Packs  (0) 2009.03.05
[VB.NET] VisualBasic.NET 키워드  (0) 2009.03.05
[VB.NET] 배열  (4) 2009.03.05
[VB.NET] As Customer와 As New Customer 의 차이...  (0) 2009.03.05
[VB.NET] Null Class  (0) 2009.03.05

Public newCustomer As Customer
Public newCustomer As New Customer

의 차이점을 아실려면 먼저 메모리 구조와 할당 방식을 아셔야 합니다.

CLR 은 메모리를 스택과 힙으로 관리하고 있습니다.
이 스택과 힙을 아셔야 하고요..
다른부분도 있지만 현재 설명하기 위해서 다른 부분은 생략하기로 하죠.

변수를 분류하자면 크게 Value 타입과 Reference 타입 두가지로 나뉠 수 있습니다.
Value 타입은 Stack 에 저장이 되고요, Reference 타입은 Stack과 Heap 에 저장이 됩니다.
Value(값) 타입은 Stack에만 저장되니 간단하지요.


변수를 선언하게 되면 먼저 스택에 할당됩니다.
Public newCustomer As Customer
이렇게 하면 newCustomer 가 스택에 할당이 되죠.
변수의 Type 이 Reference Type 이고
선언된 변수를 사용하기 위해서는 Instance를 생성해야 하는데요..
이때 사용하는 키워드가 New 인것입니다.

New를 사용해서 클래스의 인스턴스를 생성하게 되면 Heap 에 클래스가 차지하는 만큼의 크기로 메모리가 할당되고 Stack 에는 생성된 인스턴스가 위치하고있는 Heap의 주소가 저장되게 됩니다.
(그래서 Reference Type(참조타입)이라 하는 것입니다.)

인스턴스 형성의 시기는 소스상에 어느위치가 되던 상관은 없겠죠.

다시말해
Public newCustomer As New Customer
라는 말은

Public newCustomer As Customer

newCustomer = New Customer() 와 같은 의미가 되겠죠.

newCustomer = New Customer() 이 구문을 쓰는 시기가 인스턴스를 형성하는 시기가 될 것입니다.


그럼 Public newCustomer As New Customer 이 말은 무엇을 말하는 지 알수 있겠죠?
선언과 동시에 인스턴스를 형성하겠다는 의미인 것입니다.


메모리 영역을 보면 Static 은 다른 변수와는 특수한 형태이기때문에 별도의 영역에 할당이 됩니다.
그래서 위의 예에서는 질문하신 부분에서 Static을 지워서 설명드린거구요.
메모리에 대한 그림을 보시고 공부하시면 재미를 조금더 느끼실수 있으실 겁니다.

그리고 좀 더 나아가게 되면 Boxing과 UnBoxing 개념가지도 넓혀 갈수있지요..
이 부분은 나중에 기회가 되면 설명을 하기로 하죠... ^^


행복한 고수 되세요... ^^


woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
반응형

'.NET > VB.NET' 카테고리의 다른 글

[VB.NET] Visual Basic 2005 Power Packs  (0) 2009.03.05
[VB.NET] VisualBasic.NET 키워드  (0) 2009.03.05
[VB.NET] 배열  (4) 2009.03.05
[VB.NET] 변수사용  (0) 2009.03.05
[VB.NET] Null Class  (0) 2009.03.05

+ Recent posts