ChatGPT에게 회사의 면접 질문 몇 개를 던져보았다
잡담

ChatGPT에게 회사의 면접 질문 몇 개를 던져보았다

질문과 답변을 번역기로 돌려서 어색한 부분이 다소 존재합니다

 

 

Q: 유지보수 가능한 코드란?


A: 유지 관리 가능한 코드는 이해하고 수정하기 쉬운 코드입니다. 여기에는 일반적으로 깨끗하고 잘 문서화된 모듈식 코드 작성이 포함됩니다. 유지 관리 가능한 코드는 논리적 방식으로 구성되어야 하며 표준화된 코딩 규칙을 사용해야 합니다. 또한 새로운 버그를 도입하거나 기존 기능을 중단하지 않고 쉽게 업데이트하고 확장할 수 있는 방식으로 설계해야 합니다. 유지 관리 가능한 코드의 궁극적인 목표는 다른 개발자(또는 원래 개발자)가 시간이 지남에 따라 코드 베이스를 쉽게 수정하고 업데이트할 수 있도록 하는 것입니다.

 

 

Q: 개발자의 관점에서 보다 실용적이고 유지 관리 가능한 코드의 예를 들어 주시겠습니까?


A: 물론입니다. 다음은 유지 관리 가능한 코드의 간단한 예입니다.


이 코드는 명확하고 설명적인 변수 및 함수 이름을 사용하기 때문에 이해하기 쉽습니다. 또한 welcome 함수가 무엇을 하는지 설명하는 주석과 함께 잘 문서화되어 있습니다. 코드는 코드의 나머지 부분과 분리된 인사말 기능을 포함하는 모듈식입니다. 이렇게 하면 코드베이스의 다른 부분에서 welcome 함수를 쉽게 재사용할 수 있습니다. 또한 코드는 들여쓰기를 사용하여 코드를 구성하고 일관된 스타일을 사용하여 변수 및 함수 이름을 지정하는 것과 같은 표준 코딩 규칙을 따릅니다.

 

 

Q: 이해하기 쉬운 코드는 코드를 보는 개인의 주관에 따라 달라질 수밖에 없습니다. 그렇다면 객관적으로 이해할 수 있는 코드를 어떻게 정의할까요?

A: 이해하기 쉬운 코드를 구성하는 요소에 대해 사람마다 의견이 다를 수 있지만 코드를 보다 객관적으로 이해할 수 있게 만드는 몇 가지 일반적인 원칙이 있습니다. 예를 들어 명확하고 설명적인 변수 및 함수 이름을 사용하면 코드가 다루는 특정 도메인이나 문제에 익숙하지 않은 사람도 코드가 수행하는 작업을 쉽게 이해할 수 있습니다. 주석과 문서를 사용하여 코드의 목적과 동작을 설명하면 코드를 더 쉽게 이해할 수 있습니다.

또한 확립된 코딩 규칙 및 표준을 따르면 코드를 보다 객관적으로 이해할 수 있습니다. 이러한 규칙 및 표준은 일반적으로 프로그래밍 커뮤니티에서 동의하고 코드의 가독성과 이해도를 개선하도록 설계되었기 때문입니다.

궁극적으로 유지 관리 가능한 코드를 작성하는 목표는 다른 사람들(코드 베이스에서 작업하는 미래의 개발자 포함)이 코드를 더 쉽게 이해하고 수정할 수 있도록 하는 것입니다. 이것은 모범 사례를 따르고 코드의 이해도를 향상시키는 것으로 입증된 디자인 패턴 및 기술을 사용하여 달성할 수 있습니다.

 

Q: (간단한 컴포넌트 설계를 시킨 후) 서버 요청에 대한 의존성을 외부로 추출해 보세요.


A: 이 코드에서 서버 요청 종속성은 서버에 요청을 보내고 서버의 응답과 함께 약속을 반환하는 getSearchSuggestions 함수를 내보내는 별도의 search.js 모듈로 추출되었습니다. 그런 다음 이 함수는 구성 요소의 handleChange 메서드에서 호출되어 구성 요소가 서버 요청 구현에 직접 연결되지 않고 검색 제안을 검색할 수 있습니다.

여기에는 몇 가지 이점이 있습니다. 예를 들어 라이브 서버에 의존하지 않고 격리된 상태에서 테스트할 수 있기 때문에 구성 요소를 테스트하기가 더 쉽습니다. 또한 구성 요소의 논리가 서버 요청 세부 정보로 어수선하지 않기 때문에 코드를 더 쉽게 이해할 수 있습니다. 마지막으로 구성 요소에 영향을 주지 않고 서버 요청 구현을 변경하거나 업데이트할 수 있으므로 유연성이 허용됩니다.

 

 

Q: 위에서 말한 의존성 분리의 장점을 3가지 항목으로 요약해서 말해주세요.


A: 다음은 코드에서 종속성을 분리할 때 얻을 수 있는 세 가지 이점입니다.

1. 향상된 테스트 가능성: 종속성을 별도의 모듈로 추출하여 서버 또는 외부 API와 같은 라이브 종속성에 의존하지 않고 개별 구성 요소를 격리된 상태에서 테스트하기가 더 쉽습니다.
2. 이해도 향상: 종속성을 분리하면 개발자가 종속성의 세부 사항에 신경 쓰지 않고 구성 요소의 핵심 논리에 집중할 수 있으므로 코드를 더 쉽게 이해할 수 있습니다.
3. 유연성 향상: 종속성을 별도의 모듈로 추출하면 나머지 코드에 영향을 주지 않고 종속성을 변경하거나 업데이트할 수 있으므로 유연성이 향상됩니다. 이렇게 하면 시간이 지남에 따라 코드베이스를 더 쉽게 유지 관리하고 발전시킬 수 있습니다.

 

 

Q: 위에서 말한 세 가지 중에 제일 중요한건?


A: 세 가지 장점 중 어느 것이 가장 중요한지 말하기는 어렵습니다. 각 장점의 상대적 중요성은 프로젝트의 특정 상황과 목표에 따라 달라지기 때문입니다. 예를 들어, 테스트 가능성이 높은 상황에서 의존성 분리에 의해 제공되는 향상된 테스트 가능성이 가장 중요한 이점이 될 수 있습니다. 유연성이 주요 관심사인 상황에서는 종속성을 분리하여 제공되는 향상된 유연성이 가장 중요한 이점이 될 수 있습니다.

궁극적으로 코드에서 종속성을 분리할지 여부에 대한 결정은 프로젝트의 특정 목표와 요구 사항에 따라 달라집니다. 어떤 이점이 가장 중요한지 결정하고 종속성 분리가 이러한 목표를 달성하기 위한 최선의 방법인지 여부를 결정하는 것은 프로젝트에서 작업하는 개발자에게 달려 있습니다.

 

 

Q: 그래도 꼭꼭꼭 하나를 골라야 한다면?
  
A: 종속성 분리의 이점 중 가장 중요한 이점 중 하나를 절대적으로 선택해야 한다면 이 접근 방식이 제공하는 이해도 향상이 가장 중요하다고 말할 수 있습니다. 이해하기 쉬운 코드는 일반적으로 유지 관리가 더 쉽고 시간이 지남에 따라 발전하기 때문에 프로젝트에서 작업하는 개발자의 시간과 노력을 절약할 수 있습니다. 또한 명확하고 이해하기 쉬운 코드는 이러한 변경이 코드베이스에 어떤 영향을 미칠지 예측하기가 더 쉽기 때문에 변경 및 업데이트에 더 탄력적인 경우가 많습니다. 이렇게 하면 버그가 발생하거나 기존 기능이 손상될 위험을 줄일 수 있습니다.

궁극적으로 유지 관리 가능한 코드를 작성하는 목표는 개발자가 시간이 지남에 따라 코드 베이스를 더 쉽게 이해, 수정 및 발전시킬 수 있도록 하는 것입니다. 종속성을 분리하면 코드를 이해하기 쉽게 만들고 코드의 복잡성을 줄임으로써 이 목표를 달성하는 데 도움이 될 수 있습니다.


팀 내에서도 ChatGTP의 답변이 모범답안에 가깝다는 의견이 많았다.

특히 이전 질문과의 관계를 이해하면서(컨텍스트가 유지되면서) 꼬리물기 질문에 대해서도 대처를 너무 잘 해서 놀랐다.

 

이렇게 답변하는 면접자가 있다면 발 박수를 쳐주면서 채용하고 싶다는 의견도 있었는데 공감 100%