1. 스택
ㅇ 일반적으로, 차곡차곡 쌓아둔 모양/형태를 의미
ㅇ 스택에 넣고빼는 순서 : 제일 나중에 넣은 것을 제일 먼저 뺄 수 있게 함
- 일명, LIFO (Last In First Out, 후입선출, 後入先出) 또는 FILO (선입후출) 이라고도 함
2. [자료구조] 스택 (Stack)
ㅇ 컴퓨터 자료구조 중 선형 리스트에서,
- 자료가 리스트에 첨가되는 순서와 반대로 처리되는,
- 후입선출(LIFO) 리스트를 말함
ㅇ 특징
- 구현 : 주로, 리스트로써 구현됨
- 형태 : 입구,출구가 동일
- 순서 : 후입선출 (LIFO, Last In First Out, 後入先出)
. 입력순서와 출력순서가 역순으로 이루어짐
- 접근 : 리스트의 한쪽에서 만 일어남
. 리스트의 한쪽(top)에서 만 자료의 추가(push) 및 삭제(pop)가 일어남
- 위치(크기) : top 변수 이용
. 추가시 증가, 삭제시 감소
- 시간 복잡도 : O(1)
. 방금전 저장 요소에 대해, 한번에 접근하므로 (상수 시간)
- 구현 용이도 : 쉬움
. 구현이 쉽고 실행이 빠르며, 리스트 보다는 비교적 효율적인 자료 구조
ㅇ 주요 용도
* (주로, 왔던 길을 되돌아갈 때 유용)
- 수식/표현식 평가
- 함수 호출시 복귀 저장
- 재귀 호출시 복귀 저장
- 문자열의 역순 출력
- 프로그램 내 괄호 열기 및 닫기 등
ㅇ 스택 내 주요 동작(연산)
- push(item) : (추가,집어넣기 : 입력)
. 항상, 정의된 스택 크기를 확인하고, 입력해야 함 (stack overflow)
. 다만, 실제 구현이 대부분 동적 배열 방식이므로, 굳이 고려치 않아도 됨
- pop() : (삭제,빼냄 : 출력)
. 항상, 삭제 전 남아있는 자료 유무를 확인해야 함 (stack underflow)
- peek() or top() : (삭제 없이, top 내용 만 반환)
- clear() : (강제 초기화 또는 비어있는지 여부 확인)
- empty() or isEmptyStack() : (비어있는지 여부 확인)
. 통상, 스택의 top 위치에 있는 내용물 반환시, 에러 유무로 확인
- full() or isFullStack() : (가득 찼는지 여부 확인)
- size() : (크기 확인)
ㅇ 예외처리
- stack underflow : 빈 스택에서 자료를 추출하려고 할 때
. 즉, 텅빈 스택에서 pop() 또는 top()을 요청할 때
- stack overflow : 꽉 찬 스택에서 자료를 추가 삽입하려고 할 때
. 즉, 꽉찬 스택에서 push()를 요청할 때
ㅇ 구현방식
- 주로, `정적 배열`, `동적 배열`에 의한 구현 또는 `연결 리스트`에 의한 구현 가능
ㅇ Python 例) (by 파이썬 리스트)
- stack = []; stack.append(1); stack.append(2); stack.append(3); stack.pop() => [1,2]
3. [네트워킹 장비] 장비 연결상의 스택킹 (Stacking)
ㅇ 일반적으로, 허브 또는 스위치 등의 장치에서는,
- 기본 최소 포트를 초과하는 경우에 2대 이상의 장치가 필요하며,
- 이때, 2 이상의 장치를 하나로 관리하기 위해 차곡차곡 쌓아 연결하는 기능을 말함
- 이 경우에, 하나의 IP 주소에 의해 다수의 장치 또는 시스템의 감시가 가능
ㅇ 통상적인 스태킹을 위한 장치 구성 방식 : Master/Slave 구성
- 스태킹되는 포트가 별도로 필요하고,
- 최대 적재 규격까지 스태킹이 가능
4. [프로토콜] 프로토콜 스택
※ ☞ 계층구조, 망 계층 구조, OSI 7계층모델, TCP/IP 계층모델 참조
- 층 별로 정의되어, 독립적인 취급이 가능토록 한, 층별 구조를 말함