안녕하세요
게임개발자가 되기위해 공부하고있는 구구입니다.
오늘은 지금까지 배웠던 C#의 내용들이 많아서 한번쯤
정리하고 가고자 이렇게 정리노트를 쓰게되었습니다.
(Ctrl + F 로 찾아서 쓰시면 편해요)
- .Net Framework

C#을 통해 프로그래밍을 합니다. 그래서 컴파일까지만 해주면 나머지는 알아서 컴퓨터가
기계어로 바꿔준 후 운영체제로 넘기기 때문에 맥과 윈도우 모두 호환이 가능하게됩니다.
- C#의 특징
1. C++에서 파생된 객체 지향 언어
2. 형식 안정성(객체지향언어는 형식의 안정성이 있음)
3. Java의 특징 + C, C++
- C#의 장점
1. 입문자에게 적합한 언어
2. 메모리 관리가 쉽다(Garbage Collector)
3. 다양한 라이브러리 지원
- 변수
데이터 형식 + 식별자(이름)
데이터를 저장하는 공간
ex) int num;
지역변수
- { }(브레이스) 코드블록 내부에 선언되고 코드블록 외부에서는 사용불가한 변수
- 정수형 데이터의 표현 범위

- 실수형 데이터의 표현범위
※주의 사항
float(f)형과 decimal(m)형은 사용시 리터럴 접미사를 붙여야 합니다.
ex)
float f = 123.345f;
decimal d = 12345678912334567m;
- 문자열
1. 문자 - char {작은 따옴표(' ')}
ex)char a = 'A';
2. 문자열 - string {쌍 따옴표(" ")}
ex)string s = "abcd";
3. 문자열 제어 방법
+ -> 두개의 문자열을 합
== -> 두개의 문자열 비교
Replace -> 특정문자를 변경
ToUpper() ->모두 대문자로 변경
ToLower() -> 모두 소문자로 변경
- 객체 데이터 형태(object)
어떤 데이터 형이든 모두 처리가 가능하다는 장점
클래스에 상속이 적용된다는 점
- enum
enum 식별자(이름)
{
}
열거형 데이터 형태
코드를 짤때 가독성을 올려준다
enum형을 쓸때는 자동으로 첫번째 데이터부터 0 부터 끝에있는 데이터까지 번호를 매기기 때문에
int형으로 바꿔서 출력시 숫자 0부터 차례대로 출력이 됩니다.
ex)
enum DAY_OF_WEEK
{
SUN, //0
MON, //1
TUE, //2
WED, //3
THU, =100 //100
FRI, //101
SAT //102
}
- nullable 형식
데이터자료형? 식별자
기존 데이터형의 값 + null값 저장이 가능
ex)int? num = 100;
HasValue라는 값을 통해서 값이 있는지 없는지 확인
(값이 있다면 True가 나오고 값이 없다면 False)
- var
var num=100;(선언과 동시에 초기화해야됨)
자료형이 불분명한 변수의 자료형으로 주로 사용
암시적 형식의 지역 변수(보통 {}안에서 정의된 함수)
선언과 동시에 초기화
지역변수로만 사용가능
'for ~ each'에서 자주사용
- const
const 자료형 변수명
상수(변수와 달리 한번 정해지면 변하지 않음)
기존 변수 선언에 const 추가
주로 대문자로 표기
ex)
const int NUM = 100;
const string LINE = "------------"
- 10진수가 아닌 다른수를 찾을때 앞에 붙여야 하는 기호
2진수 = 0b(0B)
16진수 = 0x(0X)
ex)
int a = 0b11111111;
int b = 0xFF;
- 데이터 형의 응용
- 형변환
정수 <-> 실수(캐스트연산자: '( )')
문자열 <-> 기본 데이터형(ToString(), Parse(), Convert.~)
정수에서 실수로 바뀔때는 데이터의 손실이 없지만 실수를 정수로 바꾸게 되면 소수점 뒷자리가
짤리기 때문에 데이터의 손실이 발생
1. 캐스트 연산자
(숫자자료형)변수명
ex) (double)num, (int)dnum2
2. ToString()
변수명.ToString
ex)
int a =100;
string strA = a.ToString(); // "100"
3.Parse
자료형.Parse(변수명);
ex)
int ParseA = int.Parse(strA);
4.Convert
Convert.To자료형(변수형)
ex)
int convertA = Convert.Toint32(strA);
- 값형식 vs 참조형

값형식
우리가 알고있는 int와 같은 수치데이터, char, bool 과 같은 자료형을 저장
값형식은 스택영역에 값이 바로 저장
참조형
값이 힙영역에 저장이 되고 그 때 저장된 힙 영역의 주소를 스택영역에 받고 이를 또 str값이 받습니다.
- 메모리의 구조
1.코드 영역
- 실행할 프로그램의 코드가 저장되는 영역
- CPU가 해당 영역에 저장된 명령을 가져와서 처리
- 프로그램이 시작하고 종료될때까지 메모리에 계속 남아
2.데이터 영역
- 전역변수와 정적(static) 변수가 저장되는 영역
- 프로그램의 시작할 때 할당되고 끝나면 소멸
3.힙 영역
- 프로그래머에 의해 동적으로 할당되고 해제되는 영역
- 값이 너무 크거나 그 크기를 미리 알 수 없는 경우 힙영역을 이용
- 가벼운 값은 스택영역을 이용해서 빠르게 처리를 하지만 무거운 값의 경우는 스택영역이 다 커버하기 힘들어서
힙영역에 저장 후 그 주소값을 스택영역에서 쓰는 형식을 사용
4.스택 영역
- 함수호출과 관계된 지역변수와 매개변수가 저장되는 영역
- 함수가 호출되면 할당되고 함수가 끝나면 소멸
- Console.ReadLine()
Console.ReadLine()의 경우 받을때 string으로 받기 때문에 숫자 자료형으로 변환하고 싶다면
바꿔줘야합니다. 이때 받을때 부터 숫자로 받을 수도 있는데 아래의 예시와 같습니다.
int num1 = int.Parse(Console.ReadLine();)
과 같은 방식으로 입력받은 값을 Parse를 이용해 int로 바로 바꾸고 num1에 대입하는 방식을 사용가능합니다.
- 연산자
1. 단항 연산자
-한 개의 데이터로 처리
2. 이항 연산자
-두 개의 데이터로 처리
3.삼항 연산자
-세 개의 데이터로 처리
- 산술 연산자
모든 수치 데이터 형태에서 상용가능
ex) +, -, *, /, %(나머지)
- 증감 연산자
++, --
++와 --가 앞에오면 전치연산으로 계산 들어가기 전에 먼저 +1혹은 -1을 해주고 들어가는 것
뒤에오면 후치 연산으로 계산이 들어간 후에 +1혹은 -1을 해주는 것
- 할당 연산자
ex) =, +=, -=, *=, /=, %=
a += b
라고 하면
a = a + b
- 관계 연산자
피연산자와의 비교, 즉 bool이 출력
ex) <, >, <=, >=, ==, !=
- 논리 연산자
1. A && B
와 같은 형태일때 &&는 A와 B 둘다 True 일 경우에만 True이고 나머지는 False를 반환하는 연산자
ex) &&, ||, !
2. A || B
와 같은 형태일때 ||는 A와 B 둘중 하나라도 True라면 True를 나머지는 False를 반환하는 연산자입니다.
3. !
는 토글연산자라고 주로 말하는데 False를 True로 True를 False로 바꿔줍니다.
- 조건 연산자
(조건식) ? 처리1 : 처리2
삼항 연산자
조건문이 True일 경우 처리 1로 False일 경우 처리 2로 넘어가게되는 연산자
- 비트 연산자
<<, >>
비트연산자는 2진수를 사용
불필요한 메모리를 줄일 수 있고 연산속도가 빠르기 때문에 프로그램 최적화에 도움
비트연산자를 쓰게되면
<<의 경우는 왼쪽으로 한 bit씩 움직여라 라는 뜻
>>의 경우 오른쪽으로 한 bit씩 움직여라 라는 뜻
<< 와 >>는 shift 연산자
- 비트논리 연산자
&, |, ^, ~
1. &의 경우
0000 0101 & 0000 1111 = 0000 0101
로 각각의 bit를 서로 AND연산 즉 둘다 1이면 1 나머지는 0을 반환하는 연산
2. |의 경우
0000 0101 | 0000 1111 = 0000 1111
로 각각의 bit를 서로 OR연산 즉 둘중 하나라도 1이라면 1 나머지는 0을 반환하는 연산
3. ^(XOR)
두개의 비트가 서로 다를 경우만 1을 반환하는 연산자
4. !(NOT)
보수연산, 비트 반전을 해주는 연산자
- null 병합 연산자
A = B ?? C
null값을 체크하는 연산자
B가 null이 아니면 B를 출력하고 B가 null이라면 C를 출력하라는 뜻
- 연산자의 우선순위
https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/
- 우선순위를 많이 쓰는 것은 헷갈릴 수도 있고 복잡해서 가독성이 떨어지고 잘 만들어진 코드가 아닐 가능성이 높음
- 순서상 문제가 생길경우 괄호를 쓰거나 하는 방식으로 커버
- 분기문(Branch)
- if
if(조건식){
}
특정조건을 이용하여 코드를 다른 섹션으로 분기하는 것
if, if~ else, if~ else if ~ else 와 같은 형식
- switch
switch(조건)
{
case 조건:
~~~~~~
break;
case 조건:
~~~~~~
break;
}
if문과 다르게 여러개의 조건식이 있을경우 주로 사용
default가 있는데 default는 위의 케이스에 해당하지 않는 모든 case의 경우
- 반복문
- while
while(조건식){
반복되는 코드
}
조건식을 만족하지 않을때 까지 반복되는 코드를 계속 수행
- do~while
do{
반복되는 코드
}while(조건식);
일단 반복되는 코드를 1회 먼저 실행하고 조건식을 만족하면 반복되는 코드를
계속 쓰다가 조건식을 만족하지 않으면 빠져나감
- for
for(초기식, 조건식, 증감식){
반복되는 코드
}
초기식을 확인후 조건식을 보고 반복되는 코드를 수행후 증감식을 이행한 뒤 다시 조건식을 확인
이때 조건식을 만족하면 다시 반복되는 코드를 수행하고 증감하고 다시 조건식을 확인
만약 조건식을 만족하지 않으면 for문을 탈출
for문은 여러번 중첩 가능(즉 for문안에 for문이 존재할 수 있습니다.)
- 무한 반복문
while(true){
무한반복코드
}
for(; ;){
무한반복코드
}
무한반복은 게임에서 봤을때 게임은 항상 계속 플레이하기 때문에 무한반복코드가 쓰인다는 사실을 알면 좋을것
- 점프문
1. break
무한반복을 끊기 위해 break을 사용
2. continue
continue가 나왔을때 continue아래의 남은 반복되는 코드 무시하고 바로 조건식으로 다시 이동
3.goto
특정 지점을 지정해서 그곳으로 이동
goto는 사용하지말라고 권장되는 경우가 많음.
- C#을 쓰면서 쓰게될 여러가지 단축키, 코드의 의미
using System = System을 사용하겠다고 미리알림, 선언된 네임스페이스 내부 개체들에 접근
namespace = 그룹화,동일한 함수의 이름 사용가능
class = 필드(변수를 묶어놓는 곳), 메소드(함수)가 포함된 곳, 프로그램을 구성하는 기본
; = 코드 문장의 끝
{} = 코드 블록(블록단위로 코드를 구분)
// = 한줄주석
/* */ = 여러줄 주석
static(함수속성) void(리턴형) Main(함수이름)(string[] args(파라미터, 매개변수))
= 가장 중요한 메소드, 최초의 진입점, 모든 프로그램은 메인 메소드가 반드시 존재
Ctrl + F5 = 디버그 하지 않고 시작
= = 대입하다
== = 같다
GetType = 실제 자료형이 어떤 자료형이 되었는지를 확인하기 위해서 사용( 변수명.GetType() )
Console.ReadLine() = 입력 ( ex)string inputNum = Console.ReadLine(); )
Console.Clear(); = 도스창에서 화면 지우기
Random rnd = new Random();
int rndNum = rnd.Next(0, 4);
= rnd값이 랜덤으로 정해지고 이때 rnd값이 0부터 3까지의 범위를 가지고 이 값들 중 하나가 rndNum에 들어감
'게임 개발 공부 > 개념 총 정리' 카테고리의 다른 글
C# 정리노트 4(컬렉션) (0) | 2021.12.18 |
---|---|
C# 정리 노트 3(클래스) (0) | 2021.12.17 |
C# 정리 노트 2(함수, 배열) (0) | 2021.12.05 |
댓글