Visual Basic의 액세스 수준

선언된 요소의 액세스 수준은 액세스하는 기능의 범위, 즉 코드에서 읽거나 쓸 수 있는 권한이 있는 수준입니다. 이는 요소 자체를 선언하는 방법뿐만 아니라 요소 컨테이너의 액세스 수준에 따라 결정됩니다. 포함하는 요소에 액세스할 수 없는 코드는 포함된 요소 중 하나인 Public로 선언된 요소에도 액세스할 수 없습니다. 예를 들어 Private 구조체의 Public 변수는 구조체를 포함하는 클래스 내부에서 액세스할 수 있지만 해당 클래스 외부에서는 액세스할 수 없습니다.

공공 사업

선언문의 Public 키워드는 동일한 프로젝트의 모든 코드, 프로젝트를 참조하는 다른 프로젝트 및 프로젝트에서 빌드된 어셈블리에서 요소에 액세스할 수 있음을 지정합니다. 다음 코드는 샘플 Public 선언을 보여줍니다.

Public Class ClassForEverybody

모듈, 인터페이스, 네임스페이스 수준에서만 Public을 사용할 수 있습니다. 즉, 소스 파일 또는 네임스페이스 수준에서 또는 인터페이스, 모듈, 클래스, 구조체 내에서 public 요소를 선언할 수 있지만 프로시저에서는 선언할 수 없습니다.

Protected

선언문의 Protected 키워드는 동일한 클래스 내에서만 또는 이 클래스에서 파생된 클래스에서만 요소에 액세스할 수 있도록 지정합니다. 다음 코드는 샘플 Protected 선언을 보여줍니다.

Protected Class ClassForMyHeirs

Protected를 클래스 수준에서만 사용할 수 있으며 클래스의 멤버를 선언하는 경우에만 사용할 수 있습니다. 즉, 소스 파일 또는 네임스페이스 수준이나 인터페이스, 모듈, 구조체, 프로시저 내에서는 클래스에서 보호된 요소를 선언할 수 없습니다.

Friend

선언문의 Friend 키워드는 동일한 어셈블리 내에서는 액세스할 수 있지만 어셈블리 외부에서는 액세스할 수 없으므로 지정합니다. 다음 코드는 샘플 Friend 선언을 보여줍니다.

Friend stringForThisProject As String

모듈, 인터페이스, 네임스페이스 수준에서만 Friend을 사용할 수 있습니다. 즉, 소스 파일 또는 네임스페이스 수준에서 또는 인터페이스, 모듈, 클래스, 구조체 내에서 friend 요소를 선언할 수 있지만 프로시저에서는 선언할 수 없습니다.

Protected Friend

선언문의 Protected Friend 키워드 조합은 파생 클래스 또는 동일한 어셈블리 내에서 또는 둘 다에서 요소에 액세스할 수 있음을 지정합니다. 다음 코드는 샘플 Protected Friend 선언을 보여줍니다.

Protected Friend stringForProjectAndHeirs As String

Protected Friend는 클래스 수준에서만 사용할 수 있으며 클래스의 멤버를 선언하는 경우에만 사용할 수 있습니다. 즉, 클래스에서 protected friend 요소를 선언할 수 있지만 소스 파일 또는 네임스페이스 수준이나 인터페이스, 모듈, 구조체, 프로시저 내에서 선언할 수는 없습니다.

프라이빗

선언문의 Private 키워드는 동일한 모듈, 클래스, 구조체 내에서만 요소에 액세스할 수 있도록 지정합니다. 다음 코드는 샘플 Private 선언을 보여줍니다.

Private _numberForMeOnly As Integer

Private는 모듈 수준에서만 사용할 수 있습니다. 즉, 모듈, 클래스, 구조체 내에서 프라이빗 요소를 선언할 수 있지만 소스 파일이나 네임스페이스 수준, 인터페이스 내부, 프로시저에서는 선언할 수 없습니다.

모듈 수준에서 액세스 수준 키워드가 없는 Dim 문은 Private 선언과 동일합니다. 그러나 코드를 더 쉽게 읽고 해석할 수 있도록 Private 키워드를 사용할 수 있습니다.

비공개 보호

선언문의 Private Protected 키워드 조합은 포함하는 클래스와 동일한 어셈블리에 있는 파생 클래스뿐만 아니라 동일한 클래스 내에서만 요소에 액세스할 수 있도록 지정합니다. Private Protected 액세스 한정자는 Visual Basic 15.5부터 지원됩니다.

다음 예제에서는 Private Protected 선언을 보여 줍니다.

Private Protected internalValue As Integer

클래스 내에서만 Private Protected 요소를 선언할 수 있습니다. 인터페이스 또는 구조체 내에서 선언할 수 없으며 소스 파일 또는 네임스페이스 수준, 인터페이스, 구조체 내부 또는 프로시저에서 선언할 수도 없습니다.

Private Protected 액세스 한정자는 Visual Basic 15.5 이상에서 지원됩니다. 이를 사용하려면 Visual Basic 프로젝트(*.vbproj) 파일에 다음 요소를 추가합니다. Visual Basic 15.5 이상이 시스템에 설치되어 있는 한 최신 버전의 Visual Basic 컴파일러에서 지원하는 모든 언어 기능을 활용할 수 있습니다.

<PropertyGroup>
   <LangVersion>latest</LangVersion>
</PropertyGroup>

Private Protected 액세스 한정자를 사용하려면 Visual Basic 프로젝트(*.vbproj) 파일에 다음 요소를 추가해야 합니다.

<PropertyGroup>
   <LangVersion>15.5</LangVersion>
</PropertyGroup>

자세한 내용은 Visual Basic 언어 버전 설정을 참조하세요.

액세스 한정자

액세스 수준을 지정하는 키워드를 액세스 한정자라고 합니다. 다음 표에서는 액세스 한정자를 비교합니다.

액세스 한정자 부여된 액세스 수준 이 액세스 수준으로 선언할 수 있는 요소 이 한정자를 사용할 수 있는 선언 컨텍스트
Public 제한 없음:

public 요소를 볼 수 있는 모든 코드는 해당 요소에 액세스할 수 있습니다.
인터페이스

모듈

클래스

구조

구조체 멤버

절차

속성

멤버 변수

상수

열거형

이벤트

외부 선언

대리자
원본 파일

네임스페이스

인터페이스

모듈

클래스

구조체
Protected 파생:

보호된 요소 또는 해당 요소에서 파생된 클래스를 선언하는 클래스의 코드는 요소에 액세스할 수 있습니다.
인터페이스

클래스

구조

절차

속성

멤버 변수

상수

열거형

이벤트

외부 선언

대리자
클래스
Friend 어셈블리:

어셈블리에서 friend 요소가 액세스할 수 있다고 선언하는 코드
인터페이스

모듈

클래스

구조

구조체 멤버

절차

속성

멤버 변수

상수

열거형

이벤트

외부 선언

대리자
원본 파일

네임스페이스

인터페이스

모듈

클래스

구조체
Protected Friend ProtectedFriend 통합:

protected friend 요소와 동일한 클래스나 동일한 어셈블리의 코드 또는 요소의 클래스에서 파생된 클래스 내의 코드는 해당 클래스에 액세스할 수 있습니다.
인터페이스

클래스

구조

절차

속성

멤버 변수

상수

열거형

이벤트

외부 선언

대리자
클래스
Private 선언 컨텍스트:

포함된 형식 내의 코드를 포함하여 private 요소를 선언하는 형식의 코드는 요소에 액세스할 수 있습니다.
인터페이스

클래스

구조

구조체 멤버

절차

속성

멤버 변수

상수

열거형

이벤트

외부 선언

대리자
모듈

클래스

구조체
Private Protected private protected 요소를 선언하는 클래스의 코드 또는 기본 클래스와 동일한 어셈블리에 있는 파생 클래스의 코드입니다. 인터페이스

클래스

구조

절차

속성

멤버 변수

상수

열거형

이벤트

외부 선언

대리자
클래스

참고 항목