C# 정리노트 4(컬렉션)
본문 바로가기
  • 게임 개발자가 되고싶은 구구
게임 개발 공부/개념 총 정리

C# 정리노트 4(컬렉션)

by gugu99 2021. 12. 18.
반응형

안녕하세요

게임개발자가 되기위해 공부하고있는 구구입니다.

 

오늘은 지금까지 배웠던 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

C#-Queue-Enqueue-Dequeue-Peek-FIFO-first-in-out
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

C#-stack-Push-Peek-Pop-LIFO-last-in-first-out
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

댓글