전체 글 113

클래스 파고들기

클래스가 뭔가요?클래스는 객체를 만들기 위한 설계도로 데이터와 함수를 하나로 묶어 표현한 구조를 의미합니다.클래스는 객체가 가져야할 상태와 행동을 정의하고, 이 클래스를 기반으로 여러 객체를 생성할 수 있습니다. 클래스와 구조체의 차이가 뭔가요?클래스와 구조체는 문법상 비슷해 보이지만, 메모리할당방식과 참조방식에 중요한 차이점이 있습니다.클래스는 힙 메모리에 할당되는 참조타입이며, 구조체는 스택 메모리에 할당되는 값 타입 입니다.이로인해 클래스는 변수를 다른 변수로 변경할 시 기존에 같은 메모리를 참조하고 있던 다른 변수 또한 영향을 받으며구조체의 경우 스택에 할당되어, 값 자체만 복사하므로 복사본을 수정하더라도 원본에는 영향이 없다는 차이점이 있습니다.또한 구조체의 경우 특수한 상황이 아니라면 스택메..

CS 2025.04.24

IL2CPP 파고들기

IL2CPP 란 뭔가요?C#으로 작성된 스크립트의 실행방식을 C++ 로 변경하는 방식을 의미합니다.최종적으로 네이티브 기계어로 빌드를 미리 마치고, 해당 파일을 빠르게 실행시킬수 있다는 장점이 있습니다. 구체적인 IL2CPP 과정에 대해 설명해주세요우선 기존의 .NET 컴파일 과정으로 IL 변환까지 동작은 동일합니다.이후 유니티가 지원하는 IL2CPP 변환기를 통해 C++ 코드로 변경되고, AOT 컴파일링 과정을 통해컴퓨터가 더빠르게 동작할 수 있는 네이티브 언어의 실행파일을 만들어낼수 있습니다. Mono방식과 차이점이 뭔가요?.NET으로 만들어내는 CIL은 똑같지만 이후의 과정에서 차이가 있습니다.Mono방식은 CIL 까지만 만들어두고 이후 CLR의 JIT 컴파일러가 해당파일을 실행환경에 맞게변환하..

Unity 2025.04.24

CIL 의 메타데이터 파고들기

메타데이터란?컴파일시 C#의 중간언어파일 CIL은 명령어들의 중간언어만 포함된것 뿐만 아니라 메타데이터 또한 포함되어있습니다.이 테이터는 데이터에 대한 정보를 나타내는 데이터로, 빌드로 부터 얻어낸 파일에는 코드, 명령어 뿐만 아니라 이런 메타데이터까지 포함됩니다.메타데이터의 종류로는 어셈블리, 클래스 이름, 변수, 메서드, 상속구조 등을 나타냅니다.이러한 데이터를 통해 C#의 리플렉션 기능을 활용할 수 있게 됩니다. 메타데이터는 그럼 리플렉션을 활용하기 위해 만들어진건가요?메타데이터는 CLR이 프로그램을 메모리에 올릴때 상속 구조가 어떤지, 필드는 뭔지, 메서드는 어떤게 있는지 파악하기 위해 활용됩니다.즉 프로그램을 동작하는데 참조에 대한 정보를 나타내는 참조 설명서이라고 보시면 됩니다.또한 CLR이..

C# 2025.04.22

컴파일의 각 단계 파고들기

컴파일 과정어휘분석 - 구문분석 - 의미분석 - 중간언어코드생성 - 최적화 - 기계어코드생성 - 링킹 어휘 분석 단계컴퓨터는 소스코드로 작성된 문자열을 그대로 해석할 수 없습니다.그렇기에 소스코드를 이해하기 앞서 문장을 키워드 단위로 분할하고 각 키워드 용도(변수, 기호, 연산자 등)를확인해 종류별로 태그를 붙이는 과정을 의미합니다. 구문 분석 단계어휘 분석 단계로 분리된 키워드를 통해 문장이 형성되는지 검사하는 단계입니다.각 문장은 세미콜론으로 구분되며 '주어와 동사관계가 옳바르게 형성되었는지'와 같이각 키워드들이 문법에 맞게 작성되었는지 확인하는 과정입니다. 의미 분석 단계문장의 형태가 완성되었더라도 의미가 부적합하다면 의미오류로 검출되는 과정입니다.타입의 불일치와 같이 실행할수 없는 상황인지 ..

CS 2025.04.22

컴파일 파고들기

컴파일이 뭔가요?사람이 이해하기 쉬운 코드로 구성된 고수준언어를 컴퓨터가 이해할 수 있는 저수준 언어 기계어 또는 중간언어로 번역하는 과정을 의미합니다. 왜 기계어와 중간언어로 나뉘는건가요?프로그램 빌드시 중간언어로 번역하는 컴파일 과정이 한번 발생되며, 프로그램 실행 시 준비되어 있던 중간언어를 CPU가 이해할 수 있게 번역하는 컴파일 과정이 일어납니다. 왜 굳이 두번으로 나뉘는건가요? 그냥 한번에 기계어로 끝내면 되는거 아닌가요?우선 CPU 마다 이해할 수 있는 기계어가 전부 다릅니다. 이에따라 고수준언어를 기계어로 바로 번역하게 될 경우모든 CPU 마다 다른 빌드작업이 필요하게 됩니다.그에 반면 중간언어로 컴파일을 미리 준비해놓고 이를 실행환경에 맞게 약간의 컴파일 과정으로 유연성을 확보할 수 있습..

CS 2025.04.22

오버로드, 오버라이드(가상테이블 개념) 파고들기

오버로딩이란?같은 이름을 가진 메서드 또는 연산자를 매개변수의 형태를 다르게 정의해 여러 버전으로 정의하는것을 의미합니다. 연산자의 오버로딩이란 무엇인가요?기존에 기본적으로 정의되어있던 연산자(+,-,== 등) 동작방식을사용자가 정의한 타입에 대해 별도로 새롭게 정의하는 방식입니다. 예를들어 '내 타입끼리 +를 하게되면 이런식으로 계산해' 와 같이 새로운 규칙을 추가하거나, 개념을 덧붙이는 것을 의미합니다.대신 연산자의 의미와 너무 다르게 동작할 경우 코드의 가독성이 떨어질 수 있어 주의해야 합니다.public static Vector2 operator +(Vector2 a, Vector2 b){ return new Vector2(a.x + b.x , a.y+b.y) } 오버로딩은 어떻게, 이렇게 동..

CS 2025.04.21

Rotation 파고들기

로테이션이란?오브젝트가 3D공간 안에서 어떤 방향을 바라보고 있는지를 의미합니다.로테이션은 내부적으로 쿼터니언으로 저장되며 클라이언트가 다룰땐 보통 오일러 각도를 다루게 됩니다. 쿼터니언은 뭔가요?로테이션 처럼 3D 공간에서 회전을 표현하는 방법중 하나이며 XYZW 로 구성되어 있습니다. 왜 쿼터니언 개념이 필요한가요?유니티는 오일러 각 만 사용할 경우 다음과 같은 문제가 발생될 수 있습니다.첫째로 짐벌락, 두번째 부드러운 회전, 세번째 회전합성의 문제점이 있습니다.이러한 문제를 쿼터니언을 활용해 회전을 매끄럽고 안전하게 사용할 수 있습니다. 오일러를 활용한 회전시 짐벌락 현상이 왜 발생되나요?오일러 회전의 경우 X > Y > Z 순으로 하나씩 차례대로 회전시키는 방식입니다.이러한 과정은 각 회전이 ..

Unity 2025.04.19

RectTransform 파고들기

RT 란 뭔가요?UI 요소 전용의 트랜스폼 컴포넌트 입니다.일반적으로 게임오브젝트의 위치, 회전, 크기를 제어할때 Transform 컴포넌트를 활용합니다.하지만 UI요소는 Transform만으로는 부족하며단순한 위치 뿐만 아니라 부모 대비 상대적위치, 크기, 앵커와 피벗 기반 정렬을 추가적으로 다루기 위해 RT가 필요합니다.RT는 기본적으로 Transform의 기능을 그대로 가지고 있으며 추가적으로 사각형 형태의 영역정보를 관리합니다. RT 왜 필요한가요?UI요소는 해상도가 달라지거나, 비율이 달라진다면 자동으로 반영되어야 합니다.Transform 만으로는 이를 대응하기 쉽지 않으며 상대적 위치를 활용해 이에 대비할 수 있습니다. AnchoredPosition이란 무엇인가요?부모 기준으로 가지는 상대..

Unity 2025.04.19

Static 파고들기

스태틱이란 뭔가요?클래스의 인스턴스가 아닌 클래스 자체에 속한 멤버를 의미합니다.일반적으로 클래스 내부 변수, 메서드는 인스턴스가 생성될때마다 개별적으로 존재하지만스태틱으로 선언된 멤버는 프로그램 시작시 메모리에 한번에 로드되어 모든 인스턴스가 공유하게 됩니다. 그로 인해, 전역적으로 관리되어야 하는 값, 공용 함수를 스태틱으로 선언해 활용이 가능합니다.다만 유의할 점은 스태틱 멤버의 메모리 해제 시점이 명확하지 않으므로씬 전환시 메모리에 남아 예상치 못한 공유 문제가 발생될 수 있습니다. 스태틱 멤버는 어떤 메모리에 할당되나요?정적 메모리 영역의 Data,BSS 각 영역에 할당되며 이는 프로그램이 종료될때까지 남아있게 됩니다.스태틱 멤버는 클래스가 처음 활용할때 초기화되며 이후 인스턴스가 활용할 수 있..

CS 2025.04.18

싱글톤 패턴의 개념과 대체 수단

싱글톤은 프로그램 내에서 단 하나의 인스턴스만 존재하도록 보장하는 디자인 패턴이다.이는 공통된 데이터를 전역적으로 접근하거나, 중앙 관리가 필요한 시스템을 구현하는데 활용 될 수 있다. 특징으로는 어디서든 접근이 가능해 공용메서드, 데이터를 제공할 수 있으며 중복생성을 방지해 시스템 안정성을 확보할 수 있다단, 싱글톤으로 인해 우려되는 사항은 과도한 의존성이 생길 경우 유지보수가 어려워질 수 있으며 유닛테스트 , 디버깅이 어려워질 수 있다. 이를 대체할 수 있는 방법 및 수단싱글톤은 매우 편리하지만 의존성이 강해지며 유지보수의 어려움을 불러올 수 있다.이렇게 의존성 문제로 싱글톤 활용을 배제해야할 경우 다른 방법으로는 가장먼저 의존성 주입 방식이 있다. 직접 참조를 통해 접근하는 방식과 달리 의존성 주입..

디자인 패턴 2025.04.15