목록전체 글 (96)
강께르의 개발일지
많은 부분이 기능으로 제공하기에 WINAPI처럼 프로그래머가 구현하려고 하지 않아도 된다. 3D 그래픽스에 대한 이해가 필요하다. 스크립트를 작성할 때 유의할 점 클래스명과 파일명이 일치해야한다. 다르면 게임 오브젝트에 스크립트가 컴포넌트로 추가되지 않는다. 일치하지 않으면 빌드가 되더라도 그 컴포넌트의 기능을 사용할 수 없다. 유니티를 옮기거나, 버전 관리를 위해 저장할 때 4개의 폴더만 관리하면 된다. Assets Packages ProjectSettings UserSettings 나머지는 폴더나 파일은 유니티에 알아서 관리해준다. Packages 폴더 : 기본 기능 외에 필요한 기능을 이 폴더에 포함시키는 형태로 사용된다. 예 : 3d로 프로젝트를 만들면 2d에 필요한 패키지는 포함되지 않아서 만약..
델리게이트의 연장선 이벤트 키워드 이벤트 키워드는 델리게이트의 일종으로 Publisher와 Subscriber의 관계를 이용해 Publisher의 이벤트 호출로 인해 등록된 Subscriber에게 일괄적으로 함수를 호출하게 하는 메시지 방식의 느낌을 띄는 것 같다. public event (이벤트 델리게이트 데이터형 이름) (이름); 으로 선언한다. 하지만 보통 system에서 제공하는 이벤트 델리게이트를 사용한다. public event eventhandler (이름); eventhandler는 반환형이 void이며 매개변수가 (object sender, EventArg e)를 받는다. 아직까지는 매개변수로 전달받은 것으로 어떻게 굴리는지 잘 모르겠다. 하지만 이 델리게이트와 연결된 메소드를 지닌 클래..
1. 비트맵 색상 합치기와 추출을 비트 플래그로 구현 using System; public class Test { public static uint MergeARGB(uint a, uint r, uint g, uint b) { uint result = 0; result |= b; result |= (g > 16; g = (argb & 0x0000FF00) >> 8; b = (argb & 0x000000FF); // 위 방법보단 아래 방법을 더 추천 //a = (argb >> 24) & 0xFF; //r = (argb >> 16) & 0xFF; //g = (argb >> 8) & 0xFF; //b = argb & 0xFF; } public static void Main() { uint colorA = Me..
열거형 열거형에서 비트 플래그를 사용하는 방법 [Flags] 일반적인 함수 호출방법과 유사 invoke : 참조하고 있는 함수를 호출하는 델리게이트 메소드 스태틱과 인스턴스 메소드 상관없이 클래스의 메소드를 받아올 수 있다. 인스턴스 메소드를 저장하는 것은 인스턴스의 멤버를 이용해서 할 수 있기에 그 델리게이트에는 인스턴스의 정보도 들어가 있다. p.Target == r Target 인스턴스 비교 검사 메소드 Method 현재 참조하고 있는 메소드 이름을 string으로 반환한다. 델리게이트는 참조하고 있는 참조형 변수여서 인스턴스의 내용이 바뀌면 델리게이트도 다른 결과를 반환한다. n개의 메소드를 참조하는 방법 기존의 참조하는 메소드를 유지하고 새 메소드를 추가하고 싶으면 += 연산자로 메소드를 피연산..
1. boxing과 unboxing이 왜 나쁜가? 언제 일어나는가? boxing은 값형 변수를 참조형 변수로 형 변환하는 경우에 스택 영역에 있던 데이터를 힙 영역으로 로드하는 것을 의미한다. unboxing은 참조형 변수를 값형 변수로 형 변환하는 경우에 힙 영역에 있던 데이터를 스택 영역으로 로드한 것을 의미한다. 대표적으로 object 클래스로 매개변수를 전달 받을 때, 그 매개변수로 기본 데이터형이 전달되어서 발생하는 경우이다. boxing의 경우, 불필요하게 스택 영역의 데이터를 힙 영역에 올리기 위해 메모리 공간을 확보하고 데이터를 올리는 일련의 과정을 수행되어야한다는 점에서 나쁘다고 이야기할 수 있고, unboxing의 경우, 형 변환이 수행되는 과정에서 올바른 형 변환을 하고 있는지 컴파일..
오버로딩과 오버라이딩이 섞인 상황 변수가 참조하고 있는 인스턴스 기준으로 매개변수를 결정해 오버로딩 메소드를 호출하지 않고 변수 그 자체 기준으로 매개변수를 결정해 오버로딩 메소드를 호출한다. -> 변수가 자식 인스턴스를 참조해도 변수 데이터형이 부모 클래스이면 부모 클래스형의 오버로딩 함수를 호출한다. 오버로딩 : 컴파일 타임에 어떤 함수를 호출할지 결정된다. 오버라이딩 : 런타임에 어떤 함수를 호출할지 결정된다. System.object 클래스 모든 데이터형을 상속해주는 클래스 어떤 데이터형이든 오브젝트 클래스로 암시적 형변환 가능하다. 기본 데이터형은 구조체인데 object 클래스 형변환이 가능하다. 그래서 기본 데이터형도 object형으로 매개변수를 받을 수 있다! Stack 클래스 예 스택 내부..
- const, readonly 차이점 설명 readonly : 런타임 중에 결정된다. 필드 초기화와 생성자 초기화로 사용되며 초기 할당만 허용한다. 사용자 정의 데이터형에 대해서 사용 가능 const : 컴파일 타임 중에 결정된다. 기본 데이터형에 대해서 사용 가능 - 깊은 복사 얕은 복사 설명 깊은 복사 : 복사받을 인스턴스를 하나 생성한 후에 복사해줄 인스턴스의 멤버 값들을 싹 다 복사하는 것 얕은 복사 : 인스턴스 참조값만 복사 - this, base 키워드 쓰이는 곳 this : 멤버와 매개변수의 이름이 똑같아서 구분해야할 필요가 있을 때, 해당 인스턴스로 메소드나 멤버변수를 갖고와야 할 필요가 있을 때, 해당 인스턴스를 매개변수로 전달하고 싶을 때 base : 부모 클래스의 메소드를 호출할 때..
C#에서는 헤더와 코드가 분리되어 있지 않아 한 파일 내에 선언과 정의를 한 번에 적어놓는다. - 클래스에 대해 - 문법 모양 (접근 제어 권한) (클래스 키워드) (이름) { (바디, 멤버 선언 및 정의) } 바디에 들어갈 수 있는 것들 : 멤버 변수 / 메소드 / 생성자 / 소멸자 / 프로퍼티 / 인덱서 등 멤버 변수, 필드 선언 방법 : (접근 제어 권한) (데이터형) (식별자) 접근 제어 권한을 필드마다 하나씩 따로 부여해줘야 한다. 필드 초기화 : 선언과 동시에 할당이 가능하다. 인스턴스 생성 시, 메모리에 로드될 때 할당된다.(그 후 생성자 호출) readonly 키워드와 const 키워드 readonly : 컴파일 타임에 할당되지 않고 런타임 중에 약속된 값으로 할당하게 하는 키워드, 필드 ..
1. C/C++ 배열과 C# 배열 비교 배열은 동일한 데이터형이 연속적으로 메모리에 저장되어 있는 자료구조를 의미한다. C++에서는 이를 취급할 때, 포인터를 이용하여 다룬다. 배열의 이름은 포인터로 배열의 첫 번째 주소를 의미하고 임의의 인덱스를 접근할 때는 선언한 데이터형의 바이트 크기만큼 인덱스 값을 곱해 첫 번째 주소값에 더해줘 접근하는 등 포인터와 밀접한 관련이 있다. C#에서의 배열은 포인터를 주로 다루지 않기에 배열은 하나의 클래스로 구현되어있다. 클래스로서 여러 메소드들을 지니고 있고 사용할 수 있다. 2. 피보나치 재귀함수 구현 + 그림판 콜스택 설명 static int Fibo(int x) { if (x == 1) return 1; else if (x == 2) return 1; els..
1. 배열 Array 클래스 데이터형 수치데이터형들에 대해 정렬이 가능하다. 하지만 사용자 정의 데이터는 기준을 정해줘야 정렬이 가능하다. 배열은 고정 사이즈를 정해줘야 한다. 이 점 때문에 장점이 있다. 연속된 데이터형을 일렬로 메모리에 로드할 수 있는데 이 때, 일렬로 늘어놓은 메모리에 대하여 배열은 인덱스를 알고 있으면 바로 접근이 가능하기에 알고리즘에서 말하는 시간 복잡도면에서 빠른 속도를 지닌 편이다. 즉, 랜덤 엑세스가 가능하다고 이야기한다. 접근하는 방법으로는 (시작 배열 인덱스) + sizeof(elem) * n이며, 이는 상수 복잡도를 가진 배열의 장점을 잘 나타내준다, 단점은 일렬로 메모리에 늘어놓은 데이터의 연속이라는 점에서 삽입과 삭제면에서 치명적으로 작용한다. 중간 혹은 앞의 인덱..