개발지식 먹는 하마 님의 블로그

CS 스터디 - OOP, 프로세스와 스레드, 배열과 연결 리스트 본문

면접 준비

CS 스터디 - OOP, 프로세스와 스레드, 배열과 연결 리스트

devhippo 2025. 8. 20. 22:01

뉴런이 공유되었나 3명이 비슷한 주제를 들고 왔다.

✅OOP

1) OOP란 무엇인가?

더보기

OOP는 객체 지향 프로그래밍으로 상태와 행동을 객체로 모델링하고
객체 간의 상호작용으로 문제를 해결하여 변경이 용이하고 재사용성을 높이고자 하는 프로그래밍 방식입니다.

2) OOP의 5가지 설계 원칙?

더보기

클래스는 확장에 열려있고 변경에는 닫혀있어야 한다는 개방폐쇄 원칙과 인터페이스는 이용하지 않는 메소드에 의존하지 않도록 분리해야 한다는 인터페이스 분리 원칙, 이 두가지는 클래스와 인터페이스가 독립적이어야 한다는 것을 말하고
단일 책임 원칙은 각 클래스는 하나의 목적을 가져야 한다는 것을 말하며
리스코프 치환 원칙은 상속을 받은 자식 객체는 부모 객체의 행위를 대체할 수 있어야 한다는 것,
의존 역전 법칙은 클라이언트는 구현체가 아닌 인터페이스 즉, 더 높은 추상화에 의존해야 한다는 것을 말합니다. 

3) 절차지향 프로그래밍과 객체지향 프로그래밍의 차이점

더보기

절차지향은 함수와 로직을 순차적으로 설계하는 방식으로 절차지향은 단순하고 빠르지만 유지보수가 어렵다는 한계가 있습니다. 반면, 객체지향은 데이터를 객체로 묶고 캡슐화, 상속, 다형성을 활용하여 재사용성과 확장성을 높이는 방식입니다.

 


✅배열과 연결 리스트

1) 배열과 연결 리스트의 차이점은 무엇인가?

더보기

배열은 메모리 상에 연속적으로 할당된 데이터 구조로 정적이기 때문에 추후 크기 변경이 어렵습니다.
연결 리스트는 각 노드가 다음 노드에 대한 포인터를 알고있는 비연속적인 데이터 구조로 메모리가 동적으로 할당되기 때문에 가변적이라는 차이가 있습니다.

2) 배열 대신 연결 리스트를 사용하는 것이 경우와 그 이유는 무엇인가?

더보기

데이터 크기를 미리 알 수 없거나 가변적일 때, 삽입/삭제가 자주 발생할 때 주로 연결 리스트를 사용하는 것이 좋습니다.
배열은 크기가 고정되어있기 때문에 메모리를 재할당 해주거나 삽입/삭제 시 드는 비용이 큰 반면,
연결 리스트는 노드 단위로 동적 추가가 가능하고 삽입/삭제 시, 포인터만 변경해주면 되기 때문입니다.
(검색이 자주 일어나는 경우는 연결 리스트의 경우 탐색에 긴 시간이 걸리기 때문에 배열을 사용하는 것이 더 좋습니다.)

3) 단일 연결 리스트와 다중 연결 리스트의 차이는 무엇인가?

더보기

단일 연결 리스트는 각 노드가 데이터와 다음 노드 포인터만 가지기 때문에 단방향이고,
이중 연결 리스트는 각 노드가 데이터와 다음 노드 포인터 뿐만 아니라 이전 포인터도 가지기 때문에 양방향 순회가 가능합니다. 단, 이중 연결 리스트가 단일 연결 리스트보다 메모리를 더 많이 사용한다는 차이가 있습니다.

 


✅Context Switching

1) 컨텍스트 스위칭이란?

더보기

컨텍스트 스위칭은 여러 프로세스를 번갈아 실행할 때,
현재 프로세스 상태를 저장하고 새로 작업할 프로세스의 상태를 복원하여 멀티 태스킹을 가능하게 하는 작업입니다.

2) 프로세스와 스레드는 무엇이고 둘의 차이점은 무엇인가?

더보기

프로세스는 프로그램이 돌아가고 있는 상태, 스레드는 프로세스 내에서 실행되는 작업의 흐름 단위를 말합니다.
프로세스는 독립적인 메모리 공간과 자원을 가지고 있는 반면,
스레드는 독립적인 스택과 레지스터를 가지고 나머지 코드와 데이터, Heap을 공유한다는 차이가 있습니다.

3) 프로세스보다 스레드의 컨텍스트 스위칭의 공통점과 차이점은?

더보기

두 컨텍스트 스위칭 모두 항상 운영체제의 커널에서 실행됩니다.
스레드 컨텍스트 스위칭은 공유 메모리 덕분에 메모리 관련 추가작업이 필요없지만
프로세스 컨텍스트 스위칭은 무조건 가상 메모리 영역을 설정하고 할당 받는 추가작업이 필수적이라는 차이가 있습니다.

4) 프로세스보다 스레드 컨텍스트 스위칭이 더 빠른 이유는 무엇인가?

더보기

스레드는 공유 메모리 영역으로 인해 독립적인 스택과 레지스터만 변경하면 되지만,
프로세스는 CPU 레지스터와 메모리 맵핑, 캐시 flush 등의 작업이 필요하기 때문에 스레드 컨텍스트 스위칭이 더 빠릅니다.

5) 스레드 간 Context Switching이 프로세스 보다 가벼운데, 왜 항상 스레드를 쓰지 않고
    프로세스를 병렬로 실행하는 경우도 있는 것인가?

더보기

스레드는 메모리를 공유하기 때문에 한 스레드에서 오류가 나면 전체 프로세스에 영향을 끼쳐서 안정성이 낮고
어디서 오류가 발생했는지 확인하는 디버깅이나 모니터링도 어렵습니다.
반면 프로세스는 독립적이기 때문에 안정성이 높습니다.
따라서, 안정성이나 보안이 중요한 브라우저나 컨테이너의 경우 프로세스를 병렬로 실행합니다.

 

다들 질문을 너무 잘 준비해오셔서 벌써부터 부담이...!