기본설명을 앞에서 잘해주셔서 조금 다른 관점에서 설명을 해보겠습니다. 스택을 먼저설명드리면 a->b->c 와 같이 함수의존 호출했다고 가정해봅시다. a(){ return b(); } b(){ return c(); } a(); 이것의 집입은 a-b-c로 작동되지만 완료는 c-b-a로 작동됩니다. 함수호출이 작동되는 구조가 스택구조를 사용하기때문에 콜스택이라고 합니다. 우리가 함수로 디버깅을 할수 있는 이유가 이러한 스택구조로 정보가 전달될수 있기때문이며 재귀호출을 만들다보면 무한대로 진입하는 실수를 할때도 있는데 이때 스택오버플로우에러를 유발하게 됩니다. 스택이 최대한도 까지 쌓인 오류입니다. 우리가 만드는 기능이 접시쌓기를 한후 설거지를 제일마지막에 쌓은것부터 할수있고 제일처음에 쌓은것은 가장 마지막남은 작업이다라고 하면 이알고리즘을 이용할수 있습니다. 이전으로 돌아갈수 있는 메뉴기능을 만든다고하면 스택구조를 이용할수 있습니다. 큐의 경우 일반적으로 작업의 입력과 출력이 선형적으로 양끝에 하나씩만 있는것으로 순차성 대기열 처리를 할때 이용이됩니다. 먼저요청된 이벤트가 먼저 처리됨으로 가장 심플하며 카프카는 이 큐개념을 클러스터화된 네트워크로 고성능으로 이용할수 있는 대표적인 장치입니다. 디큐의 경우 입력과 출력이 양끝에 모두있어 스택처럼 큐처럼 사용할수도 있지만 특수한 목적으로 이용이될수있습니다. 예를 들면 스택과/큐 단점은 우선순위역전을 할수가 없습니다. 스택과 큐에서 우선순위 역전을하려면 자료구조를 모두 복제하고 재구성해야하는 성능자체에 문제가 될수 있습니다. 즉 반대의 경우도 스택기능만을 필요로한데 불필요한 작동이될수 있기때문에 이 역시 성능(불필요한 메모리+속도)의 저하가 될수 있습니다. 요약해서 다음과 같이 정리해봅니다. 스택: 이전으로 돌아가는 기능이 필요할때 / 처음입력된 이벤트가 가장 마지막에 수행될때 큐: 대기열을 순차적으로 처리할때 ( 무한의 소비자가 있는 스트리밍에서 ) 디큐: 우선순위연전을 처리할수 있거나, 입력을 양방향으로 처리하는 특수목적의 자료구조

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 10월 1일 오후 3:50

댓글 0