작성
·
14
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
안녕하세요.
stack 2번째, 문제 풀이 를 보면서 궁금증이 생겨서 질문을 남깁니다.
문제 풀이를 듣던 도중에 영한 님이 history를 만들 때, ArryDeque를 이용해서 만들었던 것을 볼 수 있었습니다.
그러다가 계속 듣다 보니까 갑자기 이런 생각이 들더라고요.(어떤 분이 '자바 성능 비교 표' 올린 영향도 있습니다.)
'앞으로만 추가하니 LinkedList가 더 빠르지 않을까?' 라는 생각 이요.
그런데 ArrayDeque를 왜 사용했을까? 생각 해보니 '앞으로만 추가 하지만, 여러 가지 이용할게 더 많아서 ArrayDeque 를 사용 했다.' 인데 이것도 추측이라서 정확하지 않네요.
그래서 LinkedList 대신 ArryDeque를 사용한 이유를 자세히 알고 싶습니다.
답변 부탁 드립니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
생각하는자님께서 문의하신 내용은 ArrayDeque
와 LinkedList
의 사용 이유, 특히 성능과 용도와 관련된 부분인 것 같습니다. 이 둘은 모두 자바에서 deque
를 구현할 수 있는 자료 구조이지만, 상황에 따라 적합한 선택이 달라질 수 있습니다.
ArrayDeque
와 LinkedList
의 차이점:
메모리 사용 및 성능:
ArrayDeque
는 배열 기반의 자료 구조입니다. 이 때문에 메모리 할당이 연속적이며, 캐시 효율성이 좋아서 접근 속도가 빠릅니다. 또한, 배열 크기를 동적으로 조정할 수 있어, 필요 시 메모리 재할당 없이 배열의 크기를 증가시킬 수 있습니다.LinkedList
는 노드(Node)로 구성된 구조를 가지고 있어 요소의 추가/삭제에는 효율적입니다. 그러나 포인터로 연결된 구조라 노드 탐색이 빈번하게 일어나는 경우 성능 저하가 발생할 수 있습니다.성능:
ArrayDeque
가 LinkedList
에 비해 일반적으로 더 빠른 성능을 보입니다. 특히 데이터의 액세스가 빠르다는 장점을 가지고 있습니다.사용의 용이성 및 다용도성:
ArrayDeque
는 스택과 큐의 성질을 모두 지원합니다. 따라서 다양한 방식으로 데이터를 처리할 수 있어 다용도로 사용하기에 적합합니다.특정 활용 예제:
LinkedList
를 사용하면 노드를 탐색할 때 추가된 메모리 비용이 발생하고, 캐시 적중률이 떨어질 수 있어 실제 프로그램 성능에 부정적인 영향을 줄 수 있습니다.ArrayDeque
는 이러한 문제를 최적화하는 데 도움이 되며, 특히 여유 공간이 남아 있지만 탐색 시간이 짧은 경우 가장 적합합니다.결론:
강의에서 ArrayDeque
를 활용한 것은 아마도 메모리 효율성과 성능을 고려한 선택일 가능성이 큽니다. ArrayDeque
는 deque
의 전형적인 사용 사례에서 LinkedList
에 비해 여러 복합적인 장점을 제공하므로 실무에서도 빈번히 선택됩니다.
유사한 내용이 강의 중에 다뤄져 있을 수 있으니, 강의에서 이 주제를 어떻게 설명했는지 다시 한번 살펴보시길 추천드립니다. 또한 “업무에서 ArrayDeque 사용의 이유”에 관련된 게시물을 참고하시면 더 많은 이해를 도울 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.