신입 자바 개발자 면접 질문 모음

실제로 면접을 보러 가면 어떤 질문을 받을까?

코딩테스트는 기업에 따라 생략하는 경우가 있지만, 기술 관련 질문은 반드시 받게 된다.
이미 각 언어별로 많은 예상 질문 리스트가 존재하지만 내가 받았던 질문들에 대한 답을 정리도 할 겸, 실제로 기술 면접에서 받았던 질문들을 정리해보기로 했다.
면접을 볼 때는 받은 질문에 대해 간략하게(하지만 모호하지는 않게) 설명해야 하기 때문에 핵심만 잘 풀어서 대답할 수 있도록 개념을 정확히 익혀야 한다.

JAVA 관련

1. 오버로딩과 오버로딩의 차이는?

  • 오버로딩은 메소드의 이름은 동일하지만 매개변수가 다른 메소드를 만들어 다양한 상황에서 메소드가 호출 될 수 있도록 합니다.
  • 오버라이딩은 부모 클래스가 가지고 있는 메소드를 자식 클래스에서 재정의하여 사용하는 것을 말합니다.

2. 인터페이스는 왜 사용하는가?
사실 인터페이스가 없어도 서비스를 구현할 수는 있습니다. 경우에 따라서는 인터페이스를 다시 상속받아 구현하는 게 더 번거롭기도 합니다. 그렇기 때문에 ‘왜’ 쓰는지를 이해하는 것이 중요합니다.
인터페이스는 일종의 ‘기능명세서’ 역할을 한다고 볼 수 있습니다. 선풍기를 개발한다고 쳤을 때, 당장 모든 기능을 구현하지 않더라도 ‘전원, 미풍, 약풍, 강풍, 타이머 기능이 필요하다’고 정리해두어야 추후 기능을 빠뜨리지 않고 구현할 수 있습니다. 같은 기능을 A개발자는 ‘미풍’, B개발자는 ‘자연풍’이라고 이름 붙이는 상황도 막을 수 있고요.
즉, 개발을 표준화 시킬 수 있으며 개발 시간을 단축시켜준다는 장점이 있습니다. 코드의 종속성을 줄일 수 있기 때문에 유지보수를 더욱 쉽게 해 주는 점 역시 인터페이스의 장점 중 하나입니다.


Spring 관련

1. DI란 무엇인가요?
의존성 주입(Dependency Injection)이란, 쉽게 말해 ‘미리 선점해 두는 것’입니다. 즉, 필요한 클래스를 직접 생성하는 것이 아니라 외부에서 주입 받아와 객체 간의 결합도를 낮출 수 있습니다. 유지보수 역시 일일이 코드를 고칠 필요가 없어 훨씬 용이해집니다.

2. AOP란 무엇인가요?
관점 지향 프로그래밍이라는 뜻으로, 핵심 기능을 제외한 부수적인 기능들을 프레임워크가 생성해서 제공해주는 것을 말합니다. 핵심 기능과 여러 곳에서 사용되는 공통 기능들을 분리해놓고, 공통 기능을 필요로 하는 곳에서 사용하는 방식입니다.

3. IoC란 무엇인가요?
제어의 역행(Inversion of Control)이란, 한 마디로 말하면 ‘대신 해주는 것’입니다. 이전까지는 개발자가 서블릿과 빈을 일일이 코드로 작성해서 사용했지만, 스프링에서는 프레임워크가 알아서 이 작업을 수행해 줍니다. 즉, 프레임워크에게 제어 권한을 넘기는 것이므로 ‘제어의 역행’ 이라고 합니다.

4. Spring과 SpringBoot의 차이가 뭘까요?
스프링은 Dependency가 길고, 버전 정보를 정확하게 입력해야 사용할 수 있습니다. configuration 역시 매우 길고 일일이 설정을 해줘야 합니다. 그에 비해 스프링부트는 이런 정보들을 훨씬 간단하게 입력할 수 있고, 내장 서버가 있어 서버 구동 시간이 절반으로 단축됩니다. 즉, 개발자들이 개발에만 더욱 집중할 수 있도록 해주는 툴이라고 정의할 수 있습니다.


기타

1. 세션과 쿠키의 차이는 무엇인가요?
세션은 정보를 서버에 저장하고, 쿠키는 정보를 사용자의 브라우저에 저장합니다. 쿠키의 경우, 해당 컴퓨터를 사용한다면 누구나 쿠키에 저장된 값을 쉽게 알 수 있기 때문에 세션에 비해 보안성이 낮습니다.

그럼 캐시는 무엇일까요?
리소스 파일들의 임시 저장소입니다. 이전에 사용된 리소스들은 다시 사용될 가능성이 높기 때문에, 다시 사용될 확률이 있는 데이터들을 빠르게 접근이 가능한 곳에 저장해두어 페이지 로딩 속도를 개선합니다.

2. 데이터 전송 시 Get방식과 Post 방식의 차이는 뭔가요?
GET 방식은 주소줄에 파라미터 값을 노출시켜 요청합니다. 반면 POST 방식은 주소줄에 파라미터를 노출시키지 않고, 데이터를 Body에 포함하여 전송합니다. GET방식은 상대적으로 보안에 취약하기 때문에 비밀번호나 이용자의 개인정보 등 보안이 필요한 정보를 전송할 때는 POST 방식을 사용해야 합니다.

3. 로컬 스토리지가 뭔지 아나요?
쿠키의 단점을 보완하기 위해 HTML5에서 등장한 웹 스토리지 중 하나입니다. 웹 스토리지에는 로컬 스토리지와 세션 스토리지가 있습니다. 로컬 스토리지는 클라이언트에 대한 정보를 영구적으로 저장할 수 있어 자동 로그인 유지 등에 사용됩니다.

4. DevOps란 뭔가요?
DevOps란 개발(Development)와 운영(Operations)의 합성어로, 일종의 개발 방법론입니다. 개발자들과 운영자들이 잘 융합하여 원활한 의사소통을 할 수 있도록 만들기 위해 등장하였습니다. 팀을 ‘개발부터 운영까지 모두 할 수 있는 사람들’로 채우는 것이 아니라, 각 프로세스(기획부터 개발, 테스트, 배포까지)의 담당자들을 하나의 팀으로 모으는 것이 중요합니다. 장애나 이슈가 발생했을 때 팀원들과 빠르게 공유하는 것 역시 중요한 요소입니다.
대표적인 DevOps 방법으로는 스크럼과 칸반, 애자일 등이 있습니다.

DevOps는 ‘반드시 이렇게 해야한다!’는 정답이 없습니다. 다만 회사의 개발 문화와 밀접하게 연관되어 있으므로 팀 내 개발자들이 좋은 개발 문화를 만들기 위해 고민하는 것이 중요합니다.

5. 애자일이란 뭔가요?

애자일Agile은 변화하는 요구 및 요구사항에 빠르게 대응하기 위해 고안된 방법론입니다. 짧은 텀을 두고 꾸준한 회의를 통해 피드백을 주고 받으며, 지속적인 고객 피드백을 통해 요구사항에 기민하게 반응합니다. 즉, 절차만을 중요시 하는 것이 아니라 좀 더 유연하게 변화에 대처하는 자세를 말합니다.

6.DOM이란 뭔가요?
브라우저의 개발자 툴(f12) 에서 보이는 것이 바로 DOM입니다. 이 툴에서 시각적으로 표현한 DOM은 내 HTML 코드와 같을 수도 있지만 대개는 달라지게 되며, DevTool에서는 이러한 변경 사항들이 적용되어 표시됩니다. JQuery의 경우 직접 DOM을 조작하며, 리액트 등의 프레임워크는 Virtual DOM(가상 돔)을 사용하여 브라우저의 과부하를 줄여주기 때문에 후자가 좀 더 많이 쓰이는 추세입니다.

7.JSON이란 뭔가요?
JavaScript Object Notation은 속성-값 쌍으로 이루어진 데이터를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 데이터 포맷입니다. 비동기 서버 통신을 위하여 많이 사용합니다. 심플하게 표현하고 해석할 수 있기에 XML보다 더 많이 사용되는 추세입니다.

8.Call by Reference와 Call by Value에 대해서 설명해주세요.
두 가지 모두 함수를 호출하는 방법입니다. Call by Reference는 참조에 의한 호출로, 인자로 받은 값의 주소를 직접 참조합니다. Call by Value는 인자로 받은 값을 복사하여 처리합니다. Call by Value는 복사하여 처리하기 때문에 안전하지만 메모리 사용량이 늘어나고, Call by Reference는 복사하지 않고 직접 참조하기에 빠르지만 원본의 값이 영향을 받는다는 리스크가 있습니다.

9.프레임워크와 라이브러리의 차이점에 대해 설명해주세요.
우선, 둘 다 미리 만들어진 코드를 더 효율적인 코딩을 위해 가져다 쓰는 것을 말합니다. 둘의 차이점은 누가 누구를 컨트롤 하는지 입니다. 개발자가 모든 결정을 다 내리고 코드를 컨트롤한다면 라이브러리, 누군가 정해준 규칙에 따라 코딩하고 있다면 프레임워크입니다.
라이브러리의 대표적인 예는 jQuery가 있고, 프레임워크의 예시는 스프링이 있습니다.