안녕하세요
게임개발자가 되기위해 공부하고있는 구구입니다.
오늘은 지금까지 배웠던 C#의 클래스의 내용을 정리하고 가고자 이렇게 정리노트를 쓰게되었습니다.
이전 정리노트에 있던 단축키는 그대로 가져온 뒤 추가할 예정입니다.
(Ctrl + F 로 찾아서 쓰시면 편해요)
- 컬렉션(Collection)
- 데이터 저장, 검색, 기타 데이터 처리 특화
- 자료 구조(Data Structure)
- 선언방법, 참조방법, 중요 메소드
- ArrayList
ArrayList arrList = new ArrayList();
or
int[] arrData = {100, 200, 300};
ArrayList copyarrList = new ArrayList(arrData);
- 배열과 비슷
- 크기가 유동적(동적)
- 활용 메소드
Add : 객체를 ArrayList 끝부분에 추가
Contains : 해당 데이터가 있는지 확인 후 bool값 반환
Insert : ArrayList에 저장된 인덱스에 데이터를 삽입( List.Insert(int index, object value); )
Remove : 지정된 값을 찾아서 삭제
RemoveAt : 지정된 인덱스 삭제(전체 길이가 줄어들음)
Sort : ArrayList에 포함된 데이터를 정렬 (데이터 타입이 동일할 경우) (거꾸로 출력하고 싶으면 for문으로 바꾸기.)
- 활용 프로퍼티
Count : ArrayList에 데이터의 총 개수
Capacity : ArrayList에 저장할 수 있는 저장공간의 수 설정
- Queue

Queue arrList = new Queue();
or
int[] arrData = {100, 200, 300};
Queue copyarrList = new Queue(arrData);
- 순차적 데이터 처리
- FIFO(첫번째 넣은 데이터가 첫번째로 빠져나감)
- 게임에서 순차적 AI기능 구현
Queue의 경우 정수기 옆 종이컵의 형태라고 생각하시면 이해하기 편합니다. 먼저 넣은 종이컵이 아래쪽에서 먼저 뽑아서 쓸 수 있다는 점이 중요합니다.
- 활용 메소드
Clear : Queue에 모든 데이터 제거
Contains : Queue에 해당 데이터가 있는지 확인 후 bool값을 반환
Dequeue : 제일 아래의 데이터를 반환, 데이터 제거
Enqueue : Queue에 데이터 추가
Peek : Queue의 제일 아래 데이터를 읽음(데이터가 그대로 있음)
- Stack

Stack stack = new Stack();
stack.Push("a");
int[] arrData = {100, 200, 300}
Stack stackCopy = new Stack(arrData);
- 순차적 데이터 처리
- LIFO(Last In First Out)
- 뒤로 가기 기능 구현
- Push(), Pop(), Peek()
- 활용 메소드
Clear : 스택에 있는 모든 데이터 제거
Contain : 스택에 해당 데이터가 있는지 확인후 bool값 반환
Push : 넣기 기능(Queue의 Enqueue와 비슷)
Pop : 빼기 기능(Queue의 Dequeue와 비슷, 하지만 Pop은 마지막에 들어온 데이터를 내보냄)
Peek : Pop()을 이용해서 데이터를 빼낼때 가장 먼저 나오는 값이 뭔지 확인할 때 사용
- 활용 프로퍼티
Count : 스택에 있는 요소의 총 개수를 가져옴
- Hashtable
Hashtable hashTable = new Hashtable();
hashTable.Add("name", "Jack"); //name이라는 키에 Jack이라는 값을 저장한다.
hashTable["weight"]=10.8f;
or
Hashtable hashTableCopy = new Hashtable()
{
["pos"] = 10,
["name"] = "Jack",
["weight"] = 10.8f,
};
- 키와 값이 쌍으로 구성되는 데이터
- 탐색 속도가 빠르고 사용이 편리
- 활용 메소드
Add : key와 value를 Hashtable에 추가(key는 null이 허용x, value는 null허용)
Clear : Hastable에 있는 모든 데이터 제거
Contains, ContainKey, ContainsValue : Hashtable에 특정 키가 들어있는지 확인, bool값 반환
GetHash : 지정한 Key의 해시코드 반환
Remove : Hashtable에 지정된 데이터를 제거
- 활용 프로퍼티
Count : Hashtable에 저장된 key와 value의 쌍의 개수를 가져옴
Item : Hashtalbe의 인덱서
Keys : Key값의 ICollection을 가져옴
Values : Value값의 ICollection을 가져옴
- Hashtable의 값 읽기 방법
foreach를 써서 값을 읽는데 다른 데이터와는 다른 부분이 있음.
foreach(object key in hashTable.Keys) { //해당 참조변수의 Keys를 foreach를 통해 먼저 읽기
Console.WriteLine("key: {0}, data: {1}", key, hashTable[key]); //배열을 읽는것 처럼(key가 인덱스의 느낌)
}
- 인덱서
- 배열 or 컬렉션의 외부 접근
- 키워드 : get, set, return, value, this[int index]
- 다른 클래스에서 배열이나 컬렉션을 private 속성으로 만들었을때 그 배열 혹은 컬렉션에 인덱스에 접근

AA 클래스의 num이라는 배열은 private속성입니다.(즉, 메인함수에서 접근이 불가능합니다.)
하지만 public int this[int index]와 같은 방식으로 배열의 인덱스에 접근하는 방식으로
값을 대입하거나 읽는것이 가능합니다.
이때 this라는 키워드를 메인함수에서 똑같이 쓰는것이 아니라
참조변수명[인덱스] = 원하는 값;
의 형태로 값을 대입합니다.
보통 위의 형태보다는 아래의 형태를 더 자주씀(예외처리가 되어있기 때문)
public string this[int index]
{
get{
if(index >= 0 && index < arrayList.Count)
return (string)arrayList[index];
else
return null;
}
set{
if(index >= 0 && index < arrayList.Count)
arrayList[index] = value;
else if(index == arrayList.Count)
arrayList.Add(value);
}
}
- 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에 들어감
변수명.ToString; = stirng으로 변경
자료형.Parse(변수명); = 원하는 자료형으로 변경
Convert.To자료형(변수형) = 원하는 자료형으로 변경
(숫자자료형)변수명 = 캐스트 연산자
const 자료형 변수명; = 상수 선언
enum 식별자(이름) = 열거형 데이터 형태
F12, alt+F12 = 함수로 이동하거나 함수를 보여주는 단축키
static void PrintValue(int a, int b,int c = 100, int d = 0) = 디폴트 매개변수
int Total(params int[] values) = params 를 이용한 파라미터의 제한 없이 처리
배열.Length = 해당 배열의 크기(길이)
string.Empty = string에 아무값도 없이 비우겠다는 뜻
public static void Clear(Array array, int index, int length); = 시작인덱스부터 length만큼 지워라
배열.Clear(Array array, int index, int length); = Array Clear 사용법
배열.GetLength(원하는 행) = 배열의 크기를 return
(캐스트)배열.Clone(); = 배열 복사, call by value, 기존의 형은 object형이라서 캐스트를 통한 형변환 필요
readonly = 읽기전용이라는 뜻
class Sub:Super = sub라는 클래스는 Super라는 클래스의 자식클래스라는 뜻
base.항목 = 부모 클래스의 public, protected 로 지정된 항목들을 호출
Ctrl + R+ R = 해당단어를 다른 단어로 교체
string.Format("{0}", i)} = string에 i값 집어넣기
String.Concat(s1, s2, s3); = string형의 s1 s2 s3를 이어붙이기
name.IndexOf('p') = p라는 글자가 name이라는 string형 안에서 몇번째 인덱스에 있는가
name.Trim(지워야할 단어); = 지워야 할 단어(문자열)를 name이라는 string 형에서 지워줌
name.Replace('r', 'l'); = name이라는 string에서 r을 l로 바꾸기
string[] name = name.Split(new char[] {' '}); = name이라는 string을 빈칸을 기준으로 나눠서 배열로 저장함
'게임 개발 공부 > 개념 총 정리' 카테고리의 다른 글
C# 정리 노트 3(클래스) (0) | 2021.12.17 |
---|---|
C# 정리 노트 2(함수, 배열) (0) | 2021.12.05 |
C# 정리 노트 1 (0) | 2021.11.30 |
댓글