본문 바로가기
컴퓨터 지식/IT 기술면접 대비

[IT 면접대비] 개발자 기술면접 대비 🖥️/ 1️⃣ - 공통 직군 (1)

by 서상혁 2021. 3. 1.

들어가기 앞서

 

기술면접의 중요성

코딩테스트 없이 사람을 뽑는 회사는 있어도, 면접 없이 뽑는 회사는 거의 없더군요!

그리고 개발 직군에서는 인성적인 부분보다는 얼마나 전문적인가, 기술적인 base 가 얼마나 되는가에 대한 평가가 더 주가 됩니다. 취업, 혹은 이직을 준비하고 계신 분들에게 기술면접에 대한 대비는 필수 라고 생각합니다. 아니면 적어도 평소에 CS 지식에 대한 공부는 꾸준히 이루어져야겠죠.

 

기술면접을 준비하는 마인드

 제 생각을 조금 말해보자면, 기술면접을 준비한다는 것은 사실 크게 특별한 것이 아닙니다. 기술 면접에서 물어보는 질문들은 대부분 컴퓨터 사이언스 관련해서 기반이 되는 기본 지식들이고, 추후 실무, 혹은 협업을 할 때에 필수적인 지식이죠. 결국 면접을 떠나서 이런 부분은 알고 있어야 하는게 당연한 것일 수도 있습니다. 그걸 놓치고 있었다면 놓친 부분을 다시 다잡아갈 필요가 있는 것이구요, 그냥 개발자로서 개발 공부를 하는 것이죠👨‍💻. 무언가를 진짜 안다는 것은 그것을 남들에게 설명할 수 있을 때 진짜 아는 것이라고 생각합니다. 내가 놓치고 있었던, 혹은 살짝 부족했던 CS 의 기본 지식들을 다시 다져간다는 마인드로 기술면접을 준비한다면 더 motivation 이 잘 될 것이라 생각합니다! 😀

 

출처

github.com/JaeYeopHan/Interview_Question_for_Beginner

 

JaeYeopHan/Interview_Question_for_Beginner

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - JaeYeopHan/Interview_Question_for_Beginner

github.com

제 게시글의 내용들은 위 깃허브를 출처로 합니다.

위 게시글 깃허브에 들어가보시면 이미 자세한 내용들이 기술되어 있고, 직접적인 공부는 그냥 저 링크 통해서 하셔도 전혀 무관할 것 같습니다. 저는 그냥 제 생각을 보태서 한번 다시 정리하는 정도로 진행할 예정입니다! 

 

 

아래 내용들은 제가 생각하는 제 답변, 그리고 질문에 대한 제 생각을 간략하게 서술할 예정입니다. 저도 아직 뉴비 개발자이기에 부족한 점이 많다고 생각하고, 곧 제 생각이 틀렸을 수도 있음을 미리 알립니다! 이렇게 생각하는구나 하고 참고만 해주세요!

 

 


공통질문

 

 

좋은 코드란 무엇인가요?

저는 개발자라면 기본적으로 효율적인 코드, 중복을 줄이는 코드를 추구해야한다고 생각합니다. 이 부분은 정말 공통적으로 모두가 공감하는 부분이라 생각하고, 두 번째는 남들이 읽기 쉬운 코드가 좋은 코드라고 생각합니다. 읽기 쉽다는 것은 곧 협업에 좋다는 뜻이고, 유지 보수에 좋다는 점까지 연결이 됩니다. 사내 정해진 convention 을 따르는 것이 좋다고 생각하고, 정해진 규칙이 없다면 구글에서 제공하는 Style Guide 를 따르는 것이 좋다고 생각하고 저 역시 코딩을 하면서 그 부분을 많이 참고하고 있습니다.

- 이 질문에 대해서는 대부분 1번쯤은 생각해봤을거라 생각합니다. 각자 생각하는 좋은 코드가 있을 것이고, 세부적으로는 다를 수 있어도 대부분 비슷한 생각을 하고 계시지 않을까요? 이 질문에 대해서는 결국 평소에 개발자로서 좋은 코드를 짜려고 노력하고 있나 를 보려는 질문기에 크게 어렵게 생각하려 하지 마시고 그 부분에 대해서 차분하게 서술하면 될 것 같습니다. 

 

객체지향 프로그래밍이란 무엇인가요?

객체지향 프로그래밍은 우선 말 그대로 객체 위주로 프로그래밍을 하는 것입니다. 여기서 객체라는 것은 영어로하면 object 이고, 어떤 물체, 객체를 바탕으로 사람이 생각하는것 처럼 프로그래밍하는 것이 주 특징이라고 생각합니다. 이전까지의 프로그래밍은 컴퓨 터중심 이었다면, 객체지향 프로그래밍은 인간이 생각하는대로 프로그래밍을 하고, 사람이 생각하는대로 구현이 됐다는 것은 결국 협업과 유지보수, 커다란 서비스에 대해 코딩을 할 때 훨씬 더 이점을 가집니다. 하나의 큰 패러다임이기 때문에 상속이나 캡슐화, 다형성 등 여러 특징들을 가지고 있고, 깊게 들어가면 더 깊어지고 제가 모르는 부분 또한 있습니다.

- 거의 대부분의 언어들이 객체지향 프로그래밍을 지원하고 있기 때문에 대부분이 접해본 경험이 있으실 거라 생각합니다. 접해봤다기보다는 자연스럽게 객체지향으로 프로그래밍하고 계시겠죠? 그래도 누가 설명해보라고 하면 은근히 말하기가 까다로운 개념입니다. 한번쯤 다잡고 가는 것도 좋을 것 같군요.

 

 

객체지향 프로그래밍의 주요 키워드

 

  • 다형성 - 상황에 따라, 어떤 객체를 참조하냐에 따라 다양하게 해석이 가능하고 다양하게 쓰임
  • 상속 - 객체가 자식과 부모의 관계로 되어 기능을 물려받고, 물려줌이 가능
    • 오버로딩, 오버라이딩 
    • 추상화
  • 캡슐화
    • 변수나 함수를 하나의 단위로 묶기가 가능. (Data bundling)
    • 정보 은닉 (public, private, protected)

RESTful API 란 무엇인가요?

Representational State Transfer API 의 약자로, 자원을 URI 로 표기하고 그 자원 상태를 주고받는 아키텍쳐를 의미합니다. 플랫폼이 어떤것이든 상관없이 따를 수 있는 인터페이스이고, HTTP를 기반으로 이루어집니다. 이 인터페이스를 지킨 것들에 대해서  RESTful 하다고 표현하고, 이 규칙들을 지켜서 설계된 API 들을 RESTful API 라고 말합니다.

- REST API 도 대부분 알긴 아는데 표현하기 참 애매한 개념이라고 생각합니다.  약자인 Representational State Transfer API 도 직관적으로 느낌이 오지는 않습니다. 하지만 아마 대부분이 알게 모르게 이미 REST 하게 짜져 있는 코드들을 보고 배운 터라 RESTFul한 규칙들을 지키고 있을 확률이 높습니다. 예를들면 GET 을 통해 가져오는 요청을 표현하고 POST를 통해 전송하는 요청을 표현하는 점, URI 에는 대문자를 사용하지 않는점,  등등 이 있죠.

더 자세한 정보가 궁금하시면 이 링크 에서 굉장히 알기쉽게 표현해줬더군요. 참고 바랍니다!

728x90

댓글