2023. 4. 14. 09:46ㆍVB.NET/왕초보
프로그래밍 언어의 데이터 구조에서 스택(Stack)과 큐(Queue)는 자주 사용되는 중요한 개념입니다. 스택은 Last In First Out (혹은 First In Last Out) 구조로 나중에 넣은 데이터가 먼저 추출되는 형식이며, 큐는 First In First Out (혹은 Last In Last Out) 구조로 먼저 넣은 데이터가 먼저 추출되는 구조입니다. 흔히 이해를 돕기 위해 스택은 보드게임의 원반쌓기로 비유되고, 큐는 버스를 타기 위해 줄 서있는 구조로 비유되곤 합니다.
VB.NET에서 스택과 큐를 구현하기 위해서는 각각 System.Collections.Generic 네임스페이스에 있는 Stack 클래스와 Queue 클래스를 사용합니다. 스택과 큐는 동일한 데이터형의 항목들을 순차적으로 쌓는 구조이기 때문에 거의 모든 데이터형을 지원하게 되며, 그렇기에 정의할때 데이터 형을 함께 지정해야 합니다.
VB.NET에서 스택(Stack)과 큐(Queue) 사용하기
1. 스택
스택은 Last In First Out 구조이며, 이를 사용하기 위해 아래 간단한 예제를 먼저 확인해 보시죠. 스택을 사용하려면 스택에 값을 넣는 Push 함수와 스택에서 값을 빼는 Pop 함수를 알아야 합니다.
' 스택 생성
Dim my_stack As New Stack(Of Integer)
' 데이터 삽입
my_stack.Push(10)
my_stack.Push(20)
my_stack.Push(30)
' 데이터 추출
Dim value1 As Integer = my_stack.Pop() ' 30
Dim value2 As Integer = my_stack.Pop() ' 20
Dim value3 As Integer = my_stack.Pop() ' 10
Stack 형으로 my_stack 변수를 생성한 후 Push를 이용해서 값을 넣고, Pop을 이용해서 값을 빼는 일련의 소스입니다. 여기서 중요한건 10, 20, 30 순서로 값을 넣었기 때문에 나올때는 30, 20, 10의 순서로 First In Last Out 으로 나온다는 것입니다. 원반쌓기처럼 먼저 넣은 데이터가 가장 아래로 들어가기 때문에 나중에 뺄때는 가장 나중에 나오게 되는것이죠.
여기서는 스택을 정의할때 Integer 형으로 정의했지만 String이나 기타 다른 모든 어떤 형으로도 사용할 수 있으며, 스택 안에 들어가는 모든 데이터는 같은 형으로 들어가게 됩니다.
2. 큐
큐는 First In First Out 구조이며, 이를 사용하기 위해 아래 간단한 예제를 먼저 확인해 보시죠. 큐를 사용하려면 큐에 값을 넣는 Enqueue 함수와 큐에서 값을 빼는 Dequeue 함수를 알아야 합니다. Enqueue는 스택의 Push 함수와 동일한 역할을 하며, Dequeue는 스택의 Pop 함수와 동일한 기능을 수행한다고 이해하는게 좋습니다.
' Queue 생성
Dim my_queue As New Queue(Of Integer)
' 데이터 삽입
my_queue.Enqueue(10)
my_queue.Enqueue(20)
my_queue.Enqueue(30)
' 데이터 추출
Dim value1 As Integer = my_queue.Dequeue() ' 10
Dim value2 As Integer = my_queue.Dequeue() ' 20
Dim value3 As Integer = my_queue.Dequeue() ' 30
Queue 형으로 my+queue 변수를 생성한 후 Enqueue를 이용해서 값을 넣고, Dequeue를 이용해서 값을 빼는 일련의 소스입니다. 여기서 스택과 다른점은 10, 20, 30 순서로 값을 넣었는데 동일하게 10, 20, 30 순서로 First In First Out 으로 나온다는 것입니다. 버스를 타기 위해 줄을 서는 모습을 보면 먼저 줄을 선 사람이 먼저 버스를 타는 구조로 보시면 됩니다.
3. 스택과 큐의 활용
- 수식의 괄호 검사: 수식에서 괄호의 짝이 맞는지 검사하기 위해 스택을 사용할 수 있습니다. 여는 괄호를 만나면 스택에 삽입하고, 닫는 괄호를 만나면 스택에서 추출하여 짝이 맞는지 검사합니다.
- 함수 호출: 함수를 호출할 때, 호출된 함수의 반환 주소를 스택에 저장하고, 함수가 종료될 때 저장된 주소로 돌아가는 것을 스택을 사용하여 구현할 수 있습니다.
- 메시지 큐: 메시지를 순서대로 처리하기 위해 Queue를 사용할 수 있습니다. 새로운 메시지를 Queue에 추가하면, Queue에 있는 메시지들이 순서대로 처리됩니다.
- 작업 스케줄링: 작업을 순서대로 처리하기 위해 Queue를 사용할 수 있습니다. 작업을 Queue에 추가하면, Queue에 있는 작업들이 순서대로 처리됩니다.
4. 마치며...
VB.NET으로 프로그램을 개발하다보면 상당히 다양한 부분에서 스택과 큐를 사용할 수 있습니다. 일반적으로 List를 사용해서 직접 인덱스를 관리하는 방법도 많이 사용되지만 항상 동일한 순서로 데이터를 넣고 빼는 반복된 작업을 하는 경우에는 스택과 큐를 사용하는게 편의성이나 정확성에서 다양한 강점을 갖고 있습니다.
관련글 : 2023.04.12 - [VB.NET/왕초보] - VB.NET 정렬 알고리즘과 예제 코드
'VB.NET > 왕초보' 카테고리의 다른 글
VB.NET에서 데이터베이스 트랜잭션 처리하기 (0) | 2023.04.17 |
---|---|
VB.NET으로 파일 압축하고 해제하기 (0) | 2023.04.16 |
VB.NET에서 XML 처리하기 (0) | 2023.04.13 |
VB.NET 정렬 알고리즘과 예제 코드 (0) | 2023.04.12 |
VB.NET에서의 문자열 처리 (0) | 2023.04.09 |