본문 바로가기

C#62

구조체 배열 선언 시, 메모리에서 일어나는 과정 구조체 배열을 선언하면 메모리 관점에서 어떤 일이 발생하는지 그 과정에 대해 한번 알아보겠습니다. 배열 선언과 초기화 그리고 내부 동작 먼저, 다음과 같은 예제 코드가 있다고 해보겠습니다.public struct StageData{ public int ballSpeed; public int blockColumn; public int blockRow;}StageData[] arr = new StageData[5]; • new 로 StateData 구조체를 크기 5 인 배열로 선언합니다. • StageData[]는 참조 타입 (배열은 참조 타입입니다.) 이므로 힙에 5개짜리 배열 공간이 생성됩니다. • 그리고 StageData는 구조체(값 타입) 이므로, 배열 안에는 구조체가 들어.. 2025. 7. 2.
물체를 목표 지점에 정확히 도착시키는 방법 마우스를 클릭해서 그 위치까지 캐릭터를 이동시키고 나면, 캐릭터가 목표를 지나쳐서 멈추거나 혹은 다시 되돌아오는 현상을 한 번쯤은 경험해 보셨을 것입니다. 흔히 하는 실수transform.position += direction * speed * Time.deltaTime;if (Vector3.Distance(transform.position, targetPos) 이처럼 먼저 움직이고 나서 도착 여부를 검사하는 구조는, 프레임당 이동 거리를 예측하지 못해 목표 지점을 쉽게 지나쳐버립니다. 결국 도착 판별은 따로 하고, 다시 위치를 조정하는 등의 간결하지 못한 코드가 되버립니다. 해결 방법 : 먼저 이동 위치를 예측하자 일단 이동부터 하고 나중에 도착 판별을 하는 구조가 아니라, 이동 전에 이동하려는 위.. 2025. 7. 1.
Visual Studio 메뉴 폰트 크기 조정 얼마전에 Visual Studio 를 세팅하고 메뉴 글자 크기를 키우고 싶은데 어디서 조정하는 건지 몰라 한참 찾은적이 있었습니다. 코드 글자 크기를 키워도 메뉴 크기는 같이 늘어나지 않더라구요. 저에게는 작은 메뉴 크기... 노안이 와서 큰게 좋습니다. ;; 도구 > 옵션 > 글꼴 및 색 > 설정 표시 : 환경 폰트 크기를 키우고나니 속이 편안해졌습니다. 2025. 7. 1.
foreach() 순회 중 collection 변경은 예외 발생함 C# 에서 foreach() 문은 리스트나 배열 같은 컬렉션을 순회할 때 자주 사용됩니다.코드가 간결하고 가독성도 좋기 때문에 선호되지만, 한 가지 중요한 제한이 있습니다. foreach() 는 읽기 전용foreach (var pb in listPB){ if (IsCollision(pb, ball)) { // 순회 중 컬렉션 변경 -> 예외 발생!! listPB.Remove(pb); break; }} 겉보기에는 문제가 없어 보이지만, 이 코드는 실행 시 InvalidOperationException 예외를 발생시킵니다.foreach()는 내부적으로 열거자(Enumerator) 를 사용하기 때문에, 순회 중 컬렉션이 변경되면 예외를 던지게 되어 있습니다.. 2025. 6. 29.
bool = 조건식 과 삼항 연산자 bool = 조건식예를 들어, 다음과 같은 문장이 있다고 가정해보겠습니다.if (minValue 위 코드는 minValue 가 ballSpeed 보다 작으면 moveBallDown 을 true 로 설정하는 간단한 조건문입니다. 그런데 이 코드는 아래와 같이 더 간단하게 표현할 수 있습니다.bool moveBallDown = minValue bool = 조건식 형태로, 조건문의 결과를 그대로 대입하는 방식입니다.이건 삼항 연산자와는 다른 문법입니다. 삼항 연산자위 코드를 삼항 연산자로 구현해 보면 다음과 같이 됩니다.bool moveBallDown = minValue 이렇게 해도 결과는 같지만, 불필요하게 길고 복잡한 표현입니다.bool = 조건식은 이미 조건의 결과가 true 또는 false이므.. 2025. 6. 29.
C# 의 Interface 기초부터 활용까지 C#에서 인터페이스(Interface) 는 클래스가 따라야 할 규칙(계약서)을 정의합니다.이번 편에서는 인터페이스에 대해 자세히 알아보겠습니다. 인터페이스란?인터페이스는 클래스나 구조체가 구현해야 할 기능만 정의하는 “타입” 입니다. public interface IItem{ void Use(); }• 이름 앞에 I 를 붙이는 것이 관례입니다. (IUsable, IDamageable 등)• 함수의 제목만 있고 구현은 없는 것이 특징입니다.• 앞에 public 을 붙이지 않으면 같은 파일 안에서만 보이게 됩니다. ( default 는 internal )• 다른 클래스나 다른 파일에서도 써야 하므로 명시적으로 public 을 붙여주는 것이 가독성 면에서 좋습니다. 상속? 구현?문법적으로는 인.. 2025. 6. 26.