본문 바로가기

분류 전체보기

(308)
[C#] 정렬 규칙 ,CompareTo함수 1. Sort가 비교값을 해석하는 규칙Sort는 비교 함수(a, b)가 반환한 값을 이렇게 해석합니다:음수 ( → a가 b보다 앞에 와야 함0 → 순서 그대로양수 (> 0) → a가 b보다 뒤에 와야 함 즉, 반환값은 항상 첫 번째 인자(a)의 위치 기준으로 해석됩니다.비교함수는 a.CompareTo(b)일 때 a가 b보다 크면 양수, 작으면 음수를 반환합니다.2. 오름차순 예시 (a, b) => a.CompareTo(b) a = 2, b = 5 → a.CompareTo(b) = -1 (음수)→ a가 앞으로 (즉, 2가 5보다 앞)a = 5, b = 2 → a.CompareTo(b) = 1 (양수)→ a가 뒤로 (즉, 2가 앞으로)3. 내림차순에서 b.CompareTo(a) (a, b) => b.Comp..
[C#] 값 형식과 참조 형식의 저장 위치 struct MyStruct{ public MyClass refType;}class MyClass{ public int data;}MyStruct 자체는 값 형식이므로,지역 변수라면 스택(Stack)참조 타입 필드 안에 있으면 힙(Heap)에 저장됩니다.하지만 MyStruct 안의 MyClass는 참조 형식이므로,refType 필드에는 힙에 있는 MyClass 객체의 참조(주소) 가 저장됩니다.실제 MyClass 인스턴스 데이터는 힙(Heap) 에 저장됩니다.즉,struct 본체 → 값 형식 저장 규칙을 따름그 안의 class 필드 → 힙에 따로 저장, struct에는 참조만 저장
[C#] 자료구조 정리 표 자료구조 추천 사용 상황 접근검색삽입/삭제Array크기 변동 거의 없음, 인덱스 접근 속도 최우선, 캐시 효율 중요한 경우O(1)O(n)O(n)List범용, 순차/인덱스 접근이 잦고 크기 변동이 가끔 있는 경우O(1)O(n)O(n)Dictionary키 기반 빠른 검색 필요, 대량 데이터 매핑-O(1) 평균O(n) 최악O(1) 평균O(n) 최악Queue순서대로 처리(FIFO)O(n)O(n)O(1) (양끝)Stack마지막 데이터 우선 처리(LIFO)O(n)O(n)O(1) (양끝)HashSet포함 여부 체크, 중복 제거 필요-O(1) 평균O(n) 최악O(1) 평균O(n) 최악LinkedList중간 삽입/삭제가 빈번, 데이터 크기 변동 많음O(n)O(n)O(1) (노드 참조) 배열(Array)이 List보다..
[C#] 구조체를 쓰는 이유 클래스를 쓰는 이유는 세상 사람들이 다암.그럼에도 불구하고 클래스 대신 구조체를 쓰는 이유는?1. 힙 할당을 피하고 성능·메모리 효율 확보클래스(참조형) → 힙에 할당 + 참조를 통해 접근GC 대상이 되므로 수명이 끝나면 수거해야 함 (GC 부하 발생 가능)구조체(값형) → 스택이나 포함된 객체 메모리에 바로 저장GC 부담 없음, 생성·소멸이 빠름크기가 작을 때는 값 복사 비용보다 힙 할당/GC 비용 절감 효과가 더 큼2. 독립적인 값 의미를 명확하게 표현값형은 복사 시 원본과 완전히 독립→ 서로 영향을 주지 않는 데이터임을 타입 설계에서 보장클래스는 참조를 공유하므로, 한쪽 변경이 다른 쪽에 전파되어 의도치 않은 부작용 가능“독립적인 값”이라는 요구사항이 있을 때 값형은 의미적으로도 적합3. 불변 데이..
[Unity] 코루틴 📌 코루틴이란?정의: 일반 메서드는 한 프레임 안에서 실행 완료되지만, 코루틴은 yield를 통해 작업을 여러 프레임에 나눠서 실행할 수 있는 메서드.특징:반드시 IEnumerator 반환yield return 시 실행을 멈추고 다음 프레임 또는 조건 충족 시 재개yield break로 즉시 종료MonoBehaviour를 상속한 객체에서만 사용 가능코루틴 소유 객체가 비활성화/파괴되면 중단메인 스레드에서만 실행 (멀티스레드 아님)📜 주요 메서드StartCoroutine: 코루틴 실행, 반환값(Coroutine)을 이용해 특정 코루틴 제어 가능StopCoroutine: 실행 중인 코루틴 종료 (반환값 이용 방식 권장)StopAllCoroutines: 해당 객체의 모든 코루틴 종료YieldInstruct..
[Unity] 라이프사이클 초기화 단계Awake()게임 오브젝트가 활성화되었을 때 가장 먼저 호출.같은 GameObject에 붙은 컴포넌트를 참조하거나, 자신의 상태를 초기화하는 데 적합비활성 상태에서도 실행됨 (SetActive(false)여도 호출됨).OnEnable()오브젝트가 활성화될 때 호출.Awake 이후 호출되며, 오브젝트가 꺼졌다가 다시 켜질 때마다 호출됨.Start()Awake 및 OnEnable 호출 후, 첫 프레임 업데이트 직전에 한 번 호출.다른 컴포넌트가 초기화된 이후 실행되므로, 상호작용 설정에 적합.게임 루프 (매 프레임 호출)Update()매 프레임 호출됨.키 입력, 캐릭터 이동 등 일반적인 게임 로직 처리.LateUpdate()모든 Update() 실행 후 호출됨.카메라 추적, 애니메이션 후처리 등에..
[CS] SOLID 원칙 SOLID 원칙은 객체지향 설계에서 유지보수성과 확장성을 높이기 위한 다섯 가지 핵심 원칙입니다. 단일 책임 원칙SOLID에서 가장 중요한 첫 번째 원칙, 클래스 또는 함수가 오직 한 가지만 책임집니다.다르게 말하자면 하나의 큰 클래스를 만들기보다는 여러 개의 작은 클래스를 만드는 편이 좋다는 것입니다 . 개방-폐쇄 원칙 클래스가 확장에는 개방적이되 수정에는 폐쇄적이어야 합니다.원본 코드를 수정하지 않고도 새로운 동작을 생성할 수 있도록 클래스를 구조화하세요.어떻게? 인터페이스와 추상화를 이용해서 리스코프 치환 원칙 파생된 클래스가 기본 클래스로 대체될 수 있어야 합니다.파생 클래스에만 있는 기능을 인터페이스 또는 별도 클래스로 옮겨 합성하세요. 인터페이스 분리 원칙어떠한 클라이언트도 자신이 사..
[C#] Boxing과 UnBoxing ✅ 핵심 정의Boxing값 타입을 참조 타입(object)으로 감싸는 과정int → object 등Unboxing참조 타입에서 다시 값 타입으로 꺼내는 과정object → int 등 🔸 예제 1: Boxingint num = 10;object boxed = num; // Boxing 발생int는 값 타입 → 스택에 저장됨object는 참조 타입 → 힙에 저장됨Boxing 시: num의 값을 힙에 새로 복사해서 object로 감🎯 즉, Boxing = 값을 힙에 복사 + 참조 타입으로 변환🔸 예제 2: Unboxing object boxed = 10;int num = (int)boxed; // Unboxing 발생boxed는 힙에 저장된 int 값의 참조(int)를 통해 다시 값 타입으로 꺼냄🎯 U..