본문 바로가기

Window Programming/VB

모듈과 클래스 모듈과의 차이점

VB에서 Form내에서 함수 만들어 보셨나요? 

아무 이벤트나 하나 삽입해도 함수가 만들어지는데요, 

이런 함수들은 다 폼 안에 들어있는 식구입니다. 

즉 옆집 식구가 우리집 식구보고 어째라 명령을 못내린다는 겁니다.

(물론 Public으로 준비되어 있다면 가능하지만..그 옆집 자체가 사라졌다면 호출이 안되죠.)

 모듈이란 글로벌 함수, 즉 전세계 어디서나 부를 수 있는 식구입니다. 

모듈이라는 파일 내에 만든 모든 함수는 정말 어디서나 다 호출이 가능합니다.

 그러니까 님이 사용하시는 print, mid, left, right와 같은 함수도 글로벌 함수 즉 모듈에 담겨있는겁니다.

 언제나 누구나 불러 쓸 수 있습니다.

 모듈이 많아지면 모두 글로벌, 즉 전체영역에서 통용되기 때문에 서로 이름이 충돌되지 않도록 신경써줘야 합니다.

 모듈이 많아지면 많아지는 만큼 메모리가 많이 차지하게 됩니다.

 

 

다음 클래스 모듈.

 이것은 모듈과 똑같지만, 전체영역도 아니고, 언제나 불러 쓸 수 있는것도 아닙니다.

 다만 하나의 클래스 모듈은 하나의 가족입니다.

 하나의 빵집 가족이 있다고 칩시다.

 이 가족은 빵을 만들어 주는 다양한 기능이 있다고 칩시다.

 이 클래스 모듈은 New라는 키워드로 메모리에 띄워 놓아야 그 다음부터 이 빵집 가족의 모든 기능을 쓸 수 있습니다.

또, 안쓸때는 Nothing이라는 키워드로 꼭 없애 주어야 합니다.

  

단, 메모리가 많이 필요하고 또 필요없을때에는 메모리에서 전혀 필요없을때에 쓰시면 되겠습니다.

또는 한 덩어리 묶어서 필요할때만 쓰고 필요없으면 신경도 쓰고 싶지 않을때 쓰시면 되겠습니다.

 

 

다시 실제적인 복습으로, 모듈은 a.bas 라고 합시다.

 

a.bas 안에는 함수를 만들 수 있다고 했죠

 

Public Sub MyFunction()

End Sub

 

Public Function MyFunction2() as String

End Sub

 

과 같이 쓸 수 있습니다. 그러면 그 응용 프로그램 어디서든 MyFunction을 호출할 수 있고 MyFunction2의 값을 얻을 수 있습니다.

 

 

클래스모듈의 복습 : BBBClass.cls (클래스모듈명도 BBBClass)

 

Public Sub MyFunction()

End Sub

 

Public Function MyFunction2() as String

End Sub

 

와 똑같이 쓸 수 있습니다.

 

 

응용 프로그램 어디서든 쓸려면 일단 New키워드로 메모리에 띄워야 합니다.

 

Dim TheClass as BBBClass

Set TheClass = New BBBClass

 

call TheClass.MyFunction <- 이제서야 쓸 수 있습니다.

 

Set TheClass = Nothing <- 메모리에서 해제하고 싶을때 헤재합니다.

 

 

모듈과 클래스 모듈의 차이

 

모듈은 항상 준비되어 있어서 불러 쓰기 편하다.

쓰던 안쓰던 늘 메모리에 떠있다.

 

클래스모듈은 쓰고 싶을때에 New를 해 줘야 한다.

쓰지 않을때에 New한 만큼 꼭 Nothing을 해 줘야 한다. (안하면 어떻게 되냐구요? 실험해보세요. VB의 장점이기도 하지만 단점이기도 합니다.)

 

그럼 모듈로 그냥 편하게 하지 왜 클래스 모듈을 쓸때가 있는가?

 

저 클래스 하나가 한 사람을 표현한다고 생각해 보세요

모듈은 언제나 한 사람밖에 표현을 못하지만,

클래스모듈은 New를 수백번 수백만번 해주면

수 백명, 수천만명을 표현할 수 있습니다. 배열로..

 

클래스 모듈 속에 또 클래스 모듈도 포함 가능합니다.

 

클래스 모듈의 개념은 C++의 Struct나 Class 자바의 Class과 개념이 같습니다.