기술 면접에서 자주 등장하는 질문 중에 하나가
'list와 set의 차이' 인데요,
오늘은 왜 이 질문이 자주 등장하는지 설명드리도록 하겠습니다
우선 이 질문은 기술 면접 초입부에 가볍게 질문하기 딱 좋아요
list와 set은 둘 다 실무에서 자주 사용되는 자료 구조고 간결하게 대답하기에도 좋기 때문에
기술 면접 시작할 때 몸풀기로 딱 좋은 질문이죠
그러면서도 지원하신 분의 기본기를 확인할 수 있는 아주 좋은 질문입니다
list와 set은 진짜 진짜 기본적인 개념이면서도 동시에 개발할 때 자주 사용되는 타입이기 때문에
당연히 알고 있어야 하는 개념이에요
범죄 신고는 112, 화재 신고는 119
요거 모르는 분 없잖아요, 이거랑 똑같아요
그만큼 기본 중에 기본이라는 거죠
그래서 이걸 대답 못하면
'기본기가 부족하신 분'으로 평가받을 수 있기 때문에
반드시 개념을 잘 알고 계시는 게 중요합니다
만약에 이 질문에 대답을 잘했어요
그러면 이어서 이런 질문이 들어올 수 있습니다
'혹시 set이 어떻게 구현되는지 아시나요?'
면접관 분이 이 질문을 하는 이유는
지원자 분이 얼마나 깊게 파고 들어가는 분인지 알고 싶어서에요
set의 개념을 잘 알고 있고, 이미 여러 번 사용한 적이 있다 할지라도
내부적으로 set이 어떻게 구현되는지 모를 수 있습니다
이걸 모른다고 해서 아주 큰 문제가 생기거나 그렇지는 않아요
하지만 평소에 호기심이 많거나 혹은 좀 더 깊게 알고 싶어 하는 분들은
set이 어떻게 구현되는지도 찾아봤을 가능성이 있단 말이죠
그렇기 때문에 set이 어떻게 구현되는지를 잘 대답한다면
'깊게 파고드는 분'
'제대로 알고 쓰려고 노력하는 분'
이라는 인상을 줄 수 있습니다
그러니까 플러스 효과를 주는 거죠
그러면, set이 어떻게 구현되는지 잘 대답했다면
이어서 여러 종류의 추가 질문들이 나올 수 있습니다
set은 보통 hash table로 구현이 되기 때문에
자연스럽게 hash table과 관련된 추가 질문이 나올 수도 있고요,
아니면 '언제 set을 쓰면 좋은지 그리고 왜 그런지'를 물어볼 수도 있습니다
여기서 '언제 set을 쓰면 좋은지 그리고 왜 그런지'에 대해 묻는 질문은
set에 대한 질문처럼 보이지만 사실은 hash table과 연계된 질문이에요
자, set은 데이터 중복을 허용하지 않고
데이터들의 순서도 보장하지 않는다는 특징을 가지고 있는데요,
이런 특징을 가진 set이 hash table로 구현이 되는 이유는
hash table이 set과 같은 특징을 가지고 있기 때문입니다
이게 무슨 말이냐면 hash table에서는 key가 중복될 수 없어요
그리고 데이터는 순차적이 아니라 랜덤 하게 저장됩니다
hash table의 이런 특징은 set의 특징과 일치하기 때문에
set을 구현할 때는 hash table의 key에 데이터를 저장하는 형태로 구현을 하게 되는 거죠
그리고 hash table에서는 key를 검색할 때의 시간 복잡도는 O(1) 입니다
즉, 얼마나 많은 데이터들을 hash table에 저장하고 있는지와 상관없이 늘 빠르게 key를 검색할 수 있기 때문에
데이터 검색을 list에서 하는 것보다는 hash table로 구현된 set에서 하는 것이 시간적으로 훨씬 유리합니다
그러니까 '언제 set을 쓰면 좋은지 그리고 왜 그런지'를 묻는 이유는
이런 성능 차이를 알고 적재적소에 쓰는 분인지 확인하고 싶어서 그런 거예요
그래서 이 질문에 대한 대답을 잘한다면
'이런 분은 코드를 짤 때 분명히 성능도 고려하면서 코드를 짜실 것 같다'
이런 기대감을 줄 수 있는 거죠
이처럼 list와 set의 차이를 묻는 질문은 표면적으로는 간단해 보이지만
실제로는 많은 것을 확인해 볼 수 있는 질문입니다
그래서 이런 배경을 이해하신 후에 면접을 준비하시면
그냥 모른 채로 준비하시는 것보다는
아무래도 더 탄탄하게 준비하실 수 있지 않을까 생각을 하고요,
개인적으로 바라는 것이 있다면
단지 면접을 잘 보기 위함만이 아니라
근본적으로는 좋은 개발자가 되기 위한 목적으로
오늘 내용을 봐주셨으면 좋겠습니다
왜냐하면
잘 알고 잘 쓰는 것,
그리고 성능을 고려하면서 코드를 짜는 것은
훌륭한 개발자라면 갖추고 있는 기본 자세기 때문에 그래요
그래서 오늘의 핵심 !!
잘 알고 잘 쓰고 성능도 챙기는 개발자가 되자