• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

자료 구조 - MyLinkedList 관련 질문입니다.

22.05.06 02:27 작성 조회수 91

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
안녕하세요! 강사님.
은닉화 관련 질문이 있는데요,
여기서 MyNode는 MyList에서만 사용할 것이기 때문에 set 접근을 MyList에서만 허용하고 싶습니다.
C++의 경우 friend 키워드를 통해 예외적으로 접근을 허용할 수 있었던 것 같은데,
C#은 구글링을 해보니 internal 키워드를 이용할 수 있다고 확인했는데,
internal 키워드를 통하면 같은 네임스페이스 안에서는 public처럼 사용할 수 있긴 한데...
C#에서 제공하는 LinkedList 기본 함수는 NextNode를 get은 가능하지만 set은 하지 못하도록 막혀있습니다.
(그 어떤 using namespace 없이..)
 
그래서 제가 만든 LinkedList는 물론 네임 스페이스를 구분하면 가능하겠지만, 기본 자료형처럼 네임스페이스로 구분하지 않고 다른방법이 있는지 궁금해요!

답변 1

답변을 작성해보세요.

0

여기서 MyNode는 MyList에서만 사용할 것이기 때문에 set 접근을 MyList에서만 허용하고 싶습니다.
 
-> 연결 리스트의 노드는 외부에서도 간직해서 일종의 핸들처럼 사용해야 의미가 있습니다.
그게 아니라면 동적 배열로 가는게 낫겠죠. 내부에서만 사용하고 싶다면
class 내에 중첩된 class를 만드는게 가장 최선의 방법으로 생각됩니다.

C#에선 friend 개념이 없고 애당초 C++에서도 friend는 우아하지 않은 방법으로 간주되긴 했죠.
찾아보니 다음과 같은 방법이 있긴 하네요. [assembly: InternalsVisibleTo("OtherAssembly")]
https://stackoverflow.com/questions/204739/what-is-the-c-sharp-equivalent-of-friend
imdev님의 프로필

imdev

질문자

2022.05.06

답변 감사합니다! 강사님.
중첩된 클래스를 사용하시라는 말씀에서 힌트를 얻었어요~

 

노드를 핸들처럼 사용하고자, MyLinkedListNode는 public으로 열어두고,

Next와 Prev 프로퍼티는 public get, protected set으로 열어두었습니다.

 

그리고 MyLinkedList안에서 MyLinkedListNode를 상속받는 중첩 클래스(MyNode)를 만들어서 해당 클래스로 한 번 랩핑(?)해서 구현하니, MyLinkedList에서는 Node를 자유롭게 수정할 수 있지만, 메인 함수에서는 수정할 수 없도록 friend를 모방(?)할 수 있었네요 ㅎㅎ

 

즐거운 주말 보내세요.

감사합니다.