c# 26

[C#/TIL] 가비지 컬렉터의 세대(Generation)

.NET의 GC(Garbage Collector, 가비지 컬렉터)에서 메모리 효율을 높이기 위해 객체를 세대로 나눈다. 오래 살아남은 객체일수록 검사를 덜 하고, 자주 생성되고 빨리 사라지는 객체를 집중적으로 검사할 수 있도록 세대 구조로 나누고 있다. Gen 0 - 가장 최근에 생성된 객체 / 가장 자주 검사됨. 빨리 죽는 객체 위주 Gen 1 - Gen 0을 통과한 좀 더 오래된 객체 / 중간 단계, 검사횟수 덜 빈번하게 일어남Gen 2 - Gen 1에서도 계속 살아남은 객체 / 가장 드물게 수거 강제로 GC를 실행해줄 수도 있다. GC.Collect(0); // Gen 0만 수거GC.Collect(1); // Gen 0 + Gen 1 수거GC.Collect(2); // 전체 Full GC (Ge..

공부 기록/C# 2025.04.24

[Unity/TIL] C#에서 클래스 다중 상속을 지원하지 않는 이유

C#에서 클래스 다중 상속을 지원하지 않는 이유=> 다이아몬드 상속 문제 때문.!! 다이아몬드 상속 문제 클래스 A를 상속받는 B와 C 클래스가 있다. 클래스 D가 B와 C를 모두 상속받은 경우, D에서 A의 함수를 호출하면 B와 C 중 어느 쪽의 오버라이딩된 구현을 사용할지 모호해지는 문제가 발생한다. 이걸 다이아몬드 상속 문제라고 한다. 이런 모호성 때문에 C#에서는 근본적으로 막아놨다. C#에서는 클래스 다중 상속을 지원하지 않아서 처음 공부할 때 당황스러웠던 기억이 난다!!! 그럼 클래스 하나만 상속받아가면서 답답해서 어떻게 짜지? 라고 생각했었다. 그대신 인터페이스는 다중 상속이 가능하다. 현재는 꽤 적응해서 abstract과 interface를 사용해가며 잘만 코딩하며 사는 중이다. 그런데 오..

공부 기록/C# 2025.04.17

[Unity/TIL] 제네릭 활용(제네릭 싱글톤, 제네릭 오브젝트 풀 예제)

제네릭 활용스탠다드반 강의를 도강하면서 유용한 정보들을 쏙쏙 뽑아왔다. (대충 꺼억콩)제네릭 싱글톤다양한 Manager 클래스를 만들 때 싱글톤으로 만드는 코드가 반복되는데, 제네릭을 사용해서 싱글톤 객체를 효율적으로 만들 수 있다. public class Singleton : MonoBehaviour where T : MonoBehaviourSingleton : MonoBehaviour  Singleton 클래스가 MonoBehaviour를 상속받는다. (그래야 FindObjectOfType 가능)where T : MonoBehaviour T에 들어올 클래스가  MonoBehaviour를 상속받고 있어야 한다.using System.Collections;using System.Collections.Ge..

[Unity/TIL] delegate, Action 활용 - UI 팝업창

Action 개요delegate와 Func, Action 등에 대해서 공부했었는데 사용하고 싶을 때 바로 사용하기가 쉽지 않았다. 그래서 오늘은 UI 구현 시에 delegate를 활용하는 예제로 공부했다.  예전 공부 글 : https://ramenkirby.tistory.com/34 [C#] Delegate, Lambda, Func와 Action, LINQ목차델리게이트 (Delegate)   ㄴ 이벤트 (Event)람다 (Lambda)Func와 ActionLINQ (Langauge Integrated Query) 델리게이트 (Delegate)키워드 : delegate 다른 언어에서의 함수 포인터 개념으로 생각하면 된다.  하나의ramenkirby.tistory.comAction은 C#에서 제공하는 내장..

[C#/TIL] TextRPG 팀 프로젝트 일지 | 게임 데이터 Json 파일로 저장&로드하기

글 목차- 팀플 일지- Json 파일 Save & Load 기능 만들기  ㄴ 📁게임 데이터를 json 파일로 저장하기  ㄴ 📁Json으로 된 데이터 파일 로드하기오늘 한 일- 팀플 일지개발 남은 할 일들 하면서 나는 게임 데이터 저장을 구현해보게 됐다. json 파일 입출력 꼭 해보고 싶었는데 팀플로 해보게 되니 더 좋았다.오후에는 발표에 필요한 내용과 자료를 의논해보고, 지금까지의 전체 코드 리뷰를 빠르게 해보았다. 간단하고 부담없이 진행하기 위해 코드 자랑 콘테스트라고 생각하자고 했다. ㅋㅋㅋ 이후로는 [ 테스트 -> 버그발생 -> 수정 -> 테스트 ] 의 반복이었다. 하다보니 버그 목록이 점점 늘어나서 게임 저장 기능을 추가할 때가 아니라는 판단을 내리고 다같이 버그 테스트와 수정을 반복하게 됐..

[C#/TIL] TextRPG 팀 프로젝트 일지

[던전 9조대] 팀 오늘 한 일마무리 작업 확인 후 dev 브랜치 main으로 첫 배포.간단한 테스트 후 main에 올린채로 버그 수정과 도전 기능 추가 작업을 역할 분장하여 동시에 시작하기로 했다.2차 역할 분담전에 정리해둔 도전 기능 리스트를 기반으로 클래스 별도 추가 없이 만들 수 있는 기능 위주로 묶어 역할을 나눴다. 나는 마지막으로 남은 역할을 받아 진행하였다. 시작화면에서 캐릭터 이름, 직업 입력받기플레이어가 새로 시작하거나 체력이 0이 되어 태초마을로 돌아온 경우 이름과 직업을 입력하고 다시 시작하도록 추가했다.이름이 없으면 새로 생성한 것이고, 체력이 0이면 태초마을로 돌아온 경우로 판단하였다. NewGame() 함수에서는 플레이어의 이름을 입력받고 저장, 직업을 선택하고 직업에 맞는 초기..

[C#/TIL] TextRPG 팀 프로젝트 일지

팀 프로젝트 시작이번에는 팀장으로서 팀 프로젝트에 임하게 되었다. 코딩 실력과 무관하게 협업 경험이 있는편이기 때문에 팀장을 맡게 되었다. C#을 능숙하게 사용해오신 팀원분들도 있는데 팀장이 이제 막 배운 입장이라 부끄럽지만, 우리 팀이 뭘 해야할지를 생각하는 데에 있어서는 도움이 될 수 있을 것 같다. 자잘하게 선택과 결단이 필요한 일들에는 팀장의 결정을 따르고 있지만, 사실상 매번 활발한 의견 공유 후에 다수결의 원칙으로 결정되고 있다. 본격적인 시작에 앞서 주어진 과제에 필수로 구현해야 할 기능들을 훑어보는 의미로 실행 흐름을 다같이 figma 를 사용해서 그려보았다. Class 구조 계획 회의이전 팀 프로젝트와 개인 프로젝트에서 초기 계획과 구조 계획의 중요성을 꽤 많이 느꼈다. 그래서 Class..

[C#/TIL] Git 브랜치 활용법, 깃 컨벤션, 문자열 처리 기능 추가

Git 브랜치브랜치 짤 때 크게 master(main), develop, feature 브랜치들, release, hotfix 로 나누면 충분할 것 같다. 아래 그림에서 전체적인 흐름의 예시를 볼 수 있다.개발은 master에서 직접하지 않고 develop 브랜치로 받아서 한다. 그 중에서도 기능 브랜치를 나누는 것이 좋고, 작업한 사람이 누구인지까지 알 수 있는 것이 편하다. ex ) 작업자이니셜_기능이름, YD_UI, WG_Character, ... 기능 브랜치별로 나눠서 작업하다가 사용자가 버그가 발생했다고 하면 어디서 수정해야할까?-> 배포된 버전에서 버그가 있는 것이기 때문에 master에 버그가 있는 것임, 그래서 master에서 hotfix로 뻗어서 수정해주면 되는 것이다. 버그가 수정된 것..

공부 기록/C# 2025.02.06

[C#] Delegate, Lambda, Func와 Action, LINQ

목차델리게이트 (Delegate)   ㄴ 이벤트 (Event)람다 (Lambda)Func와 ActionLINQ (Langauge Integrated Query) 델리게이트 (Delegate)키워드 : delegate 다른 언어에서의 함수 포인터 개념으로 생각하면 된다.  하나의 델리게이트에 메서드를 여러 개 등록할 수 있다.예제delegate void MyDelegate(string message);static void Method1(string message){ Console.WriteLine("Method1: " + message);}static void Method2(string message){ Console.WriteLine("Method2: " + message);}static vo..

공부 기록/C# 2025.02.05

[C#/TIL] TextRPG 개인 과제 마무리

TextRPG 기능필수 기능은 모두 마치고 도전 기능을 남은 시간 동안 최대한 추가했다.// 필수 기능// 도전 기능// 구현 못한 것- 게임 시작 화면- 상태보기- 인벤토리- 인벤토리 - 장착 관리- 상점- 아이템 구매- 아이템 정보를 배열로 관리- 나만의 아이템 추가(무기아이템추가, 최대체력증가 아이템 추가)- 휴식기능 추가 - 레벨업 기능 추가 (경험치 존재)- 던전입장 기능 추가- 장착 개선 - 판매하기 기능- 게임 저장하기 추가 아쉬운 점1. 프로젝트 시작하기 전에 구조를 좀 계획하고 시작하고 싶었는데 거의 못함. 그리고 아주 조금 짜놨는데 지켜지지도 않았음. 이번에는 시간도 촉박했기 때문에 더 레전드다. 글씨도 레전드 (우리 팀원분 중에 이번 주차 첫날부터 구조 계획 짜서 하신 분이 계셔서 굉..

728x90