닷넷 생태계
닷넷(.NET)은 소프트웨어 프레임워크로, 응용 프로그램의 개발 속도를 높이는데 도움이 되는 API(Application Programming Interface) 및 서비스 모음이라고 함.
닷넷 프레임 워크(.NET Framework), 닷넷 코어(.NET Core), 닷넷 스탠다드(.NET Standard)처럼 닷넷으로 시작하는 용어들은 모두 닷넷 생태계에 포함된다.
C#은 닷넷 생태계의 모든 영역에서 사용할 수 있는 프로그래밍 언어이다.
컴파일러
소스코드를 컴파일하여 실행파일로 만든다.프로그램을 실행하기 위해서는 '실행파일'만 있으면 되며, 소스코드는 전혀필요하지않습니다.
분류축
1.[언어 제공 여부] → 기본 타입
2.[메모리 구조] → 값 / 참조
3.[상속 구조] → object 최상위
ex) 내가 만든 class Player


C#에서 모든 타입은 값 형식이든, 참조 형식이든, 사용자 정의든, 기본 제공이든 최종적으로 object를 상속한다
C#은 기본 데이터 형식을 부품으로 삼아 구성되는 "복합 데이터 형식(Complex Data Type)을 제공합니다.
데이터 형식(Data Type)
"기본 데이터 형식"과 " 복합 데이터 형식"이 있다.(크게 숫자 형식과 논리 형식,문자열 형식, 오브젝트 형식)
C#이 제공하는 기본 데이터 형식에는 모두 15가지가 있다.
이 중에서 문자열 형식과 오브젝트 형식만 참조 형식에 해당, 나머지는 모두 값 형식이다.(15가지 기본 자료 형식 중 12가지를 숫자 데이터 형식(정수계열, 부동소수계열, 소수계열 이렇게 3가지로 나뉜다)으로 제공하고 있다 -->즉 대부분이 값형식이겠네?) p65 p85오브젝트형식
복합 데이터 형식의 종류에는 구조체와 클래스, 배열 등이 있다. 이미지나 소리 등의 데이터는 바로 이 복합 데이터 형식을 이용하여 나타낼 수 있다.
데이터 형식은 "기본 데이터 형식"과 "복합 데이터 형식"으로 분류하는 동시에 "값" 형식과 "참조" 형식으로도 분류할 수 있다.


기본 데이터 형식으로는 int, float,char,bool등등...
복합 데이터 형식으로는 class등등...
값 형식(Value Types) 과 참조 형식(Reference Types)
값 형식 == 값 타입 , 참조 형식 == 참조 타입 으로 읽어보기
값 형식은 변수가 담을 데이터를 말하고, 참조 형식은 변수가 값 대신 값이 있는 곳의 위치(참조)를 담는 데이터 형식을 말한다.
이 둘을 이해하려면 C#으로 작성한 프로그램이 사양하는 두가지 메모리 영역에 대해 알고 있어야 한다고 한다.
두가지 메모리 영역 중 하나는 스택(Stack), 다른 하나는 힙(Heap)이라고 한다.
이 두 메모리 영역 중에서 값 형식과 관련이 있는 것은 스택 메모리 영역, 참조 형식과 관련이 있는 것은 힙 메모리 영역이다.
스택과 값 형식
값 형식의 변수는 모두 이 스택에 저장된다.
다시 말해, 코드 블록 안에서 생성된 모든 값 형식의 변수들은 프로그램 실행이 중괄호 " }"를 만나면 메모리에서 제거된다.
힙과 참조 형식
스택은 청소부가 필요 없을정도로 시민의식이 투철한 메모리 구조이다. 자신이 담고 있던 데이터가쓰레기가 되지 않도록 모수 수거해가니깐.
반면에 힙은 저장되어 있는 데이터를 스스로 제거하는 메커니즘을 갖고 있지 않다.
(대신 CLR의 가비지 컬렉터라는 청소부를 따로 고용)
프로그래머가 힙에 데이터를 올려놓으면, 코드블록이종료되는지점과는 상관없이 그데이터는 계속 생명을 유지한다. 그리고 이 데이터는 프로그래머가 더이상 사용하지 않는 쓰레기가 됐을때 가비지 컬렉터가 가져다버린다. 그제서야 메모리에서 사라지는것이다.
참조 형식의 변수는 힙과 스택을 함께 이용하는데, 힙 영역에는 데이터를 저장하고 스택 영역에는 데이터가 저장되어 있는 힙 메모리의 주소를 저장한다.
데이터를 직접 저장하는 대신 실제 데이터가 저장되어있는 메모리의 주소를 "참조"한다고 해서 "참조 형식"인 것이다.
(왜 "참조 형식"이라고 이름이 붙여지는지 알 수 있음)
상수 (Constants), 열거형(Enumerator)
const
enum
코딩 기본 규칙
변수는 소문자 단어를 사용한다.
언매니지드언어/매니지드언어
언매니지드언어로는 C, C++,,,
매니지드언어로는 C#, JAVA, 파이썬,,,
정수계열 데이터 형식
| 데이터 형식 | 설명 | 크기(바이트) | 담을 수 있는 값의 범위 |
| byte | 부호 없는 정수 | 1(8비트) | 0 ~ 255 |
| sbyte | 1(8비트) | -128 ~ 127 | |
| short | |||
| ushort | |||
| int | 정수 | 4(32비트) | - 2,147,483,648~ 2,147,483,647 |
| unit | unsigined int 부호없는 정수 |
4(32비트) | 0 ~ 4,294,967,295 |
| long | 정수 | 8(64비트) | -922,337,203.685.477,508~ 922,337,203,685,477,507 |
| ulong | |||
| char | 유니코드 문자 | 2(16비트) |
부동 수소점 형식
| 데이터 형식 | 설명 | 크기(바이트) | 범위 |
| float | 단일 정밀도 부동 소수점 형식 (7개의 자릿수만) |
4(32비트) | -3.402823e38~3.4 02823e38 |
| double | 복수 정밀도 부동 소수점 형식 (15~16개의 자릿수만 다룰 수 있) |
8(64비트) | -1.79769313486232e308~ 1.79769313486232e308 |
IEEE754에 따르면 4바이트(32비트)크기의 flaot형식은 수로 표현할때 1비트를 부호전용으로 사용하고,
가수부 23비트를 수를 표현하는데 사용하고, 나머지 지수부 8비트를 소수점의 위치를 나타내기위해 사용한다.
오버플로우(Overflow) , 언더플로우(Underflow)
변수는 데이터를 담는 그릇과 같다. 그릇에 용량에 넘어서는 양의 물을 담으면 넘치는것처럼, 변수에도 데이터 형식의 크기를 넘어서는 값을 담게 되면 넘친다.
uint형 변수 a에 umt가 담을 수 있는 최 대값인 4,294,967,295를 넣어놓고 a에 1을 더해보자. 변수 a는 4294967295에 1을 더한 값인 4,294,967,296을 담을 수는 없습니다.
->결과는 오버플로우된 변수 a는 0을 가진다. uint가 가질 수 있는 최저값으로 돌아온 것.
각 데이터 형식의 최대값을 넘어가는 데이터를 저장할 때는 오버플로우가 일어나지만,
최저값보다 작은 데이터를 저장하면 언더플로우(Underflow)가 일어난다.
가령 byte 형식 변수에 -1을 담으려는 시도가 일어나면 실제로는 이 변수에 255가 담긴다.
모든 변수가 참조로 동작하는 것은 아니다.
float, int, string 등의 C#내장 변수는 참조로 동작하지 않는다. 이런타입을 값(Value)타입 이라고한다
참조 타입 변수는 값(실체)으로 향하는 참조를 저장하고, 값 타입의 변수는 해당 변수 공간에 값 자체를 저장한다.
우리가 사용할 변수 타입들을 구분하면 이렇다
| 참조 타입 | 값 타입 |
| clas 타입 유니티의 모든 컴포넌트 우리가 작성할 C#스크립트 (MonoBehaviour를 상속받는 클래스) |
C# 내장 변수 -bool -int -float -char -double ... struct(구조체) 타입 -Vector3 -Color ... |
몇가지 예외가 있지만 class로 만든 대부분의 타입은 참조로 동작한다.
유니티의 게임오브젝트, 컴포넌트,C#의 많은 타입이 클래스로 정의되어있다.
C# 내장 변수 타입과 Vector3 같은 struct 타입을 제외하면 우리가 사용할 대부분의 변수는 참조 타입으로 동작한다.
참조 변수는 실체가 아니라 실체로 향하는 참조값을 저장한다.
변수의 참조값으로 실체에 접근하는 참조 타입 덕분에 변수로 씬에 있는 게임 오브젝트와 컴토넌트에 접근하고 이들을 조종할 수 있다.
유니티는 수많은 종류의 컴포턴트를 미리 만들어 제공한다. 컴포넌트는 클래스타입이다. 클래스 타입의 변수는 참조 타입으로 동작한다.
결론적으로 씬에 존재하는 모든 '실체'컴포넌트는 코드상에서 참조 타입의 변수로 가리키고 사용할 수 있다.
스태틱(static)
static은 객체마다 따로 존재하는 것이 아니라, 클래스에 단 하나만 존재하며 모든곳에서 공유된다.
그래서 static은 "객체를 만들 필요없이, 모두가 공유해야 할 기능이나 상태"에 사용한다.
출처: 레트로의유니티6게임프로그래밍에센스
출처 : C#교과서, 뇌를자극하는c# 5.0프로그래밍, 레트로의유니티6게임프로그래밍에센스
'수업' 카테고리의 다른 글
| 20260225-1 (0) | 2026.02.26 |
|---|---|
| 261010 (0) | 2026.01.10 |
| 260102 (0) | 2026.01.05 |