링크 회전 및 이동

※ const VS 읽기전용
– const
ㄴ 초기화 후에는 값을 변경할 수 없습니다.
ㄴ 초기화는 선언 시점에만 가능
b 컴파일 시간 상수
-읽기 전용
ㄴ 초기화 후에는 값을 변경할 수 없습니다.
ㄴ 선언 및 생성시 초기화(1회) 가능
(예: 해상도 옵션의 설정 패널) (거의 변경되지 않는 옵션)
(예전에는 닉네임으로 사용했는데 요즘은 계속 바뀌어서 잘 안쓰고 있습니다)
b 런타임 상수
※ 컴파일시 상수는 변수를 실제 값으로 대체하며 런타임 상수는 변수 참조 유형입니다. 따라서 성능과 속도를 고려할 때 const > readonly
그러나 각 인스턴스에 다른 값을 할당하거나 사용자 정의 유형인 경우 읽기 전용을 사용하십시오.


아이덴티티
– 회전수를 0으로 바꾸는 키워드


C#
C# 언어의 문법을 배워야 하는 이유
– Unity 엔진에서 기본적으로 지원하는 대부분의 스크립트는 C# 스크립트입니다.
– Unity 엔진의 활용도를 높이려면 C#에 대한 지식이 필수적입니다.
– C# 구문을 몰라도 C, C++ 스타일로 작성이 가능하지만 결국 한계에 부딪힌다.
C# 프로그램 작동 방식
– C# 프로그램은 CLR(Common Language Runtime)이라는 Java의 가상 머신과 유사한 프로그램에서 실행됩니다.
ㄴ 이는 C/C++ 언어와 달리 컴퓨터가 직접 실행할 수 있는 실행 파일로 출력이 생성되지 않는다는 것을 의미합니다.
※ 공용 언어 런타임(CLR)
ㄴ Microsoft에서 개발한 가상 머신의 구성 요소(Windows만 해당)
ㄴ 크게 두 가지 기능이 있습니다.
b 1. 중간 언어용 Jit 컴파일러(제때에)를 사용하여 기계어로 변환
2. 가비지 컬렉터에 의한 동적 메모리 관리
※ 가상 기기
ㄴ 컴퓨터에서 가상으로 사용하는 컴퓨터
ㄴ 다음과 같은 모든 컴퓨팅 리소스의 가상화를 말합니다. B. 하나의 컴퓨터에서 둘 이상의 컴퓨터를 실행하는 하드웨어.
ㄴ C#은 CLR이라는 중간 과정을 통해 다른 언어의 사용을 지원합니다.
ㄴ CLR은 CIL(Common Intermediate Language) 코드를 읽어 운영체제가 이해할 수 있는 네이티브 코드로 변환합니다.
ㄴ 이때 서로 다른 언어가 만나는 지점이 IL이라는 중간 언어이고, CLR은 그 언어로 작성된 코드를 재실행한다.
플랫폼에 따라 컴파일하십시오.
※ 정리하면 CLR은 별도로 컴파일하여 실행하고 플랫폼에 맞게 다시 컴파일하는 기능입니다.
※ C/C++ 언어는 바로 컴파일하여 프로그램을 생성합니다.
CIL(일리노이)(공통 중간 언어)
.NET Framework에서 실행되는 언어
ㄴ .NET Framework 언어로 개발된 프로그램 코드는 컴파일 시 CIL이라는 파일에 바이너리 형태로 작성됩니다.
.넷 프레임 워크
ㄴ Windows 프로그램 개발 및 실행 환경
ㄴ 네트워크 작업, 인터페이스 등 많은 작업을 캡슐화하여 코딩 효율을 높입니다.
ㄴ 기능은 CLS(.NET Framework에 속하는 언어에 따라야 하는 언어 스택)(협약)
.Net 프레임워크를 따르는 모든 언어는 .Net 프레임워크에서 실행될 수 있으며 CLR이라는 가상 머신에서 실행되기 때문에 플랫폼 독립적이므로 궁극적으로 프로그래머에게 보다 편리한 코딩 환경을 제공합니다.
※ C# 언어는 컴파일 시 운영 체제에서 직접 실행할 수 있는 네이티브 코드로 바뀌지 않고 CLR에서 인식할 수 있는 IL이라는 중간 언어를 생성합니다.
또한 CLR이 실행되는 동안 IL 코드를 읽고 특정 운영 체제에 적합한 네이티브 코드로 변환합니다. (이 방법을 JIT 컴파일이라고 합니다.)
-> 즉, C# 프로그램은 컴파일+해석 하이브리드 방식으로 운영된다.
-> 실행 순서: C# 컴파일 -> IL 생성 -> CLR -> 실행 파일
지트
– C/C++에서처럼 프로그램을 실행하기 전에 처음으로 프로그램을 컴파일하는 대신 프로그램을 실행합니다.
필요한 부품을 정해진 시간에 빠르게 조립하는 방식
– JIT 컴파일 방식의 장점
ㄴ 네이티브 코드는 프로그램이 실행되는 동안 즉시 생성됩니다.
특정 운영체제에 최적화된 코드 생성이 가능합니다.
– JIT 컴파일의 단점
– 프로그램이 실행되는 동안 네이티브 코드가 생성되기 때문에 해당 코드를 생성하는 데 다소 시간이 걸립니다.
C# 언어가 다른 언어와 호환되는 이유
– C# 언어는 내부적으로 CTS 규칙에 따라 데이터 유형을 구현합니다.
공통 유형 시스템(CTS)
일반적인 유형 시스템
ㄴ .Net 호환 언어가 준수해야 하는 타입의 표준 규격으로 .Net 호환 언어를 생성하면,
CTS 표준을 충족해야 합니다.
ㄴ CTS를 모두 생성할 필요는 없으며, 필수 사양만 지원 가능하며, CTS 사양 외 신규 타입 생성 불가
C# 프로그램이 메모리를 관리하는 방법(가비지 컬렉션)
1. 스택 메모리 관리
2. 힙 메모리 관리
– C# 언어의 힙 메모리는 프로그래머가 직접 관리하는 C/C++ 언어와 달리 C# 언어의 힙 메모리는 가비지 컬렉션으로 관리된다.
ㄴ 메모리 누수를 고려하지 않아 개발 속도가 빠릅니다.
스택 메모리의 특징
– 스택 메모리는 로컬 속성을 가지므로 시스템에서 메모리를 관리합니다.
ㄴ 별도의 관리 로직 불필요
힙 메모리 기능
– C/C++ 언어와 달리 C# 언어의 힙 메모리는 프로그래머가 직접 관리하지 않는다.
가비지컬렉션을 통한 메모리 관리의 장점
– 메모리 누수에 대해 걱정하지 마십시오.
가비지 컬렉션을 통한 메모리 관리의 단점
– C# 언어는 힙 메모리를 할당할 수 있지만 직접 관리하지는 않습니다.
필요한 디스크 공간을 즉시 제거할 수 없습니다.
– 즉, 불필요한 메모리가 있음을 알더라도 제거할 수 있는 권한이 없습니다.
가비지 수집이 실행될 때까지 데이터는 메모리에 상주합니다.
– 가비지 콜렉션에 의한 메모리 관리는 많은 부하를 발생시킨다.
따라서 프로그램 논리를 작성할 때 항상 가비지 수집 상태에 주의를 기울여야 합니다.
또한 고성능을 요구하는 프로그램은 매우 깊은 최적화 노력이 필요합니다.
C# 프로그램에서 가비지 수집이 작동하는 방식

– C# 언어의 가비지 수집은 내부적으로 0~2 또는 3개의 메모리 위치를 가지며 힙 메모리를 관리합니다.
– 방금 할당된 0세대에 메모리가 있고 해당 세대가 가득 찬 경우 1세대에서 가비지 수집이 시작됩니다.
– 이 시점에서 가비지 콜렉션에서 제거되지 않은 메모리는 1세대로 이동됩니다.
– 마찬가지로 세대가 가득 차면 1세대가 가비지 수집됩니다.
– 세대는 동일(연속 데이터가 메모리에 들어가도 2세대에 남음)
ㄴ 2세대로 세대교체를 하면 더이상 세대교체는 없습니다.
– 2세대 가비지 수집은 상위 가비지 수집 실행에 하위가 포함되기 때문에 전체 가비지 수집이라고도 합니다.
※ 가비지 콜렉션이 많은 연산을 요구하는 이유는 가비지 콜렉션이 내부적으로 수행될 때 메모리 단편화를 수정하기 위한 로직이 실행되기 때문입니다.
※ 많은 참조 관계가 형성되면 일반적으로 눈에 띄는 성능 저하가 발생합니다.
※ 저장 간이화(쇼트, 그린)
디스크 공간이 작은 청크로 분할되어 여유 공간이 충분하지만 할당할 수 없는 상태.
일반적인 문제는 메모리의 빈 공간이 멀리 떨어져 있기 때문에 큰 개체를 할당하기 어려워진다는 것입니다.
C# 프로그램의 가비지 컬렉션 동작 규칙
– 위에서 언급했듯이 상위 세대 가비지 수집은 하위 세대 가비지 수집을 동반합니다.
또한 한 세대의 이동은 하층에서 상층으로 한 방향으로만 진행되기 때문에 상층으로 올라간 세대는 하층으로 내려갈 수 없다.
C#으로 프로그램 작성 시 주의사항
– 항상 가비지 수집 상태를 먼저 처리하고 논리를 작성하십시오.
1. 메모리 조각화 수정
ㄴ 2. 메모리 조각화 해결을 통한 기준 위치 수정
3. 참조 관계를 설정할 때 디자인에 주의하십시오.