신입 개발자 면접 질문 준비(1)
이번에 지인을 통해 한 기업에 면접을 볼 기회를 얻었다! 야호~
첫 면접인 만큼 긴장도 되고 어느 정도의 준비가 필요한 지 감이 안 오는데
이참에 면접 질문에 대해 지금까지 공부한 것과 새로 찾아보면서 알게 된 것들을 하나씩 짚어보고 정리해보려 합니다.
특히 신입 개발자로서 어떤 부분을 자주 질문받는지에 대해 많이 찾아보고 공부했는데,
같은 신입 개발자 분들이 올려주신 자료나 예상 혹은 면접에서 직접 받았던 질문들과
시니어 개발자 분들이 올려주신 자신이 면접관일 때 신입 개발자에게 물어보는 질문들과
이에 대한 제 답안들을 미리 작성하며 동시에 면접 준비를 해보자고요!
기술에 관한 질문
이번에 제가 면접을 보게 된 기업의 기술 스택들을 살펴보면
Java와 JS, Spring framework를 사용하며,
협업과 형상관리를 위해 Git과 Jenkins, Slack과 JIRA를 활용하신다고 되어있습니다.
이 중 제가 제출한 이력서와 부합하는 항목은 Java와 JS, Spring framework 부분입니다.
제게 이에 관한 기초 지식이 얼마나 있는지 물어보실 것을 예상하여 답안을 작성해보겠습니다.
1. Framework?
프레임워크(Framework)란 개발자가 소프트웨어를 만들 때 틀이 되는 부분들을 미리 구현한 클래스, 인터페이스, 메서드 등의 모음입니다.
프레임워크를 사용함으로써 개발자들은 여러 장점을 얻을 수 있습니다.
첫 번째로 미리 구현해 둔 코드를 쓰기 때문에 구현 속도가 빨라지고
두 번째로 마찬가지로 미리 구현된 코드들이기에 품질이 보장되어 있고
마지막으로 프레임워크를 통해 추상화 계층을 하나 제공하는 것이 되어 사용하기 쉬워집니다.
하지만 장점에 비해 뚜렷한 단점도 존재하는데요.
첫 번째로 프레임워크 자체에 익숙해지는 데 시간이 필요할 수 있고
두 번째로 프레임워크에 이미 만들어진 틀을 커스터마이징 하기 힘들어 유연성이 떨어지며
마지막으로 이러한 문제들로 인해 언어가 아니라 프레임워크를 배우게 된다는 부작용이 있습니다.
2. Library vs Framework
라이브러리와 프레임워크의 주요한 차이점은 바로 제어 역전(Inversion Of Control)입니다.
라이브러리는 다른 사람들이 만들어 놓은, 사용할 수 있는 함수들의 모음집으로
내가 라이브러리를 호출해서 사용할 함수들을 능동적으로 선택하지만,
프레임워크의 경우 이미 정해진 큰 틀이 있고, 개발자는 그 틀의 내용물을 채우며,
이렇게 채워진 내용물들이 프레임워크에 의해 적절하게 호출되므로, 개발자는 그저 기능의 구현에만 신경 쓰면 됩니다.
3. Inversion Of Control?
보통 줄여서 IOC로 불리는 제어 역전은
객체의 생성과 관리까지 모든 객체에 대한 제어권이
프레임워크 내의 IOC 컨테이너에 있으며 이 모든 것을 관리해줍니다.
기존에는 객체 생성을 new Instance로 했다면, Spring Framework에서는 객체를 Bean으로 등록해두면
IOC 컨테이너가 객체를 생성, 관리합니다.
4. JAVA
객체 지향 프로그래밍(OOP, Object Oriented Programming) 언어입니다.
제가 생각하는 자바만의 가장 큰 특징은 운영체제에 독립적이라는 점입니다.
이게 가장 큰 특징이라고 생각하는 이유는 자바가 OS위의 JVM(Java Virtual Machine)이라 불리는 가상 머신에서
실행되기 때문에 어떤 운영체제든 상관없이 같은 형태로 실행될 수 있기 때문입니다.
5. OOP (Object Oriented Programming)
객체 지향 프로그래밍이란 데이터를 객체(Object)로 취급하여 프로그램에 반영한 것이며,
순차적으로 프로그램이 동작하는 절차식 방법과 다르게
객체와 객체 간 상호작용을 통해 프로그램이 동작하도록 개발하는 것입니다.
객체 지향 프로그래밍의 장점은
코드의 재사용성이 용이하고 유지 보수가 쉬우며 기능별 모듈화가 가능하여 대형 프로젝트에 적합하다는 것이고,
단점으로는
객체와 객체 간 상호작용으로 인해 처리속도가 상대적으로 느리고 객체가 많을수록 용량이 늘어날 수 있으며,
설계 시에도 상호작용을 생각해야 하기에 많은 시간과 노력이 필요하다는 것입니다.
6. Class & Object & Instance
클래스(Class) 란 객체를 만들기 위한 설계도 혹은 틀이며, 연관되어 있는 변수와 메서드의 집합입니다.
객체(Object) 란 클래스에 선언된 모양 그대로 생성될 구현할 대상이며 구현 된 실체입니다.
클래스의 인스턴스라고도 부르며 객체 자체가 모든 인스턴스를 대표하는 포괄적인 의미도 가집니다.
객체지향의 관점에서 클래스의 타입으로 선언되었을 때 객체라고 부릅니다.
인스턴스란 객체를 소프트웨어에 실체화한 것을 의미하며 실체화된 인스턴스는 메모리에 할당됩니다.
따라서 인스턴스는 객체에 포함된다고 볼 수 있고,
객체지향의 관점에서 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부릅니다.
너무 길어져서 다음 포스팅에 계속...