728x90

C# 67

추상클래스 abstract vs virtual

abstract본문 없음 → 자식이 반드시 구현해야 함자식 클래스에서 override 없으면 컴파일 에러 발생public abstract class EnemyState { public abstract void Update(); // 자식이 무조건 구현해야 함} virtual기본 구현 있음 → 자식이 원하면 override구현 안 해도 기본 기능 그대로 사용 가능public abstract class EnemyState { public virtual void Enter() { Debug.Log("기본 Enter"); } public abstract void Update(); // 반드시 구현 public virtual void Exit() { Debug.Log("기본 Exit");..

[C#] 추상클래스

추상 클래스란?추상 클래스는 말 그대로 "추상적인 틀"이다.즉, 공통되는 기능은 직접 구현해놓고, 각 클래스마다 달라져야 하는 부분은 "구현하지 않고" 남겨두는 클래스 비유: 자동차 설계도Car라는 추상 클래스가 있다.바퀴가 4개이고, 시동을 거는 기능은 모든 차가 같다.그런데 달리는 방식은 차마다 다르다.(전기차, 휘발유차, 수소차 등…)abstract class Car { public void StartEngine() { Debug.Log("엔진 시동 켬"); } public abstract void Drive(); // 구체적인 운전 방식은 자식이 정함} 핵심 개념 3줄 요약개념설명abstract class직접 인스턴스화할 수 없는 클래스abstract method..

[C#] 제네릭(Generic)

제네릭이란?여러 타입에 대해 재사용 가능한 코드를 작성하는 문법즉, 자료형을 미리 정하지 않고 나중에 정할 수 있는 방법이다. 특히 풀링 시스템 같은 데서 쓰인다.public class Box{ public T item;}Box, Box 등 어떤 타입이든 활용 가능하다.T는 타입 매개변수로, 나중에 실제 타입으로 바뀜 📝 예시Box intBox = new Box();intBox.item = 10;Box strBox = new Box();strBox.item = "hello"; 제약 조건 (where)특정 타입만 사용하도록 조건을 걸 수 있다 // T는 반드시 클래스여야 함public class Storage where T : class// T는 MonoBehaviour이면서 IPoolable 인..

[C#] C#에서 new()만 써도 된다?

개요C# 코드를 보다 간결하게 만드는 최신 문법,바로 타입 생략형 객체 생성을 알게 되어 신기해서 적어보았다.// 전통적인 방식private Dictionary pools = new Dictionary();// 최신 방식private Dictionary pools = new(); 두 문법의 차이점은?항목전통 방식최신 방식문법new Dictionary()new()특징타입을 모두 명시타입을 자동 추론지원 버전C# 1.0~C# 9.0 이상가독성타입이 확실히 보임더 간결하고 깔끔함 결론new()만 써도 왼쪽 타입을 기준으로 자동 추론Unity 2022.3.17f 이상에서는 안심하고 써도 됨

[TeamProject2] C# 팀프로젝트 회고 - Dark Zeb(1등!)

최근에 진행한 C# 팀 프로젝트를 마치고 회고를 남겨보려고 한다. 힘들었지만 정말 뿌듯했던 프로젝트였다. 💡 Keep — 잘했던 점, 기억하고 싶은 순간들이번 프로젝트에서는 지난 개인과제 때 사용했던 MVC 패턴을 적극 활용해보았다. 클래스 간의 역할을 명확히 구분하고, 데이터와 데이터를 처리하는 로직을 분리함으로써 구조가 훨씬 명확해졌다는 점이 가장 만족스러웠다. 무엇보다도 팀 분위기가 너무 좋았다. 적극적인 소통 속에서 기획 방향성도 잘 잡을 수 있었고, '공포'라는 흔치 않은 테마를 선정해 참신한 아이디어로 프로젝트를 꾸려나갈 수 있었다. 처음에는 기능별로 나눠져 있던 코드를 하나의 게임으로 엮기 위해 리팩토링을 엄청나게 많이 했는데, 그 과정에서 인스턴스를 생성하고 넘기는 개념을 복습할 수 있..

C#/C#프로젝트 2025.04.29

[TeamProject2] 기능 나열형 코드를 MVC 패턴으로 구조화

TextRPG 프로젝트 초기 단계에서, 모든 기능이 하나의 메인 클래스 또는 절차적 코드에 집중되어 있었다.맵 이동, 전투 시스템, 아이템 사용 등 주요 기능이 구분 없이 나열되었고 이로 인해 코드의 복잡성이 증가하고 유지보수성이 떨어지는 문제가 발생했다. 문제 상황초기 개발 단계에서는 맵 이동, 전투, 아이템 사용 등 게임의 주요 기능이 한 파일 또는 몇 개의 클래스에 몰아넣어진 형태로 구현되었다. 이로 인해 다음과 같은 문제가 발생했다: 코드가 한 파일에 집중되어 가독성이 떨어짐전투/아이템/플레이어 기능들이 명확히 분리되지 않고 얽혀 있음기능 추가 시 기존 코드에 직접 수정이 필요하여, 수정 범위가 넓어지고 오류 가능성 증가 원인 분석초기 설계 부재: 구조화 없이 빠른 개발에 초점을 맞춤단일 책임 원..

C#/C#프로젝트 2025.04.28

[C#TeamProject][트러블슈팅] Monster 객체 재사용 문제와 객체 복제의 필요성

C#으로 TextRPG를 개발하는 과정에서, 전투 시스템 구현 중 예상치 못한 문제가 발생했다.몬스터를 관리하는 과정에서 동일한 Monster 객체 인스턴스가 공유되면서 한 몬스터 객체가 계속해서 전투에 쓰이는 문제였다. 문제 상황초기 전투 시스템은 미리 생성한 Monster 객체들을 리스트에 담아 관리하고 있었다. 각 전투마다 1~4마리의 몬스터를 무작위로 선택해 리스트에 추가하는 방식이었다.randomMonsterList.Add(normalMonsters[randomIndex]); 이 방식은 처음에는 문제 없이 동작하는 듯했지만, 전투 중 한 몬스터를 처치하면 다른 몬스터도 동시에 사망하는 버그가 발생했다. 원인 분석C#에서는 참조형(Reference Type) 객체를 리스트에 추가하면 값이 복사되는..

C#/C#프로젝트 2025.04.27
728x90