Visual Basic의 Friend 수정자는 클래스의 멤버(메서드, 속성, 변수)가 하나의 어셈블리 내에서 접근 가능하지만 어셈블리 외부에서는 접근할 수 없음을 정의합니다. 이는 C#의 internal과 유사합니다. 이러한 접근 수준은 공용 API의 개방성을 유지하면서 코드의 내부 구현을 "숨기기" 위해 유용합니다.
사용 예제:
' 하나의 프로젝트/어셈블리 내에서 Friend Class InternalHelper Friend Sub Log(message As String) Console.WriteLine(message) End Sub End Class
InternalHelper 클래스의 메서드는 현재 어셈블리 내에서만 호출 가능합니다.
Friend를 적용해야 할 때:
Friend 접근 수정자와 Protected의 차이는 무엇인가요? Friend로 선언된 메서드는 다른 어셈블리의 상속된 클래스에서 보이게 될 수 있나요?
답변:
Protected Friend Sub MyMethod() ' 어셈블리 내부와 어셈블리 외부의 상속자에게 접근 가능 End Sub
이야기
큰 프로젝트에서 모든 지원 클래스의 로직이 Public으로 선언되어 외부 통합자에게 노출되었습니다. Friend로 전환함으로써 모듈 외부에서 내부 메서드를 사용할 위험이 제거되었고 아키텍처 유지 관리가 간편해졌습니다.
이야기
접근 오류(Protected 대신 Friend 사용으로 인해)로 인해 보조 메서드가 동일 프로젝트에서 다른 클래스 계층 외부에 위치한 단위 테스트에 접근할 수 없었습니다. Friend를 수정하여 편리한 테스트를 지원할 수 있었습니다.
이야기
한 개발자가 Friend를 사용하여 다른 어셈블리에서 로드된 플러그인에 메서드를 노출하려고 했습니다. 그 결과 플러그인은 필요한 메서드에 접근할 수 없었습니다. 해결책은 Public 메서드를 가진 인터페이스를 구현하고 Friend는 내부 용도로만 사용하는 것이었습니다.