- Today
- Total
프로그래밍 농장
C# 프로그래밍_1 본문
Why C#?
-> 유니티의 경우도 실제로는 C++로 되어있지만, C#으로 한번 Wrapping하여 사용하는 방식으로 구동된다.
"CLR" (Common language Runtime)
-CLR is the basic and Virtual Machine component of the .NET Framwork
-컴파일된 c# 코드를 실행하는 역할
-> 자바에서 jvm과 같이 c#에서는 .NET Framwork 위에서 구동된다
-> why? 리눅스 , 윈도우, 맥과 같이 다양한 os상에서 구동되어야 하기떄문에 위와같은 프레임워크 위에서 사용된다.
원래 .NET Framwork는 윈도우상에서만 가능하였다. -> 이후 mono라는 개인재단에서 .NET 프레임워크를 오픈소스화 시켜서 닷넷 자체를 안드로이드나 리눅스, 아이폰에서 돌아가도록 하였다.
Mono Framework 를 통하여 ONECODE가 실행되었다 !
-> 2010년 이후에서 MONO재단이 자마린 재단으로 이름이 바뀌고, 이를 윈도우가 직접 인수하면서 오픈소스로 전환하였다.
C# 코드를 컴파일한 코드 -> DLL 파일로 제공 -> DLL 파일 형식으로 제공
Mono framwork(Tamatrin) : 멀티플랫폼에서 구동가능하도록한것이다.
유니티 파일에서는 .cs 파일과 .meta 파일이 존재한다.
항상 파일네임과 같은 이름으로 생성된다. 하지만 깃허브에서는 항상.meta파일을 gitignore을 사용하여 제거해주어야한다.
자바의 경우 Main 이라는 클래스가 별도로 존재하는데 유니티-c#에서는 이것을 내장시켜놓은것이다. -> unity DLL
-> 그렇기에 유니티 C#에서는 main이라는 개념이 별도로 없다.
- Monobehavior 란? : 유니티에서 가장 기본이 되는 클래스이며, Gameobject를 사용하기위해서는 꼭 클래스에 상속시켜주어야한다. -> Monobehavior가 없다면 유니티상에서 컴포넌트 등등.. 을 Gameobect에 붙히지를 못한다.
Monobehavior의 생성주기 : Awake() -> [ onEnable() ] Start() -> update() -> [ TriggerEnter()/ CollisionEnter()/OnDisable() 과 같은 물리] -> onDestory()
onEnable() : setActive()와 비슷한 유형
update() : 프레임당 수행 -> 컴퓨터의 사양에 따라 달라질수있음.
- 자료형 ( ex. bool , byte, char, int . . . ) : 메모리에 어떤식의 변수를 할당할것을 정해주는 것
signed : 0부터 시작되는 양의 정수 / unsigned : - 부터시작되는 음의 정수
부동소수점(Float) :
고정소수점(Decimal) : 최대 16byte까지 잡을수있다. (but, 메모리를 많이 잡아먹는다.)
부동(Foating(뜰 부: 떠다닌다))소수점 / 고정(Fixed) 소수점
- 변수 (메모리에 할당(적재)) ex. 숫자, 문자, 문자열 . .
- 리터럴 : 별도의 선언을 한하고 사용하는 리터럴 상수
프로그래밍을 할떄, 변수=명사 / 함수=동사 라고 가정하면 편하다.
ex) FPS게임에서 '총을 쏴서 적군을 맞춘다'
-> 총 , 적군 = 명사(변수 생성)
-> 쏜다, 맞춘다 = 동사(함수 생성)
Debug.Log(_numberWithFloat3 - 0.1m); // m:decimal(부동소수점)을 표현
-> 부동소수점을 타 형식과 연산하면 에러가 난다.
ex) A(소수점) == B(소수점) : 이와같은 소수점 비교는 비주얼스튜디오에서 하는것은 비추
-> 정 하고싶다면 이를 문자열화 시킨후 글자를 비교하는 방법이있다. (자리수를 잡고 TWIN이라는 작업을 실제로 현업에서 함)
- 연산자
기본연산자( +, -, /, %. . ) / 복합 대입 연산자(+=, -=, . . ) / 증감연산자 ( ++, -- . . )
비교연산자(boolean, <, >=, >, <= . .) /
- 문자형(char) . .
- 문자열(string) . .
- Bool형 : 자료의 참/거짓을 확인하기 위한 자료형 (true / false)
- 논리 연산자 : Boolean IsDead = true; / Debuging(!IsDead)
^ : xor / && / & / || / | / |= . .
ex) false && (Instantiate("Enemy") == null ) -> &&(and)일시 앞의 값이 false면 뒤는 아예 실행을 안하기 때문에 뒤까지 확인을 하고싶으면 & 하나만 사용하면된다.
-> enemy를 생성하라고 시켰는데, enemy가 없다면 프로그램상에서 null을 출력한다.
ex) true || false
if ( true || ture -> true ) -> 위와 같이 앞이 true면 그냥 뒤를 아예 검사하지않음 .(실행 x) 똑같이 전체적으로 수행시키고 싶으면, 위와 마찬가지로 | 를 하나만 써주면 된다.
ex) Boolean A = true;
A &= false; A= false&&A;
a |= false -> a = false||a;
- 형변환(Casting)
ex) int a = 3;
float b = 4f;
a = b 일때 형변환이 일어난다.
-> 암시적 형변환 : int -> float으로의 변환은 상관없음. but, 반대로 float -> int의 경우에는 가수,지수부에서 지수부를 날려야하기에(손실되는 경우가 생길떄)는 암시적 형변환이 이루어진다.
-> 명시적 형변환 : 위와 마찬가지로 버리는것이 생기는 순간 명시적 형변환이 이루어진다.
- var : 암시적 자료형
-> 굳이 형 지정을 안해도 자동으로 잡아줌
ex) int a =3; / float b = 1.23f; / char c = 'h'; . .
var 를 사용할경우 형을 자동으로 잡아줌.
-> js의 var와는 다름 -> js&python의 경우 JIT(Just-In-Time)컴파일 방식이기 떄문에 되든 안되든 위부터 한줄한줄 수행시킴
c#에서의 var
- 선언할때 값을 지정해주어야한다
- 자료형을 자동으로 구분해준다
- 지역변수에서만 사용이 가능하다
- 숫자 내장 타입 (int, float, double . .) 사용시는 var는 주의 (지양)
: why? -> 형변환 문제가 발생하기 떄문 : ex) var a =1.23f; / var b = 3; a =b ; -> ?
왠만하면 var을 사용하는 이유 : 코드를 간결하게 작성하기 위하여
- 코드 표기법
- 파스켈 케이스
-카멜 케이스 (단어를 대문자로 구분지음) ex. dieCount
- 스네이크 케이스 ( 단어를 _로 구분지음) ex. die_count
배열 : 같은 자료형만을 사용 + 같은 이름을 사용 + 메모리상에 순차적(ex. int -> 4byte만큼) 으로 저장
-> 메모리상에 일렬로 저장이 되기 때문에 순착적으로 접근이 가능하다 ( index 형식 )
int[5] arrayHp = new int[5];
다차원 배열 :
public class Day1Ex2 : MonoBehaviour
{
private int[] _nArrayHp = new int[] { 1, 2, 3, 4, 5 };
public float[,] _nArrayHp2 = new float[,]
{
{ 1f, 2f, 3f, 4f, 5f },
{ 6f, 67f, 8f, 9f, 10f}
};
public float[,] _nArrayHp3 = new float[2, 5];
// Start is called before the first frame update
void Start()
{
Debug.Log(_nArrayHp2[0,0]);
Debug.Log(_nArrayHp2[0,1]);
Debug.Log(_nArrayHp2[1,0]);
//가변배열
public float[][] _nArraryHp3 = new float[5][]
{
new float[]{1f,2f,3f,4f,5f},
new float[]{6f,7f,8f,9f},
new float[]{1f,2f,3f},
new float[]{6f,7f},
new float[]{1f},
};
'C#' 카테고리의 다른 글
쉽게 배우는 C# 알고리즘 프로그래밍 Part.1 - 1 [ C# ] (0) | 2022.07.13 |
---|---|
쉽게 배우는 C# 알고리즘 프로그래밍 Part.1 - 1 [ C# ] (0) | 2022.07.13 |
액션 / 람수표현식 함수 [ Unity ] (0) | 2022.07.13 |