CS 21

싱글톤 패턴

싱글톤 패턴의 개념싱글톤 패턴이란, 특정 클래스의 인스턴스(객체)가 프로그램 내에서 오직 하나만 생성되도록 보장하고, 어디서든 그 유일한 인스턴스에 접근할 수 있도록 하는 디자인 패턴입니다. 즉, 아무리 new 키워드를 여러 번 호출해도 새로운 객체가 생성되는 것이 아니라, 최초에 생성된 단 하나의 객체만을 계속해서 반환합니다. 게임 개발에서는 전역적으로 상태를 관리하거나 유일해야 하는 시스템에 주로 사용됩니다. 예를 들어, 게임의 모든 설정을 관리하는 GameSettings 클래스나, 사운드를 총괄하는 SoundManager, 플레이어의 데이터를 관리하는 PlayerDataManager 등이 싱글톤 패턴의 좋은 예시입니다. 싱글톤 패턴의 구현 핵심싱글톤 패턴을 구현하기 위한 핵심 아이디어는 다음과 같습..

디자인 패턴

디자인 패턴의 개념디자인 패턴(Design Pattern)이란 소프트웨어를 설계할 때 자주 발생하는 문제들을 해결하기 위한, 검증된 해결책들의 모음이라고 할 수 있습니다.우리가 요리를 할 때, 맛있는 김치찌개를 만들기 위한 '황금 레시피'가 있는 것처럼, 프로그래밍 세계에도 특정 문제를 효과적으로 해결하기 위한 '모범 답안' 혹은 '설계의 정석'이 존재합니다. 이것이 바로 디자인 패턴입니다.중요한 점은 디자인 패턴은 특정 언어나 기술에 종속된 완성된 코드가 아니라, 문제 해결을 위한 설계 사상(Concept) 이라는 점입니다. 따라서 개발자는 디자인 패턴을 이해하고, 현재 마주한 문제 상황에 맞게 적절히 변형하여 적용할 수 있어야 합니다. 디자인 패턴을 장점재사용성 및 확장성 향상 : 검증된 설계 구조를..

해쉬 테이블 / 레드 블랙 트리

C++ vs C# 형태 비교C++ 컨테이너 형태C# 컬렉션 형태핵심 자료구조 (동일)특징 (동일)mapsetSortedDictionary SortedSet레드-블랙 트리자동 정렬O(logN) 성능unordered_mapunordered_setDictionary HashSet해시 테이블비정렬평균 O(1)의 빠른 성능 ※ 아래에서부터는 C++ 기준으로 설명하도록 하겠다. 연관 VS 비정렬 연관 비교구분연관 컨테이너 (map, set)비정렬 연관 컨테이너 (unordered_map, unordered_set)핵심 자료구조레드-블랙 트리 (Red-Black Tree)해시 테이블 (Hash Table)데이터 정렬키(Key) 기준으로 자동 정렬됨정렬되지 않음시간 복잡도검색, 삽입, 삭제 모두 O(logN)평균적으로..

CS/자료구조 21:12:09

Map

map이란?Map은 Key와 Value를 하나의 쌍(pair)으로 묶어서 저장하는 연관 컨테이너(Associative Container)입니다. Key 값을 이용해 Value에 빠르게 접근(검색, 삽입, 삭제)하는 것을 목적으로 합니다. 주요 특징은 다음과 같습니다.Key-Value 쌍 : 모든 데이터는 Key와 그에 해당하는 Value로 구성됩니다.고유한 Key : Key 값은 중복될 수 없습니다. 만약 중복된 Key로 새로운 값을 추가하면, 기존의 Value가 덮어씌워집니다.빠른 검색 속도 : Key를 기반으로 데이터를 검색하기 때문에 매우 빠른 시간 복잡도를 가집니다. 일반적으로 O(log N) 또는 O(1)의 시간 복잡도를 보입니다. C++과 C#에서의 MapC++C++ 표준 라이브러리(STL)에..

CS/자료구조 19:24:02

Virtual / Abstract / Interface

비교구분Virtual (가상)Abstract (추상)Interface (인터페이스)한 줄 요약기능의 선택적 재정의기능의 강제적 재정의구현을 위한 명세/계약구현 여부✅ 구현된 본체(body) 있음❌ 본체(body) 없음 (선언만)❌ 본체(body) 없음재정의(Override)선택 (필요시 override)필수 (반드시 override)필수 (반드시 구현)인스턴스화가능불가능불가능다중 상속/구현단일 상속단일 상속다중 구현 가능키워드virtual / overrideabstract / overrideinterface / :(구현)관계is-a (상속 관계 강화)is-a (상속 관계)can-do (기능 중심) Virtual "기본 레시피를 제공할게, 바꾸든 말든 자유야!"virtual은 부모 클래스에 이미 완성된 기..

CS/C# 2025.10.13

오일러(Euler) 쿼터니언(Quaternion) 짐벌락(Gimbal Lock)

영상/사진 출처 : https://www.youtube.com/watch?v=vHr77Dre25Q영상/사진 출처 : https://www.youtube.com/watch?v=owdRmhIq6vk 오일러오일러 각은 우리가 일상에서 흔히 사용하는 각도계처럼, x, y, z 세 개의 축을 기준으로 오브젝트를 회전시키는 방식입니다. 각 축에 대한 회전량을 개별적인 각도로 표현합니다. 회전 방식 : X, Y, Z와 같은 특정 순서대로 각 축에 대해 순차적으로 회전을 적용합니다.(Unity에서는 기본적으로 X, Y, Z 순서로 오일러 각을 계산합니다.) 축의 부모-자식 관계 : 오일러 회전은 각 회전축을 마치 부모-자식 관계로 구성하는 특징이 있습니다. 예를 들어 XYZ 회전에서 Z는 할아버지, Y는 아버지, X는..

CS/게임 수학 2025.10.13

삼각비(SIN, COS, TAN)

삼각비의 기초 : 직각삼각형모든 삼각비의 논의는 직각삼각형에서 시작됩니다. 직각삼각형은 한 각이 90도인 삼각형으로, 각 변은 기준각(θ)에 따라 다음과 같이 불립니다.빗변 (Hypotenuse) : 직각과 마주보는 가장 긴 변입니다.높이 (Opposite) : 기준각과 마주보는 변입니다.밑변 (Adjacent) : 기준각에 붙어있는 변 중 빗변이 아닌 변입니다.이를 바탕으로 세 가지 기본 삼각비는 두 변의 비율로 정의됩니다.사인 : sin(θ) = 빗변/높이​코사인 : cos(θ) = 빗변/밑변​탄젠트 : tan(θ) = 밑변/높이​이 비율은 삼각형의 크기와 상관없이 각도(θ)가 같다면 항상 일정합니다. 단위 방향 벡터의 이해 (핵심)여기서 "단위 방향 벡터"라는 중요한 개념이 등장합니다. 이 개념을..

CS/게임 수학 2025.10.09

내적을 활용한 몬스터 시야각 판정

(예전에 2D 게임을 만들 때를 생각하며, 문제를 만들어봄.) ✍️ 문제2D 공간에 플레이어와 몬스터가 있습니다. 몬스터는 자신의 오른쪽을 정면으로 바라보고 있으며, 시야각은 90도(좌우 45도씩)입니다. 아래 좌표를 바탕으로 플레이어가 몬스터의 시야에 들어왔는지 판별하세요. (※ 이 문제에서는 거리는 생각하지 않는다)플레이어 위치 (Player Position) : P = (7,5)몬스터 위치 (Monster Position) : M = (4,3)몬스터의 전방 벡터 (Monster Forward Vector) : F = (1,0) ✅ 문제 풀이( ※ 수식 깨짐 문제로 인해, 이미지로 대체함.)

CS/게임 수학 2025.10.09

백터의 내적 외적

참고 영상 : https://www.youtube.com/watch?v=bYivO9VgN0k&t=2s벡터의 내적 (Dot Product)두 벡터가 얼마나 같은 방향을 바라보고 있는가? 두 벡터가 얼마나 같은 방향을 바라보고 있는가를 나타내는 연산입니다. 내적은 두 벡터를 곱하여 스칼라(Scalar) 값, 즉 방향이 없는 크기만 있는 값을 결과로 얻습니다. 이 값은 두 벡터의 방향적 유사성을 나타냅니다. 두 벡터 A와 B가 있을 때, 내적은 기호 '∙'를 사용하여 표기합니다. ✅ 개념 및 공식 ✅ 핵심 특징 및 게임 속 활용내적 결과의 부호만으로 두 벡터의 방향 관계를 직관적으로 파악할 수 있습니다.A⋅B>0 : 두 벡터의 사이각 θ가 90도보다 작습니다. (같은 방향을 향함)A⋅B=0 : 두 벡터의 사이..

CS/게임 수학 2025.10.09

오버로딩(Overloading)과 오버라이딩(Overriding)

다형성(Polymorphism)을 구현하는 방식이지만, 동작 원리와 사용 목적에서 명확한 차이가 있습니다. 오버로딩 (Overloading) 이란?"이름은 같지만, 매개변수가 다른 여러 개의 메서드를 정의하는 것"오버로딩은 하나의 클래스 내에서 같은 이름의 함수를 여러 개 가질 수 있게 해주는 기능입니다. 컴파일러는 메서드를 호출할 때 전달되는 매개변수의 개수, 타입, 순서를 보고 어떤 메서드를 호출할지 결정합니다. 즉, 메서드 시그니처(Method Signature)의 일부가 달라야 합니다. 핵심 특징:같은 클래스 내에서 발생합니다.메서드 이름은 동일해야 합니다.매개변수의 개수나 타입, 순서가 달라야 합니다.반환 타입(Return Type)만 다른 것은 오버로딩으로 인정되지 않습니다.컴파일 타임(Com..

CS/개념 2025.10.08