해결된 질문
작성
·
61
답변 2
0
C++의 스마트 포인터와 다르게 C#에서는
순환 참조가 일어난다고 해서 특별히 문제가 일어나진 않고
일부 경우 (특히 delegate에 이벤트 추가할 때)만 유의하시면 됩니다.
그래도 정 신경 쓰고 싶으시다면 액터가 디스폰될 때,
모든 참조값을 null처리하면 되겠죠.
게임은 다른 소프트웨어에 비해 빠르게 개발해야 하고
게임 개발의 특성상 기획이 하도 바뀌기 때문에 코드 수정 또한 빈번해
웹만큼 정형화된 기술 (ex. Dependency Injection)등을 활용하지 않습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 홍지범님.
순환 참조는 특히 객체가 서로를 직접 참조할 때 주의가 필요한 부분입니다. 순환 참조가 존재할 경우, 객체의 메모리 해제가 제대로 이루어지지 않아 메모리 릭이 발생할 수 있습니다. 게임 개발에서는 이러한 상황을 막기 위해 몇 가지 기법을 사용할 수 있습니다.
약한 참조 사용: C#에서 WeakReference
를 사용해 강한 참조를 약하게 만들어 순환 참조를 끊을 수 있습니다. 이는 가비지 컬렉터가 객체를 수집할 수 있게 도와줍니다.
의존성 주입 활용: 이는 상호 참조를 피할 수 있는 패턴으로, 객체 간 결합도를 줄여 문제를 방지할 수 있습니다. 게임 개발에서도 이를 통해 객체 간의 연관을 유연하게 관리할 수 있습니다.
이벤트/콜백 패턴 사용: 객체 간 통신을 할 때 직접 참조하는 대신 이벤트나 델리게이트를 활용하여 느슨한 결합을 유지할 수 있습니다.
자바의 스프링 프레임워크처럼, 특정 프레임워크나 패턴을 도입해 순환 참조를 감지하고 관리하는 것도 좋은 방법입니다. 게임 개발에서도 이러한 경험이 풍부한 엔지니어라면 설계 단계에서 순환참조를 피할 수 있는 구조를 고려하는 것이 일반적이며, 코딩 컨벤션이나 코드 리뷰 등으로 지속적으로 관리합니다.
관련된 내용으로 도움이 될 만한 링크를 추천드립니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 감사합니다.
이론으로 문제가 된다고 배우면서도, 실제로 문제가 될까 항상 의문을 품던 내용이었습니다.
오늘 완강을 했습니다.
처음에는 동기화 시키는 부분이 어려웠는데, 뒤로 갈수록 너무 재밌었습니다.
M2를 듣기 전 선행학습으로 파트7을 들으러 왔는데, Rookiss 님의 사고 방식을 따라가는게 너무 유익해서 한 번 더 들을까 고민되네요.
원시적인 구현부터 최종 모습으로 발전시킬 때 왜? 에 대해 명확하게 풀어내시는 부분에 많은 인사이트를 얻고 감탄도 하게 되었습니다.
이를 위해 얼마나 노력하셨을지 상상도 안되네요.
Rookiss 님 커리큘럼이 길어 처음에는 손댈 엄두를 못냈는데, 파트 7을 완강하고나니 그 모든게 양질의 버드밀크라 생각하면 쭉쭉 빨아먹기만 해도 어디가서 1인분은 할 수 있을 것 같습니다.
앞으로 행보도 기대할게요! 응원합니다!