๐ต C#, Unity | Part 2 - ์น์ 1. ์ ํ ์๋ฃ ๊ธฐ์ด
๋ฐฐ์ด, ๋์ ๋ฐฐ์ด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๋น๊ต
์ ํ ๊ตฌ์กฐ
์ ํ ๊ตฌ์กฐ๋ ์๋ฃ๋ฅผ ์์ฐจ์ ์ผ๋ก ๋์ดํ ํํ
- ๋ฐฐ์ด
- ์ฐ๊ฒฐ๋ฆฌ์คํธ
- ์คํ / ํ
๋น์ ํ ๊ตฌ์กฐ
๋น์ ํ ๊ตฌ์กฐ๋ ํ๋์ ์๋ฃ ๋ค์ ๋ค์์ ์๋ฃ๊ฐ ์ฌ ์ ์๋ ํํ
- ํธ๋ฆฌ
- ๊ทธ๋ํ
/ ๊ตฌ๋ถ์ /
๋ฐฐ์ด :
- ์ฌ์ฉํ ๋ฐฉ ๊ฐ์๋ฅผ ๊ณ ์ ํด์ ๊ณ์ฝํ๊ณ (์ ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ)
- ์ฐ์๋ ๋ฐฉ์ผ๋ก ๋ฐฐ์ ๋ฐ์ ์ฌ์ฉ
์ฅ์ : ์ฐ์๋ ๋ฐฉ
๋จ์ : ๋ฐฉ์ ์ถ๊ฐ/์ถ์ ๋ถ๊ฐ
๋์ ๋ฐฐ์ด :
- ์ฌ์ฉํ ๋ฐฉ ๊ฐ์๋ฅผ ์ ๋์ ์ผ๋ก ๊ณ์ฝ
- ์ฐ์๋ ๋ฐฉ์ผ๋ก ๋ฐฐ์ ๋ฐ์ ์ฌ์ฉ
๋ฌธ์ ์ : ์ด์ฌ ๋น์ฉ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋?
๋์ ๋ฐฐ์ด ํ ๋น ์ ์ฑ : - ์ค์ ๋ก ์ฌ์ฉํ ๋ฐฉ๋ณด๋ค ๋ง์ด, ์ฌ์ ๋ถ์ ๋๊ณ (๋๋ต 1.5~2๋ฐฐ) ์์ฝ
- ์ด์ฌ ํ์๋ฅผ ์ต์ํ
์ฅ์ : ์ ๋์ ์ธ ๊ณ์ฝ (๋ฐฉ ์ถ๊ฐ ์์ฝ์ผ๋ก ์ด์ฌ ํ์ ์ต์ํ)
๋จ์ : ์ค๊ฐ ์ฝ์ /์ญ์ ๊ฐ ์ด๋ ต๋ค.
์ฐ๊ฒฐ ๋ฆฌ์คํธ :
- ์ฐ์๋์ง ์์ ๋ฐฉ์ ์ฌ์ฉ
์ฅ์ : ์ค๊ฐ ์ถ๊ฐ/์ญ์ ์ด์
๋จ์ : N๋ฒ์งธ ๋ฐฉ์ ๋ฐ๋ก ์ฐพ์ ์๊ฐ ์์ (์์ ์ ๊ทผ Random Access๋ถ๊ฐ)
๋์ ๋ฐฐ์ด ๊ตฌํ ์ฐ์ต
class MyList<T> //๋ฆฌ์คํธ๋ ์ ๋ค๋ฆญํ์์ด๋ฏ๋ก<T>๋ฅผ ๋ฃ์ด์ค๋ค { const int DEFAULTSize = 1; // ๋ฐฐ์ด์ ์ฌ์ด์ฆ ์ ์ธ T[] _data = new T[DEFAULTSize]; // ๋ฐฐ์ด ์ ์ธ public int Count = 0; // ์ค์ ๋ก ์ฌ์ฉ์ค์ธ ๋ฐ์ดํฐ ๊ฐ์ public int Capacity { get { return _data.Length; } } // ์์ฝ๋ ๋ฐ์ดํฐ ๊ฐ์ // ์๊ฐ ๋ณต์ก๋ : 0(1) ์์ธ ์ผ์ด์ค : ์ด์ฌ ๋น์ฉ์ ๋ฌด์ํ๋ค. public void Add(T item) // ๋ฐ์ดํฐ ์ถ๊ฐ { // 1. ๊ณต๊ฐ์ด ์ถฉ๋ถํ ๋จ์ ์๋์ง ํ์ธํ๋ค. if (Count >= Capacity) { // ๊ณต๊ฐ์ ๋๋ ค์ ๋ค์ ํ๋ณดํ๋ค T[] newArray = new T[Count * 2]; for (int i = 0; i < Count; i++) //์ด์ฌ๋ฅผ ์์ผ์ค๋ค { newArray[i] = _data[i]; } _data = newArray; } // 2. (๊ณต๊ฐ์ด ํ๋ณด๋์๋ค๊ณ ๊ฐ์ ์) ๊ณต๊ฐ์๋ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ค๋ค. _data[Count] = item; Count++; } // ์๊ฐ ๋ณต์ก๋ : 0(1) public T this[int index] // ์ธ๋ฑ์๋ฅผ ๊ตฌํํ๋ ๋ถ๋ถ { get { return _data[index]; } set { _data[index] = value; } } // ์๊ฐ ๋ณต์ก๋ : 0(N) public void ReoteAt(int index) { // 101 102 103 104 105๋ฒ ๋ฐฉ์ด ์์ ์ // 103 ๋ฒ๋ฐฉ์ ์ง์ธ๋ (*103์ด ์์ด์ง ๋*) 104 /105๋ฅผ ์์ผ๋ก ๊ฐ์ ธ์จ๋ค for (int i = index; i < Count - 1; i++) _data[i] = _data[Count + 1]; _data[Count - 1] = default(T); Count--; } }
public void Initialize() { // ๋์ ๋ฐฐ์ด _data2.Add(101); _data2.Add(102); _data2.Add(103); _data2.Add(104); _data2.Add(105); int temp = _data2[2]; // ๋ฐ์ดํฐ ์ถ๊ฐ // ์ธ๋ฑ์๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ค // 103์ด ์ถ์ถ๋๋ค. _data2.RemoveAt(2); // ๋ฐ์ดํฐ ์ญ์ // ๋ช๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ค. }
์ฐ๊ฒฐ๋ฆฌ์คํธ ๊ตฌํ ์ฐ์ต
public void Initialize()
{
// ์ฐ๊ฒฐ ๋ฆฌ์คํธ
_data3.AddLast(101);
_data3.AddLast(102);
LinkedListNode<int> node = _data3.AddLast(103);
_data3.AddLast(104);
_data3.AddLast(105);
_data3.Remove(node);
}
class MyLinkedListNode<T>
{
public T Data;
public MyLinkedListNode<T> Next; // ๋ค์ ๋ฐฉ
public MyLinkedListNode<T> Prev; // ์ด์ ๋ฐฉ
}
class MyLinkedList<T>
{
public MyLinkedListNode<T> Head = null; // ์ฒซ๋ฒ์งธ
public MyLinkedListNode<T> Tail = null; // ๋ง์ง๋ง
public int Count = 0;
// ์๊ฐ ๋ณต์ก๋๋ 0(1)
public MyLinkedListNode<T> AddLast(T data) // ์๋ก์ด ๋ฐฉ์ ๋ฌ๋ผ๊ณ ์๊ตฌํ ๋์
{
MyLinkedListNode<T> newRoom = new MyLinkedListNode<T>(); // ์๋ก ๋ง๋ ๋ฐฉ
newRoom.Data = data; // ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ค๋ค.
// ๋ง์ฝ์ ์์ง ๋ฐฉ์ด ์์ ์์๋ค๋ฉด, ์๋ก ์ถ๊ฐํ ๋ฐฉ์ด ๊ณง Head์ด๋ค.
if (Head == null)
{
Head = newRoom;
}
// 101, 102, 103, ๋ง ์๋ค๊ฐ 104๊ฐ ์ถ๊ฐ๋๋ฉด 104๊ฐ ๋์ด๋ค.
// ๊ธฐ์กด์ [๋ง์ง๋ง ๋ฐฉ]๊ณผ [์๋ก ์ถ๊ฐ ๋๋ ๋ฐฉ]์ ์ฐ๊ฒฐํด์ค๋ค.
if (Tail != null)
{
Tail.Next = newRoom;
newRoom.Prev = Tail;
}
// [์๋ก ์ถ๊ฐ๋๋ ๋ฐฉ]์ [๋ง์ง๋ง ๋ฐฉ]์ผ๋ก ์ธ์ ํ๋ค.
Tail = newRoom;
Count++;
return newRoom;
}
// ์๊ฐ ๋ณต์ก๋๋ 0(1)
// 101 102 103 104 105
public void Remove(MyLinkedListNode<T> room)
{
// [๊ธฐ์กด์ ์ฒซ๋ฒ์งธ ๋ฐฉ์ ๋ค์ ๋ฐฉ]์ [์ฒซ๋ฒ์งธ ๋ฐฉ์ผ๋ก] ์ธ์ ํ๋ค.
if (Head == room)
Head = Head.Next;
// [๊ธฐ์กด์ ๋ง์ง๋ง ๋ฐฉ์ ์ด์ ๋ฐฉ]์ [๋ง์ง๋ง ๋ฐฉ์ผ๋ก] ์ธ์ ํ๋ค.
if (Tail == room)
Tail = Tail.Prev;
// ์ด์ ์ ๋ฐฉ์ด ์๋ค๋ฉด ์ด์ ๋ฐฉ์ ๋ค์ ๋ฐฉ์ ์ฐ๊ฒฐํ๋ค
// 103๋ฒ์ ์ญ์ ํ ๋ 102๋ฒ๊ณผ 104๋ฒ์ ์ฐ๊ฒฐํ๋ค
if (room.Prev != null)
room.Prev.Next = room.Next;
if (room.Next != null)
room.Next.Prev = room.Prev;
Count--;
}
}
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ต C#, Unity | Part 2 - ์น์ 1. ์ ํ ์๋ฃ ๊ธฐ์ด), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@shung_/C-Unity-Part-2-์น์ -1.-์ ํ-์๋ฃ-๊ธฐ์ด์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค