신입 개발자 면접 질문 (개발 일반 및 java)


자바 개발자라면 모르면 안되는 정말 기본적인 내용들인데요. 몇 달 전 제가 취업준비를 할 때 정리해 뒀던 것들입니다. 어렴풋하게나마 전부 알고 있던 것들이지만, 사용할 줄 아는 것과 면접에서 말로 설명을 할 수 있는건 정말 다른 일인것 같아요. 되도록 알기 쉽게, 쉬운 말로, 면접에서 이렇게 말하면 되겠다 싶도록 간단하게 정리했습니다. 저는 개인적으로 인터페이스 설명이 (제가 적었지만) 마음에 들어요 ㅋㅋ 도움이 되었으면 좋겠어요. 우리 존재 화이팅입니다!

#차례

  1. 프레임워크란?
  2. 라이브러리 vs 프레임워크
  3. 자바란 무엇인가?
  4. SDK란?
  5. OOP란?
  6. MVC 패턴이란?
  7. 상속이란?
  8. 자바의 데이터 타입
  9. 다형성이란?
  10. overriding이란?
  11. overloading이란?
  12. 인터페이스란?
  13. 추상클래스란? 인터페이스와의 차이점은?

#1. 프레임워크란?

소프트웨어를 만들 때 뼈대가 되는 부분을 미리 구현한 클래스, 인터페이스, 메서드 등의 모음입니다.

장점은

  1. 미리 구현해 둔 코드를 쓰기 때문에 빨리 만들 수 있고,
  2. 품질이 보장되어 있고,
  3. 추상화 계층을 하나 제공하는 것이 되어 사용하기 쉽습니다.

단점은

  1. 이것 자체도 익숙해 지는데에 시간이 걸릴 수 있고,
  2. 프레임워크 내부를 커스터마이징 하기 힘들고, 즉 유연성이 부족합니다.
  3. 언어가 아닌 프레임워크를 배우게 된다는 부작용이 있습니다.

#2. 라이브러리 vs 프레임워크

프레임워크는 큰 틀을 제공하고 내 코드는 프레임워크의 틀 안에 맞춰서 작성해야 합니다. 큰 뼈대는 이미 잡혀있고 그 안의 내용물을 채우는 느낌 입니다. 작동할 때 코드 실행 흐름을 보면 프레임워크가 내 코드를 호출합니다. 반면 라이브러리는 사용할 수 있는 함수들의 모음으로, 내가 라이브러리를 호출해서 능동적으로 사용합니다.

참고 : "you call library, framework calls you"

framework-library

#3. 자바란 무엇인가?

객체지향 프로그래밍 언어입니다. 다른 언어와 비교하여 자바의 가장 큰 특징은 운영체제 없이 독립적이라는 점입니다. 즉 운영체제에 관계없이 같은 코드를 사용 가능한데, OS위의 JVM(Java Virtual Machine) 이라는 가상머신 위에서 자바가 실행되기 때문입니다.

#4. SDK란?

Software Development Kit의 약자로, 개발을 위한 클래스, 컴파일러, 실행도구, 디버깅 툴, 예제 코드, 튜토리얼 등을 모아놓은 환경을 제공하는 것입니다. 모형배 만들기 키트에 재료 뿐만 아니라 자, 목공용 풀, 돋보기가 포함된 것 처럼, 개발을 위한 도구 세트입니다.

sdk

#5. OOP란?

Object-Oriented Programming의 약자로, 기능, 즉 오브젝트를 기준으로 코드를 나누어 구현하는 프로그래밍 방법입니다. 자바의 경우에는 그 구분 단위가 클래스입니다. (구현할 때는 클래스, 사용할 때는 오브젝트죠 정확히 말하면) 그리고 구현한 객체들을 레고블럭 쌓듯이 합쳐서 전체 결과물을 만듭니다.

이전의 절차지향에 비해서 사람의 사고방식과 더 가깝습니다. 객체지향 프로그래밍의 등장으로 인해 프로그래밍이 인간에게 더 쉽고 친절해 졌습니다.

장점은

  1. 내가 만든 레고블럭을 필요에 따라 다른 사람이 사용할 수 있습니다. (재사용성)
  2. 그렇기 때문에 협업하기 쉽고,
  3. 레고블럭을 가져다 쓸 때는 그 블럭의 내부 구조가 어떤지 신경쓸 필요 없습니다. (캡슐화, 추상화)

#6. MVC 패턴이란?

애플리케이션을 Model, View, Controller 영역으로 구분하여 개발합니다. 영역간의 결합도를 최소화한 디자인 패턴입니다. 장점은

  1. 디자이너, 개발자 영역이 분리됨으로써 분업화가 쉬워지며,
  2. 유지보수가 용이합니다.

참고 : MVC Pattern 이란? - 개념 및 자바 예제

#7. 상속이란?

기존 클래스의 변수와 메소드를 그대로 가지면서 추가적인 기능도 가지는 클래스를 새로 만드는 것입니다. 복잡한 문제를 나누어서 공통 부분부터 구현하기 위해 사용합니다.

장점

  1. 변수와 메소드를 그대로 쓰므로 코드중복을 줄임,
  2. 객체를 사용하는, 클래스 외부적인 관점으로 봤을 때 연필, 지우개, 볼펜을 모두 '필기도구' 라고 묶어서 처리(upcasting) 할 수 있으므로 효율적인 코드가 됨

#8. 자바의 데이터 타입

#기본형 (primitive type)

stack 메모리 영역에 실제 값을 저장하는 데이터 타입이며, boolean, char, int 등 8가지 종류가 있습니다.

#참조형 (Non-primitive)

기본형 외의 모든 타입입니다. String, 클래스, 인터페이스, 어레이 등 모든 변수는 참조형 변수입니다. 새로 만들때는 heap 메모리에 저장공간을 확보하며 항상 new로 정의합니다. 실제 값은 heap 영역에 저장되고, stack 에는 메모리 주소만 저장됩니다. (참고로 자바는 변수를 복사하는 경우가 없고 무조건 참조합니다)

참고:

#9. 다형성이란?

하나의 지시(예를들어 메소드를 실행하는 것)에 대해 여러 객체가 각자 다른 행위를 수행하는 것입니다. 자바에서 overloading이나 overriding이 이에 해당됩니다.

#10. overriding이란?

부모 클래스에게 상속받은 메소드를 자식 클래스에서 재정의 하는 것입니다.

참고: 생활코딩 자바 수업 - overriding

#11. overloading이란?

하나의 클래스 내에서 이름이 같은 여러개의 메서드를 정의하는 것입니다.
parameter, 리턴 타입 등이 다른데 수행 내용이 본질적으로 동일할 때 사용합니다.

참고: 생활코딩 자바 수업 - overloading

#12. 인터페이스란?

클래스의 템플릿입니다. 인터페이스는 멤버 변수, 멤버 함수를 가질 수 없고, 추상 메소드만 가질 수 있습니다. 그러니까 말하자면 껍데기만 있는 클래스인거죠.

사용목적은 인터페이스라는 이름 뜻 그대로, 클래스를 사용함에 있어서 인터페이스를 제공하기 위함 입니다. 즉, 인터페이스는 여러 클래스의 사용 방법이 같음을 보장합니다. 그렇기 때문에 자신을 implement 하는 클래스들에게 메서드 구현을 강제합니다.

예를들어 List 인터페이스 를 implement 하는 클래스 들인 ArrayList, LinkedList는 공통적으로 add(), clear(), indexOf(), get() 등의 메서드를 가지고 있습니다.

#13. 추상 클래스란? 인터페이스와의 차이점은?

추상클래스란 abstract로 정의되거나, 클래스 내에 추상 메서드가 하나 이상 포함된 클래스입니다. 근본적인 차이점은 사용 목적입니다. 클래스는 기본적으로 상속을 통해 기능을 확장하려는 목적으로 사용하며, 인터페이스는 해당 인터페이스를 구현한 객체들에 대해 동일한 동작을 약속하게 하기 위해서 사용합니다. 이 외에 추상클래스는 다중상속이 불가능하고 인터페이스는 가능하다는 차이점도 있는데, 목적이 달라서 기능이 다른 것 뿐이지, 인터페이스는 다중상속을 보완하려고 존재하는게 아닙니다.