ssausand-sunny / cs-study

면접.. 붙으려면 CS 공부 해야겠지?
0 stars 0 forks source link

자바에서 stack기능을 가지고 있는 클래스들을 알려주세요. #27

Open Leeminw opened 3 months ago

Leeminw commented 3 months ago

문제

자바에서 stack기능을 가지고 있는 클래스들을 알려주세요.

예상 꼬리 질문 - 두 클래스의 성능차이는 어떻게 되나요? - Stack 클래스보다 ArrayDeque클래스가 빠르다고 하는데 이유가 뭘까요?

들어가야 할 키워드 정리

kgh2120 commented 3 months ago
예상 답변 Stack이라는 클래스와 Deque 인터페이스의 구현체인 LinkedList, ArrayDeque가 Stack 자료구조의 기능을 가지고 있습니다.
예상 꼬리 질문 답변 - 두 클래스의 성능차이는 어떻게 되나요? ?? 무슨 클래슨데 ㅋㅋ - Stack 클래스보다 ArrayDeque클래스가 빠르다고 하는데 이유가 뭘까요? Stack 클래스는 Thread-Safe한 자료구조로 내부 동작에 synchronized 키워드가 달려있습니다. 이로 인해 ArrayDeque에 비해 더 느린 성능을 가지게 됩니다. ++ - 그럼 Thread-Safe한 자료구조는 Stack밖에 없나요?? 그 외엔 자바에서 쓰레드 세이프를 위해선 concurrent 패키지에 있는 것을 사용하는 것을 권장합니다. 쓰레드 세이프한 Stack 자료구조로는 LinkedBlockingDeque나 ConcurrentLinkedDeque를 사용하는 것을 권장합니다.
Hunnibs commented 3 months ago
질문 답변

Collection에서 stack과 ArrayDeque이 있습니다.

꼬리 질문

1. 두 클래스의 성능 상 차이는 어떻게 되나요? ArrayDeque은 Deque 인터페이스를 상속 받아 구현하여 Stack의 특징 뿐만 아니라 큐의 특징까지 수행할 수 있습니다. Stack 클래스는 Vector로 구현되어있어 stack 기능 하나만 수행이 가능합니다. 또한 전체적인 성능은 ArrayDeque이 더 좋습니다. 2. Stack 클래스보다 ArrayDeque 클래스가 빠른 이유가 무엇인가요? stack 클래스는 Vector로 구현되고 Vector 클래스는 Syncronize method를 구현합니다. 해당 메소드는 동기적으로 작동하여 멀티 쓰레드 환경에서 동일한 변수에 접근하려할 때 순차적으로 처리하기 때문에 성능 상 저하가 발생하게 됩니다.

Leeminw commented 3 months ago
예상답변

Stack 클래스와 ArrayDeque 클래스가 있습니다.

꼬리 질문

- 싱글쓰레드의 경우 Stack 클래스보다 ArrayDeque 클래스의 성능이 더 좋습니다. - Stack 클래스는 vector 클래스를 상속받아 구현된 클래스이기 때문에 대부분의 함수에 Syncronized 라는 키워드가 붙게 되어 단일 쓰레드에서 성능상 저하가 발생하기 때문입니다.

kjy0349 commented 3 months ago
예상 답변

Stack 클래스와 ArrayDeque과 같은 클래스가 있습니다.

예상 꼬리 질문 답변

1. 성능차이는 일반적으로 Stack 클래스보다 ArrayDeque 클래스가 조금 더 빠릅니다.
2. Stack의 경우 push, pop과 같은 자료구조 삽입 삭제 메서드들이 모두 synchronized 키워드를 통해 동기화되고 있어, 그렇지 않은 ArrayDeque 클래스에 비해 느립니다.
-> 그럼 멀티스레딩 환경에서는 Stack 구현체가 더 좋은거 아니야? 해당 상황에서도 Stack을 사용하는 것 보다는 ConcurrentLinkedDeque와 같은 클래스들이 있기 때문에 Stack을 사용하지는 않습니다.