지난 편에 이어 <전문가를 위한 C++>을 통해 전문 코딩기법을 익히고 싶은 독자님들, 혹은 C++ 전문 개발자를 꿈꾸고 계신 분들을 위해 C++ 면접에 자주 등장하는 예상 질문 유형을 살펴보도록 하겠습니다.
※ 이 콘텐츠는 <전문가를 위한 C++>에 수록된 내용을 재구성한 것입니다.
상속에 대한 질문은 클래스에 대한 질문과 같은 방식으로 물어볼 수 있습니다. 또한 지원자가 클래스 계층을 구성하는 문제에 대해 답변하는 과정에서 책을 들춰보지 않고도 파생 클래스를 작성할 정도로 C++에 대한 경험이 풍부한지 살펴보기도 합니다.
기억할 사항
▶ 파생 클래스 문법
▶ 파생 클래스 관점에서 본 private와 protected의 차이점
▶ 메서드 오버라이딩과 virtual
▶ 오버로딩과 오버라이딩의 차이점
▶ 소멸자를 반드시 virtual로 지정해야 하는 이유
▶ 생성자 체인
▶ 업캐스팅과 다운캐스팅의 세부사항
▶ 다형성의 원칙
▶ 순수 virtual 메서드와 추상 베이스 클래스
▶ 다중 상속
▶ 실행 시간 타입 정보(RTTI)
▶ 상속한 생성자
▶ 클래스에 대한 final 키워드
▶ 메서드에 대한 override와 final 키워드
질문 유형
상속에 대한 질문에 답변할 때 세부사항에서 실수하기 쉽습니다. 베이스 클래스를 작성할 때 반드시 메서드를 virtual로 선언해야 합니다. 메서드를 모두 virtual로 지정했다면 왜 그렇게 했는지 이유를 댈 수 있어야 한다. 또한 virtual의 정의와 작동 과정을 설명할 수 있어야 합니다. 그리고 파생 클래스를 정의하는 코드에서 부모 클래스 이름 앞에 public 키워드를 붙이는 것도 잊지 말기 바랍니다(예: class Derived : public Base ). non-public 상속에 대한 질문이 나올 가능성은 많지 않아요.
상속에 대한 질문 중에서 어려운 부분은 베이스 클래스와 파생 클래스의 관계에 대한 것입니다. 다양한 접근 권한의 작동 방식을 확실히 파악하고, private와 protected의 차이점도 알아둡시다. 어떤 클래스를 캐스팅할 때 파생 클래스에 대한 세부 정보가 사라지는 슬라이싱 현상도 확실히 알아두면 좋겠죠.
템플릿은 C++에서 가장 난해한 부분 중 하나입니다. 템플릿에 대해 물어보면 C++ 초보인지 전문가인지 쉽게 구분할 수 있습니다. 템플릿에 대한 구체적인 문법을 정확히 기억하지 못하는 것은 이해할 수 있지만, 기본 개념은 확실히 알아둬야 합니다.
기억할 사항
▶ 클래스 템플릿과 함수 템플릿 사용 방법
▶ 기본 클래스와 함수 템플릿 작성 방법
▶ 템플릿 인수 추론(생성자에 대한 템플릿 인수 추론 기능 포함)
▶ 앨리어스 템플릿의 개념과 typedef보다 나은 이유
▶ 가변인수 템플릿
▶ 메타프로그래밍의 개념과 배경
▶ 타입 트레이트의 정의와 용도
질문 유형
면접은 대체로 쉬운 질문으로 시작해서 점차 난이도를 높여가면서 진행합니다. 때로는 어려운 문제를 잔뜩 마련해놓고 지원자가 어디까지 할 수 있는지 시험해보기도 하죠. 예를 들어 일정 개수의 int 값을 순차적으로 접근하는 클래스를 만들어보라는 질문으로 시작해서, 이 클래스가 임의의 크기를 가진 배열을 이용하도록 업그레이드하고, 그다음 단계에서는 임의의 데이터 타입을 받아들일 수 있게 만들라고 할 수도 있습니다. 이때 바로 템플릿이 등장한다. 여기서부터 질문을 여러 방향으로 진행할 수 있다. 배열과 같은 문법을 제공하도록 연산자 오버로딩을 사용하라고 요구하거나, 일반적인 템플릿 사용법에 따라 기본 타입을 지정하도록 요구할 수도 있습니다.
템플릿에 대해 직접 물어보는 경우는 많지 않고 다른 문제를 해결하는 과정에서 살펴볼 때가 많습니다. 따라서 템플릿이 필요한 경우에 대비해서 기본 개념을 다시 한 번 다져두면 좋습니다. 그런데 면접관은 템플릿 문법이 복잡하다는 사실을 알고 있기 때문에 복잡한 템플릿을 사용하는 코드를 그 자리에서 작성하라고 요구하는 경우는 드뭅니다.
메타프로그래밍을 이해하고 있는지 알아보기 위한 질문도 나올 수 있습니다. 이러한 질문에 답변할 때는 팩토리얼을 컴파일 시간에 계산하는 간단한 예제를 제시하면 좋습니다. 문법이 정확하지 않아도 너무 신경 쓸 필요 없습니다. 기본 개념을 확실히 대답하는 것만으로도 충분합니다다.
GUI 애플리케이션을 개발하는 업무에 지원한다면 I/O 스트림에 대해 질문하는 경우는 별로 없습니다. GUI 애플리케이션은 I/O를 다른 메커니즘으로 처리하는 경우가 많기 때문입니다. 하지만 스트림은 엄연히 C++ 표준이기 때문에 얼마든지 질문이 나올 수 있습니다.
기억할 사항
▶ 스트림의 정의
▶ 스트림을 이용한 기본적인 입출력 방법
▶ 매니퓰레이터의 개념
▶ 스트림의 종류(콘솔, 파일, 스트링 등)
▶ 에러 처리 기법
질문 유형
I/O에 대한 질문은 다양한 문맥에서 등장할 수 있습니다. 예를 들어 파일에서 시험 점수를 읽어서 vector에 저장하는 방법을 물어볼 수도 있습니다. 이 질문은 C++ 언어, 표준 라이브러리 그리고 I/O에 대한 기본 지식을 알아보기 위한 것입니다. 주어진 문제를 해결하는 데 I/O가 차지하는 비중이 많지 않더라도 에러를 처리하는 부분을 빠뜨리지 않는 것이 좋습니다. 그렇지 않으면 괜히 답변에 지적사항만 늘어날 수 있습니다.
다음 편에서 계속됩니다
▼ 관련 도서 보러가기 ▼
최신 콘텐츠