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