Visual Basic의 모듈(Module)은 역사적으로 명시적으로 인스턴스를 생성하지 않고 전체 프로젝트에서 접근 가능한 프로시저, 함수 및 변수를 저장하는 데 사용됩니다. 클래스의 도입 이후 그 역할이 일부 중복되었지만, 중요한 차이점은 여전히 존재합니다.
문제의 역사:
고전 Visual Basic (VB6)에서 모듈은 공통 함수 및 전역 변수를 그룹화하는 유일한 방법이었습니다. VB.NET에서도 모듈은 남아 있지만 클래스의 확장된 기능이 추가되었습니다.
문제:
개발자는 모듈과 클래스의 차이를 모를 수 있으며, 이로 인해 로직 저장 방식의 잘못된 선택, 코드의 우연한 중복 또는 변수가 예기치 않게 동작하게 되는 결과를 초래할 수 있습니다.
해결책:
모듈과 클래스 사이의 선택은 목표에 따라 달라집니다:
코드 예시:
' 모듈 Module MathUtils Public Function Add(x As Integer, y As Integer) As Integer Return x + y End Function End Module ' 사용 예 Dim result = MathUtils.Add(5, 10)
주요 특징:
Shared이며 인스턴스 없이 접근할 수 있습니다.모듈에서 변수를 Public으로 선언하면 애플리케이션의 모든 폼/클래스에 일반적으로 적용됩니까?
네. 모듈에서의 Public 변수는 본질적으로 전역적입니다. 프로젝트의 어떤 코드에서도 접근 가능하므로 유용하지만, 멀티스레드 환경에서 오류가 발생하거나 값이 우연히 덮어쓰여질 수 있습니다.
New를 사용하여 모듈의 인스턴스를 만들 수 있습니까?
아니요. 모듈은 인스턴스를 만들 수 없습니다. 모든 기능이 정적으로 접근 가능합니다.
모듈을 상속하거나 Protected 또는 Private 접근 제한자를 사용하여 모듈을 선언할 수 있습니까?
아니요. 모듈은 상속할 수 없으며 네임스페이스(namespace) 수준에서만 선언될 수 있으며, 다른 접근 제한자(공용 또는 Friend 이외)는 가질 수 없습니다.
프로젝트에서 모든 사용자 상태 변수가 모듈에 Public으로 선언됩니다. 한 폼에서 값이 변경되면 모든 다른 폼에서 즉시 새로운 값으로 표시됩니다.
장점:
단점:
모듈은 보조 유틸리티(예: 변환 함수) 저장에만 사용되며, 사용자 상태는 클래스에서 캡슐화하여 저장됩니다.
장점:
단점: