[JAVA] 신입 개발자 면접 질문 리스트 - JAVA (1)
JAVA란?
- 객체지향프로그래밍(OOP:Object Oriented Programming) 언어이다.
그로 인해 유지보수가 쉽고 직관적인 코드 분석이 가능하다.
- 분산 네트워크 기술을 지원한다.
자바에는 TCP/IP 라이브러리가 기본적으로 포함되어있고, HTTP 프로토콜을 지원.
- 멀티쓰레딩을 지원한다.
동일한 쓰레드를 동시에 수행할 수 있다.
사용자 인터페이스 쓰레드와 장시간 계산이 필요한 쓰레드가 동시에 필요할 때 효과적이다.
- 이식성이 높다.
자바가상머신(JVM)에서 작동하기 때문에 운영체제 (ex. Window, Linux)의 종류에 상관없이 작동한다.
- 자동 메모리 관리(Garbage Collecter)
사용하지 않는 객체는 자동으로 메모리에서 체크하고 반환해준다.
- 동적 로딩 지원.
프로그램 실행시 모든 클래스가 로딩되지 않고, 필요한 시점에 클래스를 로딩하여 사용할 수 있다.
그러므로 애플리케이션의 변경사항도 비교적 적은 작업만으로 처리할 수 있다.
JAVA의 장/단점?
- 장점
객체 지향 언어로서 클래스 계층 구조, 상속성, 다형성, 캡슐화 등을 지원
멀티 스레드
C,C++ 많은 언어들은 자체적으로 멀티 스레드를 지원하지 않고, 운영체제의 도움을 받음
반면 자바의 경우는 운영체제 도움 없이 독립적으로 실행이 가능하다 함!!
플랫폼 독립성
하드웨어, 운영체제 등 플랫폼에 종속되지 않는 독립적인 바이트 코드로 컴파일됨
자바 가상 머신(JVM)만 있으면 하드웨어 운영체제와 상관없이 자바 프로그램 실행 가능
- 단점
예외 처리
프로그램 발생 시 발생 할수 있는 예외들을 개발자가 직접 처리해야 한다. 그렇지 않으면 아예 컴파일이 안됨
컴파일 단계에서 속도가 느림
JVM에 의해 기계어로 번역되고 실행되는 과정을 거쳐서, 컴파일되자마자 기계어로 변환되는 C,C++에 비하면 속도가 현저히 떨어진다
그러나 요즘은 바이트 코드를 기계어로 변환해주는 JIT컴파일러 적용 기술의 발전으로 인해, 그 차이가 많이 줄어들었다고는 한다.
상속이란 무엇이고, 상속의 단점은?
상속이란?
부모 클래스의 변수/메소드를 자식 클래스가 물려받아 그대로 사용하게 함
- 장점
유지보수 쉬움 / 중복 코드 줄임 / 통일성 / 다형성
- 단점
기능 추가/변경에 예외 / 버그 발생 시 어디서 발생한지 예측하기가 힘들고, 불필요한 기능을 원치 않는다 해도 상속해야 한다.
Class와 Instance에 대해 설명해주세요.
Class
: 객체를 만들어 내기 위한 설계도 혹은 틀 / 연관되어 있는 변수와 메소드의 집합
Instance
: 객체를 소프트웨어에 실체화한 것 / 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부름
Thread란? Thread를 구현하기 위한 인터페이스, 클래스는 어떤 것?
Thread란?
프로세스 내에서 실제로 작업을 수행하는 주체를 의미
java.lang.Thread 클래스를 상속하거나 Runnable 인터페이스를 구현하여 구현 가능
Static 키워드에 대해 설명해 주세요.
정적 변수
Static 키워드를 이용하여 선언한 변수는 해당 클래스의 모든 객체들에 의해 공유됨
오버로딩과 오버라이딩의 차이점을 말해주세요.
오버로딩
: 메서드의 이름은 같고, 매개변수의 개수나 타입이 다른 함수를 정의하는 것을 의미
오버라이딩
: 상위 클래스 메소드를 하위 클래스가 재정의하는 것
메소드 이름, 파라미터 개수 및 타입도 동일해야 합니다.
주로 상위 클래스의 동작을 상속받은 하위 클래스에서 변경하기 위해 사용됨
오버로딩(Overloading)은 기존에 없던 새로운 메서드를 정의하는 것이고,
오버라이딩(Overriding)은 상속 받은 메서드의 내용만 변경 하는 것
Call by Value와 Call by Reference의 차이
값(value)에 의한 호출
값을 복사해서 새로운 함수로 넘기는 호출 방식. 원본 값 변경X
참조(reference)에 의한 호출
주소 값을 인자로 전달하는 호출 방식. 원본 값 변경O
추상클래스와 인터페이스에 대해 설명해주세요.
추상 클래스가 미완성 설계도라면, 인터페이스는 기본 설계도
- 추상 클래스
extends 키워드를 사용해서 자신의 기능들을 하위 클래스로 확장시키는 느낌
- 인터페이스
implements 라는 키워드처럼 인터페이스에 정의된 메소드를 각 클래스의 목적에 맞게 기능을 구현하는 느낌
MVC 패턴에 대해 동작 방식을 설명해 주세요.
모델(Model), 뷰(View), 컨트롤러(Controller)가 분리된 형태의 아키텍처
세가지가 결합된 형태에서는 어플리케이션의 확장이 어려우므로 모델은 데이터 처리, 뷰는 사용자 인터페이스 처리, 컨트롤러는 비즈니스 로직을 처리하는 등 각각의 요소가 하나의 역할만 담당
Model1과 Model2의 차이를 설명해주세요.
- Model1
가장 먼저 들어오는 곳이 JSP로 JSP에서 비즈니스, VIEW 모든 것을 처리
- Model2
가장 먼저 요청하는 곳이 서브릿단으로 비즈니스 로직을 처리하는 서블릿을 완전히 분리시켜서 VIEW단과 로직을 처리하는 단을 분리시킴
Java의 Collection이란?
Collection 이란?
Collection 객체는 여러 원소들을 담을 수 있는 자료구조를 뜻한다.
배열이 가장 기본적인 자료구조이며, DTO 또한 자료를 담는 하나의 방식이라고 볼 수 있다.
자바에서의 자료구조 유형은 다음과 같다.
- 순서가 있는 목록인 List형
- 순서가 중요하지 않은 목록인 Set형
- 먼저 들어온 것이 먼저 나가는 Queue형
- KEY-VALUE의 형태로 저장되는 Map형
배열과의 차이점은 정적 메모리 할당이 아닌 동적 메모리 할당을 하게 된다.
즉, new int[4]을 하면 4개 공간밖에 못쓰고 미리 선언을 통해 4개의 공간을 만들어야 하지만, collection은 공간이 계속 필요한 만큼 추가될 수 있다.
GET, POST 방식의 차이점
- GET
클라이언트는 GET 요청시 URI와 Header 에만 데이터를 담아서 전송할 수 있으므로 데이터 크기가 제한적이며, URI에 포함된 데이터는 사용자에게 그대로 노출됨
GET 요청은 캐싱이 가능하므로 단순 조회이거나 데이터가 사용자에게 노출되어도 상관없다면 적극 활용하는게 좋음
- POST
데이터를 URI와 Header 그리고 Body에 담아서 전송할 수 있으므로 GET 방식보다 전송할 수 있는 데이터가 현저히 큼
Body 데이터는 일반 사용자에게 노출되지 않으므로 안정적으로 데이터를 전송할 수 있음
객체지향 프로그래밍과 절차지향 프로그래밍의 차이
절차지향은 순차적으로 실행에 초점이 되어 있고, 객체지향은 객체간의 관계/조직에 초점을 두고 있습니다.
절차지향은 데이터를 중심으로 함수를 구현합니다.
이에 반해 객체지향은 기능을 중심으로 메서드를 구현하게 됩니다.
클래스, 객체, 인스턴스의 차이
- 클래스
객체를 만들어 내기 위한 설계도
- 객체
소프트웨어 세계에 구현할 대상
- 인스턴스
객체를 소프트웨어에 실체화 한 것
Annotation이란?
프로그램에게 추가적인 정보를 제공해주는 메타데이터(meta data: 데이터를 위한 데이터)
어노테이션의 용도
- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
- 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공
- 실행시(런타임시)특정 기능을 실행하도록 정보를 제공
클래스변수, 지역변수, 인스턴스 변수의 차이
- 클래스 변수
클래스의 멤버변수에 static을 붙여준 변수
클래스 변수는 모든 인스턴스가 공통된 값을 공유함
한 클래스의 모든 인스턴스들이 공통적인 값을 가져야할 때 선언
메모리에 딱 한번 올라감
인스턴스를 생성하지 않고도 사용 가능
- 전역 변수
클래스 변수는 public 을 붙이면 같은 프로그램 내에서 어디서든 접근할 수 있는 전역 변수가 됨
- 인스턴스 변수
클래스의 인스턴스가 생성될 때 생기는 변수
각각의 인스턴스마다 고유의 값을 가져야할 때 선언
- 지역 변수
메서드 내에서 선언되며 메서드 내에서만 사용할 수 있는 변수
메서드가 실행될 때 생성되고,메서드가 끝나면 소멸
자바와 c언어의 차이점?
가장 큰 차이점은 실행환경입니다.
자바는 링크 과정 없이 컴파일러가 바로 바이트코드를 생성하며, c언어는 컴파일에 링크 과정이 있습니다.
자바의 접근제어자를 설명해보세요.
public, private, protected, default가 있습니다.
private -> default -> protected -> public 순으로 보다 많은 접근을 허용한다.
- private
접근제어자가 private으로 설정되었다면 private 이 붙은 변수, 메소드는 해당 클래스에서만 접근이 가능하다.
- default
접근 제어자를 별도로 설정하지 않는다면 접근 제어자가 없는 변수, 메소드는 default 접근 제어자가 되어 해당 패키지 내에서만 접근이 가능하다.
- protected
접근제어자가 protected로 설정되었다면 protected가 붙은 변수, 메소드는 동일 패키지의 클래스 또는 해당 클래스를 상속받은 다른 패키지의 클래스에서만 접근이 가능하다.
- public
접근제어자가 public으로 설정되었다면 public 접근제어자가 붙은 변수, 메소드는 어떤 클래스에서라도 접근이 가능하다.
JVM이란?
JAVA Virtual Machine
자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것
OOP란?
OOP(Object-Oriented Programming)이란?
객체 지향적인 프로그래밍
1. 캡슐화 2. 상속 3. 추상화 4. 다형성
객체지향 언어에서 제일 중요한게 뭐라고 생각하십니까?
코드에 의존성을 줄이고, 결합도를 낮추는 것이라고 생각합니다.
instanceof란?
객체 타입을 확인하는 연산자