Skip to content

상세 정보



커넥to 후기 | “커넥to에서 개념 하나하나 제대로 공부하고 있어요”
② 자료구조/알고리즘 편, 박*영 님

커넥to 수강생 TALK


네카라쿠배 스쿨 현장스케치

커넥to 수강생 박*영 님

  • 커넥to에는 어떤 분들이 함께하고 있을까요? 오늘 만나본 수강생은 소프트웨어 학부생 박*영님입니다. 코딩의 속도를 우선시하던 지난날과 비교해 어떻게 달라졌는지, 하루하루 어떻게 성장하고 있는지 물었습니다. 박*영 님이 직접 설명하는 자료구조/알고리즘 주요 개념 ‘해시 테이블’까지. 아래 인터뷰에서 확인해보세요.

Q. 박*영님, 반갑습니다. 자기소개 부탁드려요.


안녕하세요. 커넥to 수강생 박*영입니다. 소프트웨어 학부생이고 현재는 휴학 중인데요. 프론트엔드에 본격적으로 관심을 가지게 된 것은 올해 초입니다. 학생들로 구성된 학교 창업팀에서 프로젝트를 하다가 커넥to에 지원하게 되었는데요. 그동안은 비슷한 수준의 학우들과 프로젝트를 진행하다 보니, 코드리뷰를 하더라도 객관적으로 판단하기는 어려웠습니다. 그래서 현직 개발자에게 코드리뷰를 받고 싶었고, 개선할 점을 찾아 성장하고 싶은 마음이 있어 커넥to에 들어오게 되었습니다.

Q. 커넥to에서는 매주 배운 내용을 기록하고 있죠. 이번 주제는 무엇이고, 그 주제를 꼽은 이유는 무엇인가요?


저는 해시 테이블을 정리했어요. 현재 커넥to에서 JavaScript를 공부하고 있는데요. JavaScript의 배열을 공부하다가 JavaScript는 일반적인 자료구조 배열과 다르다는 것을 알게 됐고 조금 더 나아가서 해시 테이블로 구현된 객체라는 것을 알게 됐습니다.

또한 해시 테이블 자체로도 중요한 자료구조이고 면접 질문으로도 종종 등장하는 것으로 알고 있어서 이참에 한번 공부해보자라는 생각으로 이 주제를 택하게 됐습니다.

네카라쿠배 스쿨

Q. 해시 테이블은 어떤 개념인가요?


해시 테이블은 key에 value를 맵핑해서 저장하는 자료구조인데요. key값이 들어오면 해시 함수를 사용해서 값을 저장하기 위한 index로 변환을 시켜줍니다. 이러한 특성 때문에 특정 자료를 검색하거나 삽입, 삭제할 때도 빠른 시간 안에 가능하죠. 그런데 해시 함수를 index로 변환할 때 index가 중복이 되면 충돌하는데요, 해결하는 방법이 두 가지 있습니다. 개별 체이닝(Separate chaining)과, 오픈 어드레싱(Open addressing)입니다.

개별 체이닝은 연결 리스트(Linked list)를 이용하는 방법으로, 각 buckets은 연결 리스트를 가리키는 참조값을 가지고 있습니다. index가 충돌하는 경우, 해당 index의 buckets이 가리키는 연결 리스트의 node로 추가되는 것이죠. 이러한 방법으로 충돌을 해결할 수 있지만, 최악의 경우 데이터의 개수마다 순차적으로 탐색하게 되어, n번 탐색하게 될 가능성이 있습니다.

오픈 어드레싱은 해시 테이블의 빈 공간을 활용하는 방법입니다. index가 충돌하는 경우, 그 index 이후부터 비어있는 슬롯을 발견할 때까지 특정 index만큼 움직입니다.

Q. 커넥to에서 공부해본 자료구조는 어떠셨나요? 이전과 비교해보자면요.


대학에도 자료구조/알고리즘 전공 수업이 있어 수강한 기억은 있는데, 내용은 다 잊어버린 상태였어요. (웃음) 중요하긴 하지만, 취직을 준비하는 상태에서는 코딩테스트를 위한 과정이라고 여기는 게 흔한 것 같아요. 그냥 문제만 많이 풀었죠.

커넥to에서는 실제 코딩테스트에 나오는 주제들을 거의 대부분 공부했습니다. 특히 자료구조는 혼자서 공부하면 어려운 개념도 많은데, 강사님이 여러 문제를 활용해서 설명해주시니까 더 도움이 되고 기억에도 오래 남는 것 같습니다. 커넥to에 오기 전에는 쉽게 접하지 못했던 개념들을 알려주셨죠.

Q. 커넥to에서 ‘좋은 개발자’에 대한 가치관을 갖게 되셨나요?


이웅모 강사님께 JavaScript를 배우고 있는데, 좋은 코드가 무엇인지 우리가 스스로 생각할 수 있게끔 만들어주세요. 돌아가기만 하는 코드를 작성하는 건 누구나 할 수 있는데 ‘얼마나 퀄리티 있게 짜는지’, ‘유지보수는 용이한지’와 같은 것들이 실력을 판가름내는 요소라는 것을 다시금 깨닫고 있어요.

이웅모 강사님은 “여러분이 신경을 쓰는 만큼 코드가 좋아진다”고 말씀하시는데요. 그 말씀대로 꾸준히 리팩터링해야겠다는 생각을 합니다. 어제는 최선을 다해서 짰으나 오늘 다시 보면 별로인 경우가 있을 수 있거든요. (웃음) 커넥to에 오기 전 어느 날 프로젝트를 하는데, 오류가 생겨서 수정해야 되는데 제가 짠 코드도 못알아보겠더라고요. 충격을 많이 받았어요. 코드를 빠르게 짜는 것에 급급했거든요. 그 때부터 ‘제대로 배우고 싶다, 좋은 코드를 판별할 수 있는 실력을 갖고 싶다, 코드 리뷰를 받고 싶다’는 생각을 하게 됐어요.

Q. 커넥to 수강 이전에는 헷갈리거나 어려웠던 부분이었는데 수업, 강사님과 질의응답, 러버덕 등의 활동을 통해 이해하게 된 부분이 있나요?


네. 대부분의 수업 시간과 러버덕에서 헷갈렸거나 얕게 알았던 부분을 보충하고 있습니다. 우선 수업에서 사용되는 책의 내용이 깊고, 책으로 예습하고 강의로는 복습을 하면서 책으로는 이해가 안 갔던 부분들을 해결할 수 있었습니다.

또한 러버덕 시간에는 실제 면접처럼 조원들과 돌아가면서 질문, 대답을 하고 있는데요. 아는 내용이라고 생각했던 것들이 설명하려고 해보면 안 되는 경우가 있는데, 러버덕을 통해서 이런 부분을 훈련하고 있습니다. 개인적으로는 러버덕으로도 정말 많이 배웠습니다. 진득하게 JavaScript를 공부해본 적이 없고, 블로그 글만 보고 얕게만 아는 상태였는데 직접 설명하면서 체득해보니, 깊이가 달라진 것 같습니다.

Q. 러버덕으로 확실하게 알게 된 개념의 예시를 들어주신다면요?


기본 개념이긴 한데, JavaScript에 호이스팅(hoisting)이라고 있습니다. 해당 코드가 끌어올려져서 실행되는 걸로 알고 있었는데, 알고 보니 코드의 선언문만 먼저 읽어서 끌어올려지는 것처럼 보이는 것이더라고요. 개념 하나하나를 다시 알게 되니 신기하기도 하고, 민망하기도 하고, 쾌감도 듭니다. (웃음) 중요한 개념들을 확실하게 알게 해주는 러버덕의 장점을 매일매일 체감하고 있습니다.

Q. 앞으로의 각오에 대해 들려주세요.


이전 커넥to 분들이 좋은 결과를 내셨는데, 말씀을 들어 보니 조급해하지 말고 지금 배우는 것에 최선을 다하라고 하시더라고요. 저도 좋은 기회를 어렵게 잡았으니까 이 기회를 최대한 활용해보고 싶습니다. 커넥to도 어느덧 중반을 향해 달려가고 있는데 최선을 다해서 좋은 결과를 낼 수 있도록 지금의 마음을 최대한 유지할 생각입니다.

패스트캠퍼스에서 6년간의 교육 경험을 통해 만든
‘네카라쿠배 스쿨’이 '커넥to'로 변경되었습니다.


제로베이스와 함께한 이야기가 더 궁금하다면,