| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 메타버스
- 박기현
- C
- 데이터 통신과 컴퓨터 네트워크
- 전공자를 위한 C언어 프로그래밍
- Shimon Schocken
- BOJ
- 이득우
- JavaScript
- Noam Nisan
- The Elements of Computing Systems 2/E
- 김진홍 옮김
- C#
- 입출력과 사칙연산
- C++
- 알고리즘
- 이득우의 게임수학
- HANBIT Academy
- 잡생각 정리글
- 생능출판
- 게임 수학
- hanbit.co.kr
- 밑바닥부터 만드는 컴퓨팅 시스템 2판
- https://insightbook.co.kr/
- unity6
- booksr.co.kr
- (주)책만
- 백준
- 주우석
- 일기
- Today
- Total
cyphen156
아 Friend 클래스마렵다... 본문
C#에서 한정자 사용할때 항상 드는 생각 C++의 friend 키워드
ResourceManager에서 Get메서드는 오픈하고, Load, Unload는 ContentManagementSystem에게만 개방하고 싶은 욕구가 들었다.
private, public, protected, internal 모두 좋은데... internal은 어셈블리 분리하지 않으면 의미없고
public은 너무 오픈형이고,
private는 너무 제한적이다.
특정 클래스에게만 특정함수를 개방하는 방법은 여러가지가 있긴한데..모두 하나같이 아쉽다.
C#에서는 다음과 같이 특정 함수를 특정 클래스 에게만 개방할 수있다.
1. 어셈블리 분리하기
가장 확실한 방법이다.
문제는 파일 경로 구조가 어셈블리 단위에 고정되어 버린다는것 논리적으로 같은 네임스페이스에 위치시킬수는 있어도 파일 경로 자체는 어셈블리마다 분리해줘야해서 Script가 사방으로 튄다.
2. nested Class
중첩 클래스라고도 하는데 그냥 클래스 안에 하위 클래스를 만드는 것이다.
자주 써먹는 방법이긴 한데 하나의 파일에 여러 클래스가 존재하게 되어서 RM - CMS와 같이 외부에서 바라볼 때 대등한 관계에 존재해야하는 클래스에 써먹기에는 적절하지 않다.
3. 규칙으로 쓰기
함수를 모두 오픈시키고 규약에 따라 이 함수는 특정클래스에서만 불러서 쓰자라는 약속을 하는것이다.
근데 사용하는 입장에서 함수가있네? 그럼 써야지 이러고 약속이 무너질 확률이 매우 크다. 하지말자
4. 특정 클래스에게 인증 토큰 발급하기
3번과 마찬가지로 오픈하지만 특정 클래스에게 권한 토큰을 부여하여 기능 실행을 하기 전에 권한이 있는지를 확인하고 로직을 수행하는 것이다.
상당히 강력한 방법이긴 한데 일종의 예외 처리라고 볼 수 있어서 나는 선호하지 않는다. 핫패스에 이런로직이 들어가면 생각외로 비용이 커질수 있기도 하고...
5. 상속시키기
미친짓이다. 그냥 하지말자
진짜 C++ friend 키워드가 얼마나 괜찮은건지 새삼 체감된다.
'잡생각 정리글' 카테고리의 다른 글
| 26.02.13 오늘의 감상 일반화는 어렵다 (0) | 2026.02.13 |
|---|---|
| 26.02.10 잡소리 푸념하기 + 리팩토링하면서 느끼는점 (0) | 2026.02.10 |
| 잡생각 정리글 13일만에 올리는 커밋은 정말이지 감격스럽구나 (2) | 2026.01.05 |
| 데이터셋 설계 기록용 (0) | 2025.12.27 |
| 25.10.30 잡소리 (0) | 2025.10.30 |
