728x90

C# 67

[C#] 열거형(enum)

열거형(Enum)은 이름이 붙은 상수들의 집합을 정의할 수 있는 데이터 형식이다.값에 의미 있는 이름을 부여하여 코드의 가독성과 유지보수성을 높이는 데 유용하다. 열거형이란?기본적으로 정수형 상수들의 집합관련된 값들을 그룹화할 수 있음기본 값은 int이며, 0부터 시작 기본 문법enum 요일 { 월, 화, 수, 목, 금, 토, 일}이렇게하면, 값을 할당하지 않아도 기본적으로 월=0, 화=1, ...이런식으로 0부터 자동으로 값이 할당된다. - 명시적으로 값 지정도 가능하다.enum 상태 { 대기 = 1, 진행중 = 2, 완료 = 3} 📝 추가 사용예시enum 상태 { 대기, 진행중, 완료}class Program { static void Main() { ..

[C#] 왜 클래스는 다중상속 안 되는데, 인터페이스는 되게했을까?

우선 인터페이스와 다중상속을 요약해보자면 "인터페이스는 이 함수 꼭 구현해!" 라고 강제하는 '규칙'이고,다중상속은 그 '규칙'을 여러 개 동시에 적용할 수 있게 해주는 기능이다. 인터페이스 + 다중상속 = 여러 규칙 동시에 따르기인터페이스를 여러 개 상속하면,그 인터페이스들이 요구하는 메서드를 반드시 다 구현해야 한다.interface IWalk { void Walk();}interface ITalk { void Talk();}class Human : IWalk, ITalk { public void Walk() { Console.WriteLine("걷기"); } public void Talk() { Console.WriteLine("말하기"); }}➡ 이건 Human은 걷고 말할 ..

C#/인터페이스 2025.04.24

[C#] 인터페이스 쓰는이유

인터페이스 쓰는 이유인터페이스 공부하다가, "그냥 함수 정의하면 되지, 인터페이스 왜 써야 해?"가 궁금해서 찾아보았다. 간단히 말하면, 인터페이스는 '약속'이자 '설계도'이다. 예를들어 코드를 살펴보자.class Person { public void Walk() { ... } public void Talk() { ... }}이렇게 해도 Person은 걷고 말할 수 있고, 그 자체로는 문제가 없다.하지만 다른 클래스도 걷고 말해야 한다면? 인터페이스 없을 때의 문제🤔Person, Robot, Dog 클래스가 있다고 해보자. 셋 다 Walk() 메서드를 가진다고 해도,컴파일러는 "이 클래스들이 걷는 기능이 반드시 있음" 을 보장해줄 수 없다. 인터페이스를 쓰면 좋은점1. "Walkable한 ..

C#/인터페이스 2025.04.24

[C#] 클래스의 다중상속(다이아몬드문제)와 인터페이스

다중 상속(Multiple Inheritance)이란?한 클래스가 둘 이상의 부모 클래스로부터 상속받는 것.예를 들어, 만약 C#에서 다중 상속이 가능하다면 이런 식일 것이다.class A { public void MethodA() { }}class B { public void MethodB() { }}// 이런 식으로 두 클래스를 동시에 상속class C : A, B { // MethodA랑 MethodB 둘 다 사용 가능} - 다이아몬드 문제(Diamond Problem)란?한개의 클래스가 두개 이상의 부모 클래스로부터 동일한 멤버를 상속 받는 문제하지만,❌ C#에서는 클래스 간의 다중 상속은 지원하지 않는다.그 이유는 여러 부모 클래스에 같은 이름의 메서드나 속성이 있을 경우 충돌이..

C#/인터페이스 2025.04.23

[C#] 리스트(List)

List란?List는 C#에서 가장 많이 사용하는 동적 배열크기가 고정된 배열과는 달리, 데이터를 추가하거나 제거할 수 있는 유연한 자료구조이다.List numbers = new List(); 기본 사용법(선언, 추가, 제거, 출력)① 리스트 선언 및 초기화List fruits = new List(); fruits.Add("사과");fruits.Add("바나나");fruits.Add("포도"); 한 줄로 초기화도 가능:List colors = new List { "빨강", "초록", "파랑" };② 요소 접근 및 출력Console.WriteLine(fruits[0]); // 사과 for, foreach로 전체 출력:foreach (var fruit in fruits) { Console.Wri..

[C#Project] C# 개인 과제 개발 회고 – TextRPG

과제 개요이번 개인 과제에서는 Unity C# 기반의 간단한 RPG 게임 시스템을 구현했다.UI를 출력하고, Player의 상태를 보여주며, 인벤토리와 상점 기능의 틀을 구성하는 것이 목표였다. 개발하며 배운 점객체 간 의존성 설계의 중요성Player와 InventoryManager, ShopManager처럼 서로 데이터를 공유하는 구조에서는 객체 생성 순서와 참조 방식이 매우 중요하다는 걸 배웠다.→ 특히 순환 참조(Circular Dependency)를 피하는 법을 직접 경험하며 설계에 대해 더 깊이 고민할 수 있었다.UI 분리의 이점UI 관련 기능을 UIManager로 분리하니, 전체 로직이 깔끔하게 정리되고 나중에 유지보수가 쉬워졌다.입력값 처리의 안정성int.TryParse()를 통해 숫자 입..

C#/C#프로젝트 2025.04.21

[C#Project] Player가 Inventory를 참조할 때 발생한 순환 참조 문제 (Circular Dependency)

문제 상황C# 기반으로 간단한 RPG 게임을 개발하던 중 Player 클래스는 자신의 인벤토리를 다루기 위해 InventoryManager 인스턴스를 필드로 갖고 있었고, 반대로 InventoryManager도 Player의 상태(소지 금액, 레벨 등)를 확인해야 하는 요구사항이 생겼다. 이때 다음과 같은 코드 구조가 되어버렸다.public class Player { public InventoryManager Inventory; public Player() { Inventory = new InventoryManager(this); }}public class InventoryManager { private Player _player; public InventoryMa..

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