본문 바로가기

좋아하는 것_매직IT/100.면접준비

Java관련 백엔드 기술 면접 질문및 답변 깔끔 정리

반응형

벡엔드 기술면접에서는 아래 내용에 대해서 정리가 필요하다..
JAVA / SpringBoot / DB / Web / 자료구조

이중에서 JAVA에 대해서 정리해보자.
1) JVM에 대해서 설명해 보세요.
JVM 은 Java Virtual Machine 의 약자로, 자바가상머신을 말함.
JVM의 역할을 잠시 살펴보자면, 자바 어플리케이션을 클래스 로더를 통해 읽어서 자바API와 함께 실행하는 것을 말함.
JVM 은 가비지컬렉터(GC) 즉 메모리 관리를 수행한다.

728x90


2) OOP에 대해서 정리해보자.
OOP 는 Object Oriented Programming 의 약자로, 객체지향 프로그래밍을 말함.
현실 세계를 프로그램 설계에 반영한다는 것을 목표로 함.
프로그래밍에서 필요한 데이터를 추상화 시켜서 Method(행위) 와 Attribute(상태)를 가진 객체를 생성하고, 해당 객체들간의 유기적인 상호작용을 통해서 로직을 구현하는 프로그래밍 방법을 말함.

아래와같이 OOP의 4가지 특징도 중요하다.
상속성,추상화, 다형성, 캡슐화  (상추다캡!) 

가. 상속성은 부모클래스의 특징을 자식클래스가 물려받는것
나. 추상화는 추상화 객체들의 공통적인 특징(기능및속성)을 모아서 하나의 클래스로 다루는것, 각 객체의 구체적인 개념에 의존하지 말고 추상적인 개념에 의존해서 설계를 유연하게 변경할 수 있음.
다. 다형성은 보통 오버로딩과 오버라이딩이 있는데, 하나의 타입으로 여러가지 참조변수를 사용할 수 있는것을 말함
오버로딩(Overloading) 은 같은 클래스내에서 동일한 메소드 이름을 가지지만, 매개 변수의 타입 또는 개수가 다르게 구현할 수 있는 것을 의미하며, 컴파일 타임의 다형성을 말함.
오버라이딩(Overriding) 은 상위 클래스의 메소드를 재정의 하는 것을 의미하며, 런타임의 다형성을 말함. 

(참고로, @Override 어노테이션을 사용해야하는 이유는 컴파일 타임에 오버라이딩에 대한 안정성을 부여해주기 때문!!)

라. 캡슐화는 특정 객체가 독립적으로 역할을 수행하기 위해서 필요한 기능과 데이터를 하나로 묶는것을 말함..(모듈화?)
객체 안의 정보를 직접 접근을 허용하지 않으며, 필요에 따라 확인할 수 있는 인터페이스를 외부에 공개하는것 (은닉화?)

3) GC에 대해서 정리해보자.
GC는 Garbage Collector 의 약자이며,  Heap 영역에서 사용하지 않는 객체(인스턴스)를 제거하는 작업을 말함.
GC가 필요한 이유는 C/C++과는 다르게 Java에서는 개발자가 메모리를 직접 핸들링 하지 않는 언어이기때문에 객체를 사용하고 제거하는 기능의 자동화가 필요함.

4) 리플렉션(Reflection) 에 대해서 정리해보자.
리플렉션이란 구체적인 클래스 타입을 알지 못해도 클래스의 메소드, 타입, 변수들을 접근할 수 있게 해주는 Java API 를 말함.
JVM에서 실행되는 어플리케이션의 런타임 동작을 검사하거나 수정할 수 있는 기능이 필요한 프로그램에서 사용됨.

5) 제네릭(Generics) 에 대해서 정리해보자.
제네릭은 Java의 타입 안정성을 맡고 있는데, 컴파일 과정에서 타입 체크를 해주는 기능으로 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줄 수 있음.

6) Java의 접근제어자의 종류

접근제어자 같은 클래스 같은 패캐지 자식 클래스 전체
public O O O O
protected O O O  
(default) O O    
private O      

7) 클래스와 객체에 대해서 정리해보자.
클래스(class) 는 객체를 정의하는 틀 or 설계도를 말함. 간단하게 말해서 붕어빵의 틀!!
객체(object)는 식별가능한 개체 or 사물, 붕어빵!

8)SOLID, 객체지향의 5대원칙에 대해서 정리해보자.
가. 단일 책임 원칙 (Single responsibility principle / SRP)
한 클래스는 하나의 책임만 가져야 한다.

나. 개방-폐쇄 원칙 (Open/closed principle / OCP)
“소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.”

다. 리스코프 치환 원칙 (Liskov substitution principle / LSP)
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다 

라. 인터페이스 분리 원칙 (Interface segregation principle / ISP)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.”

마. 의존관계 역전 원칙 (Dependency inversion principle / DIP)
프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.”[4] 의존성 주입은 이 원칙을 따르는 방법 중 하나다.

9) 추상클래스와 인터페이스의 차이점에 대해서 정리해보자.
추상클래스는 객체의 추상적인 상위개념으로 공통된 개념을 표현할 때 사용하고, 단일 상속만 가능함. 
즉, 추상클래스를 상속하는 집합간에는 연관관계가 존재함.

인터페이스는 구현 객체가 같은 동작을 한다는 것을 보장하기 위해서 사용하고, 다중상속이 가능해짐.
즉, 인터페이스를 구현하는 집합간에는 연관관계가 없을 수 있음.

10) 컬렉션 프레임워크(Java Collection Framework) 에 대해서 정리해보자.
자료구조를 바탕으로 객체, 데이터들을 효율적으로 관리할 수 있는 자료 구조들이 있는 라이브러리를 말함.
참고로, List, Set은 Collection 인터페이스를 상속받지만, Map 인터페이스는 구조상의 차이라 별도로 정의함.

11) List 와 Map의 차이점을 정리해보자.
List 는 순서가 있는 Collection 을 말하고, 데이터 중복이 허용됨.
Map은 검색할 수 있는 자료구조이고 데이터를 삽입할 때 Key와  Value 형태로 삽입되어 Key를 이용해서 Value 를 얻을 수 있음.
Map 은 데이터 순서를 보장하지 않고, Key값은 중복허용이 안되지만, Value 는 중복가능함.
List와 Map 의 차이를 한마디로 말하자면, List는 데이터 순서를 보장하지만, Map은 데이터순서를 보장하지 않음.

12) 직렬화에 대해서 정리해보자.
Java에서 입출력할 때는 Stream 이라는 데이터 통로를 통해서 이동하게되는데, 객체는 그렇지 않기때문에 Stream 통해서 전송이 불가능함으로써, 객체를 Stream으로 입출력하기 위해서 byte array 로 변환하는 것을 말함.

13) Static 에 대해서 정리해보자.
static 키워드를 통해 생성된 정적 멤버들은 PermGen 또는 Metaspace 에 저장되고, 저장된 메모리는 모든 객체가 공유해 서 하나의 멤버를 어디서든지 참조할 수 있는 장점이 존재함.
하지만, GC의 관리 영역 밖에 존재하기 때문에 프로그램 종료 시까지 메모리가 할당된 채로 존재해서, 너무 남발하게 되면 시스템 성능에 악영향을 줄 수 있다.

728x90

14) 멀티스레드에 대해서 정리해보자.

멀티 스레드(multi thread)란 하나의 프로세스(process) 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 말하며, 멀티 스레드 프로그램은 공유하는 자원에 대해 동기화 문제가 발생할 수 있다.
 - method area, heap area는 스레드가 공유하는 영역이다.

15) 멀티스레드의 장점을 정리해보자.
멀티스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유함으로써, 시스템 자원의 낭비가 적음.
하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어서 사용자와의 응답성이 좋아짐.

오늘의 블로그는 여기까지고요..
항상 믿고봐주셔서 감사합니다. 

728x90
300x250