메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

C++ 면접에 자주 등장하는 질문 유형이 있다고?! C++ 개발자를 꿈꾼다면 필독! (1)

 

C++ 전문 개발자를 꿈꾼다면 필독! 

C++ 면접에 자주 등장하는 예상 질문 유형을 알아보자! (1)

 

 

C++는 엔터프라이즈급 객체지향 프로그램을 위한 빠르고 강력한 업계 표준 언어입니다.  기능이 풍부하고 효율성이 높아 전문 프로그래머들에게 사랑받으면서 대중화된 언어이기도 하고요. 비록 학습 난이도가 높기는 하지만 현업에서의 수요 또한 높은 편입니다. 

 

최근에는 전문 C++ 프로그래머가 사용하는 간결하고 강력한 고급 테크닉이 많이 소개되고 있지만, 그럼에도 여전히 C++에는 전문 프로그래머에게 알려지지 않은 유용한 기능이 많습니다. 그래서 나온 책이 <전문가를 위한 C++>입니다. 이 책은 전문 프로그래머들이 실제 개발에 적용할 수 있는 프로그래밍 기법을 소개한 책입니다. 업무 효율을 높일 실용적인 기법이 수록돼 있어 호평을 받은 도서로, 얼마 전까지만 해도 절판이 되었다가 최근 독자님들의 뜨거운 요청에 힘입어 다시 출간된 책이기도 합니다.

 

그런데 단순히 C++ 프로그래머로서의 기본기를 갖춘 것만으로도 충분할까요? 답은 NO 입니다. 아무리 기본기를 갖췄다고 한들, 개발자를 채용하는 회사 입장에서는 면접자가 고액의 연봉을 주고 데려올 만한 실력을 가진 사람인지를 확인하고 싶어 할 테니까요. 

 

전반적인 면접 과정은 회사마다 다르지만 기술 면접은 어느 정도 유추할 수 있습니다. 일반적으로 기본적인 코딩 실력과 디버깅 실력, 디자인과 스타일에 대한 기술, 문제 해결 능력 등을 확인하기 위해 심도 있는 인터뷰가 진행되죠. 이 과정에서 나오는 질문은 굉장히 다양하지만 질문의 유형을 정리하는 것은 충분히 가능합니다. 

 

그래서 준비했습니다. <전문가를 위한 C++>을 통해 전문 코딩기법을 익히고 싶은 독자님들, 혹은 C++ 전문 개발자를 꿈꾸고 계신 분들을 위해 C++ 면접에 자주 등장하는 예상 질문 유형을 소개합니다.  

 

※ 이 콘텐츠는 <전문가를 위한 C++>에 수록된 내용을 재구성한 것입니다. 

 

 

 


C++와 표준 라이브러리 초단기 속성 코스

 

기술 면접을 진행할 때 지원자가 이력서에 작성한 C++ 실력이 진짜인지 확인하기 위해 C++ 기초 질문을 던질 수 있습니다. 이런 질문은 주로 직접 만나서 면접을 진행할 대상을 걸러내는 전화 인터뷰 단계에서 많이 나옵니다. 물론 이메일 면접이나 대면 면접 과정에서도 얼마든지 이런 질문이 나올 수 있습니다. 이렇게 C++ 기초를 물어보는 목적은 어디까지나 여러분이 정말 C++를 잘 알고 실제로 써본 적이 있는지 확인하기 위함이므로, 사소한 세부사항까지 자세히 설명할 필요는 없습니다. 그런다고 점수를 더 많이 받지는 않을 겁니다.

 

기억할 사항

 

▶ 함수 사용법

▶ 헤더 파일 문법(예: 표준 라이브러리 헤더는 .h를 생략)

▶ 네임스페이스의 기본 사용법

▶ 범위 기반 for 문을 비롯한 반복문 작성 방법, 조건문, 조건 연산자, 변수 등과 같은 C++ 언어의 기본

▶ 열거 타입

▶ 스택과 힙의 차이

▶ 동적 할당 배열

▶ const 사용법

▶ 포인터와 레퍼런스의 개념과 차이점

▶ auto 키워드

▶ std::vector와 같은 표준 라이브러리 컨테이너의 기본 사용법

▶ 구조적 바인딩(C++17)

▶ C++17부터 추가된 중첩된 네임스페이스를 쉽게 사용하도록 개선된 부분

 

질문 유형

 

C++의 기초에 대한 질문은 어휘력 테스트와 비슷합니다. 면접관은 const나 static 같은 C++ 키워드의 정의를 묻기도 합니다. 교과서적인 답을 원할 수도 있지만 사용 예나 추가사항을 곁들여 답변하면 추가 점수를 얻을 수 있습니다. 예를 들어 const의 용도는 레퍼런스 매개변수가 변경되지 않게 하기 위해서이며, 함수나 메서드에 객체를 전달할 때 복제 방식보다는 const 레퍼런스를 전달하는 것이 더 효율적이라고 답변하면 좋습니다.

 

또한 면접관 앞에서 간단히 프로그램을 직접 작성하는 방식으로 C++의 기본 실력을 확인하기도 합니다다. 면접관은 본격적인 질문에 들어가기 전에 긴장을 풀어주기 위해 C++로 ‘Hello, World’를 출력하는 프로그램을 작성하라고 물어볼 수 있습니다. 이렇게 쉬운 질문을 받더라도 네임스페이스를 능숙하게 사용하고 printf() 대신 스트림을 사용하고 코드에 필요한 표준 헤더도 정확히 표기하면 추가 점수를 확보할 수 있을 겁니다.

 

 

 

스트링과 스트링 뷰 다루기, 스트링 현지화와 정규표현식

 

스트링은 굉장히 중요합니다. 거의 모든 애플리케이션에서 스트링을 사용하거든요. C++에서는 스트링에 대한 질문이 최소 하나는 등장할 가능성이 높습니다.

 

기억할 사항

 

▶ std::string과 std::string_view 클래스

▶ C++의 std::string 클래스와 C 스타일 스트링의 차이점, 그리고 C 스타일 스트링을 자제해야 하는 이유

▶ 스트링을 정수와 부동소수점수를 비롯한 숫자 타입과 상호 변환하는 방법

▶ 현지화의 중요성

▶ 유니코드의 기본 개념

▶ 로케일과 패싯의 개념

▶ 정규표현식의 개념

▶ 주석은 주로 메타정보를 담는 용도로 사용

▶ 코드를 더 작은 단위로 쪼개는 분할 원칙

▶ 기존 코드를 깔끔하게 정리하기 위해 코드를 재구성하는 리팩토링 기법

▶명명 규칙도 중요합니다. 변수, 클래스 등의 이름을 신경 써서 지읍시다.

 

질문 유형

 

스타일에 대한 질문의 형태는 다양합니다. <전문가를 위한 C++>을 집필한 마크 그레고리의 친구는 꽤 복잡한 알고리즘을 구현하는 코드를 칠판에 적어보라는 질문을 받은 적이 있었다고 합니다. 먼저 변수 이름을 적자 면접관이 통과했으니 그만해도 된다고 말했습니다. 질문의 의도는 알고리즘이 아니었던 거죠. 그건 변수 이름을 얼마나 잘 짓는지 보기 위한 위장 질문이었습니다. 이처럼 스타일에 대한 질문은 작성한 코드를 보여 달라거나 스타일에 대한 의견을 묻는 방식으로 진행합니다.

 

면접관에게 코드를 제출할 때 조심할 점이 있습니다. 예전 직장에서 구현한 코드를 함부로 제출하면 법적인 문제가 발생할 수 있죠. 또한 배경 지식과는 관련 없이 단순히 실력만 뽐내기 위한 코드는 자제해야 하고요. 예를 들어 데이터베이스 관리자를 채용하는 자리에 고속 이미지 렌더링에 대한 석사 학위 논문을 내미는 것은 바람직하지 않습니다.

 

면접 과정에서 특정한 프로그램을 작성하라고 요청받았다면 기술을 마음껏 뽐낼 절호의 기회입니다. 작성할 프로그램에 대해 구체적으로 명시하지 않더라도 지원할 회사에 제출할 만한 프로그램을 짧게나마 작성해두면 좋겠죠. 예전에 작성했던 코드를 그대로 제출하기보다는 지원할 업무에 적합하면서 코딩 스타일도 뽐낼 수 있도록 처음부터 새로 작성하는 것이 좋습니다.

 

작성해둔 문서가 있고 공개해도 법적인 문제가 없는 것이라면 이런 문서도 코드와 함께 제출해서 커뮤니케이션 능력을 드러내면 추가 점수를 확보할 수 있습니다. 직접 구축하거나 관리한 웹사이트나 CodeGuru, CodeProject 같은 사이트에 올린 글도 보여주면 좋습니다. 그러면 여러분이 코드 작성 능력뿐만 아니라 다른 사람과 소통해서 코드를 효과적으로 활용할 수 있다는 능력도 갖췄다는 것을 알 수 있을 겁니다. 물론 자기가 쓴 책이 있다면 금상첨화입니다.

 

깃허브와 같은 오픈소스 프로젝트에 활발히 참여하고 있다면 추가 점수를 얻을 수 있습니다. 주도적으로 개발하는 오픈소스 프로젝트가 있다면 더 좋겠죠. 코딩 스타일과 커뮤니케이션 능력을 뽐내기에 이보다 좋은 것은 없습니다. 깃허브와 같은 웹사이트에 나온 프로파일 페이지는 이력서처럼 사용할 수 있습니다.

 

 

 

전문가다운 C++ 프로그램 디자인

 

면접관은 C++ 언어에 대한 지식뿐만 아니라 C++를 활용하는 능력도 알고 싶어 합니다. 디자인 능력에 대해 직접 질문하지 않더라도 다른 질문을 통해 디자인 능력을 가늠하기도 합니다.

 

또한 자신이 직접 작성하지 않은 코드도 잘 다룰 수 있는지 물어볼 수 있습니다. 그 동안 사용해본 라이브러리를 이력서에 구체적으로 나열했다면 이에 대한 질문에 철저히 대비합시다. 라이브러리를 구체적으로 명시하지 않았다면 라이브러리가 얼마나 중요한지 기본적으로 이해하고 있으면 됩니다.

 

 

기억할 사항

 

▶ 디자인은 주관적입니다. 면접 과정에서 여러분이 내린 디자인 결정사항을 잘 설득할 수 있도록 준비합시다.

▶ 예전에 자신이 디자인했던 기억을 구체적으로 떠올려 뒀다가 면접 과정에 예제로 제시합니다.

▶ 추상화의 정의와 예에 대한 질문에 대비합니다다.

▶ 디자인을 클래스 계층도와 같이 시각적으로 표현할 수 있도록 준비합니다.

▶ 코드 재사용의 장점을 설명할 수 있도록 준비합니다.

▶ 라이브러리의 개념을 이해합니다.

▶ 처음부터 새로 만들 때와 기존 코드를 재사용할 때의 장단점을 파악합니다.

▶ 빅오 표기법의 기초를 이해합시다. 최소한 O (nlogn )이 O (n2)보다 좋다는 정도는 알고 있어야 합니다.

▶ C++ 표준 라이브러리에서 제공하는 기능을 파악합니다.

▶ 디자인 패턴에 대한 개략적인 개념을 파악합니다.

 

 

 

질문 유형

 

면접관 입장에서 볼 때 디자인에 대해 제대로 질문하기 쉽지 않습니다. 면접 과정에서 디자인하는 프로그램은 너무 간단해서 실전 디자인 기법을 드러내기에 부족할 때가 많거든요. 디자인에 대한 질문은 흔히 ‘프로그램을 제대로 디자인하기 위한 단계에 대해 설명하라’든지, ‘추상화 원칙에 대해 설명하라’와 같이 두루뭉술하게 표현되기 쉽습니다. 또한 대상이 명확하지 않을 수도 있지요. 예를 들어 ‘예전에 수행한 프로젝트의 디자인에 대해 설명해 달라’고 질문할 수 있습니다. 이때 예전 직장의 지적재산권을 침해하지 않도록 주의합시다.

 

면접관이 특정 라이브러리에 대해 구체적으로 질문하면 세부사항보다는 상위 수준의 개념을 물어보려는 의도가 많습니다. 예를 들어 디자인 관점에서 볼 때 표준 라이브러리의 장단점을 설명하라는 질문을 받을 수 있습니다. 이때는 표준 라이브러리에서 제공하는 기능의 방대함과 표준화의 장점과 함께 간혹 사용하기 어렵다는 단점도 함께 제시하면 좋습니다.

 

얼핏 들으면 라이브러리와 관련 없는 질문을 통해 디자인에 대한 질문을 받을 수도 있습니다.  예를 들어 웹에서 MP3 음악을 다운로드해서 로컬 컴퓨터에서 재생하는 애플리케이션을 만드는 방법을 물어볼지도 모릅니다. 라이브러리에 대해 직접적으로 물어보지 않았지만 사실 관련이 있습니다. 이 질문은 실제로 개발 과정을 물어보는 겁니다.

 

이런 질문을 받으면 가장 먼저 요구사항을 수집하고 초기 프로토타입을 구현하는 방법부터 설명하면 됩니다. 이 질문에서 언급한 두 가지 기술을 어떻게 다루는지도 살펴보려 할 수 있는데, 이때 라이브러리를 언급합시다. 웹과 MP3 재생 기능을 직접 구현한다고 설명해도 문제가 되지 않지만, 기존에 있던 기능을 다시 만들어서 발생하는 시간과 비용이 가치가 있는지 다시 질문 받을 수 있습니다.

 

더 좋은 답변은 웹과 MP3 기능에 관련된 기존 라이브러리를 조사해서 주어진 프로젝트에 적합한 것이 있는지 확인한다고 말하는 것입니다. 리눅스에서 웹 기능을 제공하는 libcurl이나 윈도우에서 음악 파일을 재생하는 윈도우 미디어 라이브러리처럼 구체적인 라이브러리를 제시할 수 있다면 좋습니다. 이때 무료 라이브러리를 제공하는 웹사이트나 그런 웹사이트에서 제공하는 것들을 언급한다면 추가 점수를 확보할 수 있습니다.

 

 

 

다음 편에서 계속됩니다

 

 

 

 

▼ 관련 도서 보러가기 ▼

 

B3215427289_l.jpg

 

 

댓글 입력
자료실