-
C# 10/17 - 스택(Stack)과 제네릭(Generic)TIL 2023. 10. 17. 22:41반응형
Stack이란?
말 그대로 데이터를 쌓으며(push),
pop(데이터를 가져올 시)
마지막으로 저장한 정보가 우선적으로 반환된다.
push(10)
push(20)
push(30)
하고
pop 했다면 마지막으로 저장한 정보인 30부터 나온다.
pop은 순서를 정할 수 없다.
구조
public class TempStack
{
private int[] arr;
private int index;
//배열은 사이즈가 존재해야함
public int Size;
public TempStack(int size)
{
Size = size;
arr = new int[size];
//데이터를 추가하려면 인덱스를 +1해줘야함(Stack을 구현하기 위해)
index = -1;
}
//추가
public void Push(int data)
{
//추가하는 데이터가 배열 길이(size)를 넘어가는 경우의 예외처리
if(Size - 1 == index)
{
throw new Exception("Stack overflow");
}
arr[++index] = data;
}
//추출
public int Pop()
{
if(IsEmpty())
{
throw new Exception("Stack is Empty"); //에러 메시지 출력(디버그랑 유사한 역할)
}
//마지막에 추가된 데이터를 pop(반환) 후 마지막 데이터 삭제(--연산자가 뒤)
return arr[index--];
}
//체크
public int Peak()
{
if(IsEmpty())
{
throw new Exception("Stack is Empty"); //에러 메시지 출력(디버그랑 유사한 역할)
}
//마지막으로 추가된 데이터를 반환하지만 데이터는 삭제되지 않음
//또한 인덱스 순서또한 변하지 않음
return arr[index];
}
//해당 스택이 비어있는지 체크(에러 방지를 위해)
public bool IsEmpty()
{
return index == -1;
}
}
ㅡㅡ
사용(다른 스크립트)
void Start()
{
//데이터 추가
TempStack stack = new TempStack(5);
stack.Push(10);
stack.Push(20);
stack.Push(30);
//데이터 추출
int data1 = stack.Pop();
Debug.Log(data1);
int data2 = stack.Pop();
Debug.Log(data2);
int data3 = stack.Pop();
Debug.Log(data3);
}
+
문자 형태의 스택이 필요한 경우?
위의 구조에서 그대로 추가하려
타입을 지정하는 자료형을 바꾸어 주면서 새로 다 적어야 하는데
이런 경우를 위해 Generic이 존재한다.
이를 위해 스택.cs에선
public class MyStack<T>
로 선언하고
타입을 지정하는 자료형 자리에 T를 넣고
return에는 default(T) 를 반환하도록 한다.
사용 시에는
MyStack<int> stack = new MySTack<int>(5);
MyStack<string> stack = new MyStack<string>(3);
위와같이 생성 후 동일하게 사용하면 된다.
+
그래서 이걸 어디다 쓰냐?
이전 동작으로 돌아가는 기능 (Undo)
를 만들기 위해서 사용한다.
예를들어
안녕하세요 라는 채팅을 쳤을 때,
지운다면 요 세 하... 순서로 제거될것이다.
예를들어2
아이템과 여러 상호작용을 한다고 하였을 때,
팝업이 여러개 발생할 것이다.
아이템 선택 - 제작 - 확인창 << 이런 식으로
만약 여기서 확인창이 닫혀버린 경우
창이 전부 사라지는건 뭔가 어색할 수 있다.
이런 경우에 이전 상태(제작창) 으로 돌아가기 위해
스택 구조를 사용하게 될 수 있다.반응형'TIL' 카테고리의 다른 글
최종 프로젝트 - 1 일차 / 플레이어 조작 로직 결정 (0) 2023.10.23 델리게이트와 람다[예시-팝업] (0) 2023.10.18 C# 10/13 - Input Controller 만들기 (0) 2023.10.13 10/11 - 배열과 리스트, 연결리스트 + 관련된 데이터자료 (0) 2023.10.11 9/26 - 팀 프로젝트 구현 추가 정리 (0) 2023.09.26