목차
- 1. Stack과 Queue 그리고 Array와 Linked List 자료구조에 대해 말씀해주시고 차이점에 대해 설명해주세요.
- 2. 절차지향 / 객체지향 / 함수형 프로그래밍이란 무엇이고 차이점은 무엇인가?
1. Stack과 Queue 그리고 Array와 Linked List 자료구조에 대해 말씀해주시고 차이점에 대해 설명해주세요.
1. 스택(Stack)과 큐(Queue)를 비교
스택(stack)과 큐(Queue)는 선형 자료구조입니다. 그러나 데이터의 입, 출력에 있어서 다른점이 있습니다.
스택(Stack)은 데이터를 쌓아 올린 형태의 자료구조입니다. 머릿속으로 구조를 생각해보았을 때, 한정된 공간에 계속해서 데이터를 쌓아 올리면 데이터를 삭제할 때, 가장 최근에 넣은 데이터부터 삭제할 수 있을 것입니다.
그래서 스택(Stack)은 LIFO(Last In First Out)이라는 후입 선출의 구조를 가지고 있습니다.
스택은 정해진 방향으로만 쌓을 수 있으며, top으로 정한 곳을 통해서만 접근이 가능하며, 이 곳에서만 삽입과 삭제를 할 수 있습니다.
스택에서 데이터의 삽입은 push, 데이터의 삭제는 pop 이라고 합니다.
스택은 실행 취소, 웹 페이지의 뒤로가기, 역순 문자열 만들기 등과 같은 활용 사례가 있습니다.
큐(Queue)는 스택과 다르게 선입 선출의 구조를 가지고 있습니다.
여기서 선입 선출은 FIFO 구조라고 이야기 하는데, First In First Out 이라는 의미를 가지고 있습니다. 그래서 가장 먼저 넣은 데이터를 삭제해야합니다.
큐는 데이터의 삭제를 Dequeue, 데이터의 삽입을 Enqueue라고 하며, 스택은 top 이라는 공간에서 데이터의 삽입, 삭제가 다 이루어지지만, 큐는 Front라는 곳에서는 삭제 연산이, Rear라는 곳에서 삽입 연산이 이루어집니다. ( 분리된 공간에서 작업 수행 )
큐는 은행 업무나, 프로세스 관리, 서비스를 받기위해 대기 하는 등 의 활용 사례가 있습니다.
2. Array, LinkedList
Array와 LinkedList는 데이터를 담기 위한 자료구조입니다. 그러나 형태와 여러 면에서 차이점이 있습니다.
배열(Array)는 데이터를 저장할 때 순서가 있는 메모리 공간에 연속저으로 저장합니다. 인덱스를 이용해 원하는 데이터를 찾을 수 있으며, 배열을 선언 할 때 크기를 지정하기에 한번 선언되면 이후에 변경할 수 없습니다.
LinkedList는 Array와 다르게 로드라는 하나의 단위를 통해 포인터라는 개념으로 다른 노드를 가리키는 형태를 띄고 있습니다. 그래셔 연속적인 메모리를 사용하지 않습니다.
데이터에 접근할 때, 배열은 해당 데이터의 인덱스를 알면 바로 접근이 가능해서 O(1)이라는 시간 복잡도를 갖습니다(인덱스를 모르면 O(n)), 그러나 링크드리스트는 인덱스라는 개념이 존재하지 않기에 n번의 탐색이 요구됩니다. 그래서 O(n)이라는 시간 복잡도를 갖습니다.
배열은 데이터의 접근이 용이한 자료구조입니다. 그래서 데이터의 접근에 초점을 맞춘다면 배열을 선언해서 사용하는 것이 좋습니다. 링크드 리스트는 데이터의 수정과 삭제에 용이한 자료구조입니다. 이유는 배열 같은 경우엔 데이터의 삭제가 이루어지면 해당 공간은 빈 공간이 되는데, 이를 매꾸기위해 추가적인 연산이 필요합니다. 그러나 링크드리스트는 두 노드 사이의 포인터 값만 변경해주면 쉽게 공백을 채울 수 있습니다.
2. 절차지향 / 객체지향 / 함수형 프로그래밍이란 무엇이고 차이점은 무엇인가?
절차지향 프로그래밍은 일이 진행되는 순서대로 프로그래밍을 하는 방법으로 가독성이 좋고, 컴퓨터의 처리구조와 비슷해 실행 속도가 빠릅니다. 그러나 코드가 순서대로 연결되어있어, 유지보수와 분석이 어렵다는 단점이 있습니다.
객체지향은 객체라는 관점을 이용해 프로그래밍을 하는 방법입니다. 코드의 재사용이 가능하며 분석과 설계 전환이 쉽습니다. 그러나 절차 지향에 비해 속도가 느리며 설계에 관한 지식이 없으면 어렵고 시간이 많이 사용됩니다.
함수형 프로그래밍은 순수 함수를 이용해 빠른 처리에 초점을 맞춘 프로그래밍 방법입니다. 실행 순서를 보장할 필요가 없어서 비절차형 언어라고도 하며 객체 지향 프로그래밍에 비해 코드의 이해도와 가독성이 좋고 테스트가 쉽습니다. 그러나 외부 데이터 혹은 내부 데이터의 상태를 조작하지 못하는 단점이 있습니다.
참고 레퍼런스
'기술면접 관련 및 참고하기' 카테고리의 다른 글
기술 면접 스터디 9회차 -( RDB와 NoSQL, 병렬 프로그래밍 ) (0) | 2023.04.06 |
---|---|
기술 면접 스터디 - 8회차 ( 시간 복잡도와 공간복잡도, 오버라이딩, 오버로딩) (0) | 2023.04.06 |
기술 면접 스터디 6회차 - ( WAS와 Web Server, 트랜잭션 ) (0) | 2023.04.05 |
기술 면접 스터디 5일 -( 프로세스와 스레드, TCP와 UDP) (0) | 2023.03.31 |
GC (Garbage Collection)이란 무엇인가? (0) | 2023.03.31 |