Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C++의 friend 키워드에 해당하는 C# 기능은 무엇일까?

C#에는 friend 키워드가 없다

C++의 friend 함수는 해당 클래스의 범위 밖에서 정의되지만, 클래스의 모든 private 및 protected 멤버에 접근할 수 있는 특별한 권한을 갖습니다. friend 함수의 선언부가 클래스 정의 안에 나타나긴 하지만, friend 자체는 그 클래스의 멤버 함수가 아니라는 점이 핵심입니다.

friend는 일반 함수, 함수 템플릿, 멤버 함수가 될 수도 있고, 클래스 또는 클래스 템플릿이 될 수도 있습니다. 만약 클래스 전체가 friend로 지정되면, 그 클래스와 모든 멤버가 대상 클래스의 private·protected 멤버에 자유롭게 접근할 수 있습니다.

C++ friend의 C# 대체 방법

C#에는 C++의 friend 키워드와 정확히 일치하는 문법이 존재하지 않습니다. 다만 가장 유사하게 구현할 수 있는 방법은 중첩 클래스(nested class)를 활용하는 것입니다. 내부 클래스는 외부 클래스의 private 멤버에 제한 없이 접근할 수 있습니다.

class Outer {
    private int secret = 42;

    class Inner {
        public void ShowSecret(Outer outer) {
            // 외부 클래스 Outer의 private 멤버에 직접 접근 가능
            System.Console.WriteLine(outer.secret);
        }
    }
}

위 예제처럼 Inner 클래스는 Outer 클래스 내부에 선언되어 있기 때문에, Outer의 private 필드인 secret에 별도의 접근자(accessor) 없이 곧바로 읽고 쓸 수 있습니다.

어셈블리 단위의 friend가 필요하다면?

클래스가 아닌 다른 어셈블리(프로젝트)에 접근 권한을 부여하고 싶다면, InternalsVisibleTo 특성을 사용하는 것이 좋습니다. 이를 통해 지정된 어셈블리가 현재 어셈블리의 internal 멤버에 접근하도록 허용할 수 있으며, 주로 단위 테스트 프로젝트에서 내부 로직을 검증할 때 널리 활용됩니다.