본문 바로가기

C#62

C#에서 float 형 random 이 없는 이유와 그래도 필요하다면? C#으로 게임이나 시뮬레이션 코드를 작성하다 보면, 종종 이런 고민을 하게 됩니다.“int 랜덤은 있는데, 왜 float 랜덤은 없지?”Random.Next()처럼 간단하게 쓸 수 있는 NextFloat() 같은 함수가 있으면 좋을 것 같은데, C# 기본 Random 클래스에는 그런 함수가 존재하지 않습니다.이 글에서는 그 이유와, 실제로는 float 랜덤을 어떻게 만들어 써야 하는지 정리해 보겠습니다. 1. float 랜덤이 없는 이유C#의 Random 클래스는 .NET 초창기부터 설계된 타입입니다. 이때 “실수 난수”를 표현하는 기본 타입으로 double이 선택되었습니다. 그래서 지금도 실수 난수는 무조건 NextDouble() 하나만 제공합니다.정수 계열 • int Next() • int Next(.. 2025. 11. 16.
C# 에서 static GameData 클래스 설계 예시 이번 글에서는 StageData 구조체와 GameData 정적 클래스를 이용해 게임의 스테이지 설정 데이터를 관리하는 코드를 어떻게 구성했는지 설명합니다. 아래 예시 코드를 기준으로 세부 개념을 정리합니다.public struct StageData{ public int ballSpeed; public int blockRow; public int blockColumn; public int blockWidth;}internal static class GameData{ public static StageData[] stageData; public static int StageIndex { get; set; } public static StageData CurrentStag.. 2025. 11. 15.
Data 관리 클래스를 static 으로 만들어야 하는 이유 1. 초기 구조의 한계처음에는 다음과 같이 게임 규칙과 로직이 모두 MainForm 안에 포함되어 있었습니다.public partial class MainForm : Form{ int stageIndex = 0; StageData[] stageData = new StageData[3]; int ballSpeedX = 7; int ballSpeedY = 7; int blockRow = 3; int blockColumn = 5; int blockWidth = 100;} 이 구조에서는 다음과 같은 문제가 발생합니다.스테이지 데이터와 게임 로직이 섞여 있어 가독성이 저하됩니다.Stage 관련 정보를 수정하려면 반드시 MainForm 내부를 수정해야 합니다.다른 화면(Form.. 2025. 11. 15.
Dictionary 에서 구조체를 TValue 로 사용시, 주의할 점 구조체는 스택 메모리에 생성되기 때문에 값 복사가 일어납니다. 그리고 이로 인해 몇 가지 주의해야 할 점이 있는데, Dictionary 에서는 이 부분이 특히 더 민감하게 작동합니다. 이번 글에서는 이와 관련해서 자세히 설명해 보겠습니다. 구조체는 값 복사다음과 같은 코드가 있다고 가정해 보겠습니다. 그리고 "쌍검" 의 수량을 +1 증가하는 코드를 작성해 보려고 합니다. struct Item{ public string name; public string desc; public int price; public int quantity; public float weight;}// Dictionary 선언Dictionary itemTable = new Dictionary();/.. 2025. 7. 24.
컬렉션 (Collection) 의 깊이 있는 이해 (feat. IEnumerable, ICollection) C# 에서 List 나 Dictionary 처럼 컬렉션을 다룰 때, 단순히 foreach() 로 순회하는 것 이상으로 이해하고 싶다면 IEnumerable, ICollection 같은 인터페이스 구조를 짚고 넘어가야 합니다.( 참고로 이 글은 interface 개념을 어느 정도 이해하고 있다는 전제하에 작성되었습니다. ) foreach() 는 어떻게 동작할까?다음과 같은 foreach() 문이 있다고 가정해 보겠습니다. Dictionary fruitPrices = new Dictionary(){ { "사과", 1500 }, { "바나나", 1200 }, { "오렌지", 1800 }, { "포도", 2000 }, { "딸기", 3000 }}; foreach (var.. 2025. 7. 24.
Dictionary 정리 : 기초부터 활용까지 프로그래밍을 하다보면, 어떤 키워드에 해당하는 정보를 빠르게 찾아야 할 때가 많습니다.예를 들면, 이름으로 전화번호를 찾거나, 아이템 이름으로 가격을 찾는 상황 등이 있습니다.이럴 때 유용하게 쓰이는 게 바로 Dictionary입니다. Dictionary 란?Dictionary는 말 그대로 "사전" 입니다.Key와 Value를 한 쌍으로 묶어서 데이터를 저장하는 구조입니다.배열이나 리스트는 숫자 인덱스로 값을 찾지만, Dictionary는 key 로 값 (value) 을 바로 찾을 수 있어서 훨씬 직관적입니다. 우리 생활 속 Dictionary• 이름으로 전화번호 찾기 예) 김아무개 : 010-1234-5678• 학번으로 이름 찾기 예) 2025821000 : 홍길동 Dictionar.. 2025. 7. 23.