Test

채현우·2022년 7월 13일
0

1. Java

1. JVM이란 무엇인가?

자바 가상 머신의 약자를 줄여 부르는 용어(Java Virtual Machine)
JVM의 역할 : 자바 애플리케이션을 클래스 로더를 통해 읽어 -> 자바 API와 함께 실행하는 것
메모리 관리(GC)를 수행하며 스택(Stack) 기반의 가상 머신

2. OOP(Object Oriented Programming) 란?

객체 지향 프로그래밍
현실 세계를 프로그램 설계에 반영한다는 개념을 기반으로 함
프로그래밍에서 필요한 데이터를 추상화시켜 행위(Method)와 상태(Attribute)를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
OOP의 4가지 특징(캡 상추다)으로는 캡슐화, 상속, 추상화, 다형성이 있다.

3. GC(가 바지 콜렉터) 란?

GC는 힙(Heap) 영역에서 사용하지 않는 객체(인스턴스)들을 제거하는 작업을 의미
작업이 필요한 이유 : Java는 개발자가 메모리를 직접 해제해줄 수 없는 언어이기에 객체를 사용하고 제거하는 기능이 필요함

4. 오버 라이딩과 오버 로딩은 무엇이며 어떤 차이점이 있나?

오버 라이딩(Overriding)은 상위 클래스의 메서드를 재정의 하는 것을 의미 / 런타임 다형성
오버 로딩(Overloading)은 같은 Class 내에서 동일한 메서드 이름을 가지지만, 매개 변수의 타입 혹은 개수가 다르게 구현할 수 있는 것을 의미 / 컴파일 타임 다형성
추가로 "@Override" 어노테이션을 써야 하는 이유는 컴파일 타임에 오버 라이딩에 대한 안정성을 부여해주기 때문.

5. 리플렉션(Reflection) 이란?

구체적인 클래스 타입을 알지 못해도 클래스의 메서드, 타입, 변수들을 접근할 수 있게 해주는 Java API
JVM에서 실행되는 애플리케이션의 런타임 동작을 검사하거나 수정할 수 있는 기능이 필요한 프로그램에서 사용됨

6. 제네릭(Generics) 이란?

제네릭은 Java의 타입 안정성을 맡고 있다.
컴파일 과정에서 타입 체크를 해주는 기능으로 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형 변환의 번거로움을 줄여줌

7. Java의 접근 제어자의 종류와 이에 대해 설명하세요.

제어자 같은 클래스 같은 패키지 자식 클래스 전체
public O O O O
protected O O O
(default) O O

private O

8. 클래스와 객체는 무엇인가?

클래스(Class)는 객체를 정의하는 틀 또는 설계도와 같은 의미
객체(Object)는 식별 가능한 개체 또는 사물 / 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가짐

9. SOLID(객체 지향 5대 원칙)에 대해 설명하세요.

SRP(단일 책임 원칙) - 1개의 클래스는 1개의 책임만 가져야 한다.
OCP(개방-폐쇄 원칙) - 확장에는 열려 있으나 변경에는 닫혀 있어야 하며, 다형성을 활용해야 한다.
ISP(인터페이스 분리 원칙) - 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 되는 원칙 / 즉. 거대한 인터페이스보단 더 작고 구체적인 인터에 피스로 분리해야 한다.
DIP(의존관계 역전 원칙) - 추상적인 것은 자신보다 구체적인 것에 의존하지 않고, 변화하기 쉬운 것에 의존해서는 안된다는 원칙 / 구체적으로는 구현 클래스에 의존하지 말고, 인터페이스에 의존해야 하는 원칙이다.

10. 인터페이스와 추상 클래스의 차이점에 대해 설명하세요.

추상 클래스는 객체의 추상적인 상위 개념으로 공통된 개념을 표현할 때 사용하고, 단일 상속만 가능하다. 그리고 추상 클래스를 상속하는 집합 간에는 연관 관계가 있다.
인터페이스는 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용하고, 다중 상속이 가능하다. 인터페이스를 구현하는 집한 간에는 관계가 없을 수 있다.

11. 컬렉션 프레임워크(Java Collection Framework)에 대해 설명해주세요.

자료 구조를 바탕으로 객체, 데이터들을 효율적으로 관리할 수 있는 자료 구조들이 있는 라이브러리
List, Set은 Collection 인터페이스를 상속받지만, Map 인터페이스는 구조상의 차이라 별도로 정의한다.

12. List와 Map의 차이점은?

Map은 검색할 수 있는 인터페이스이고, 데이터를 삽일할 때 Key와 Value의 형태로 삽입되어, Key를 이용해서 Value를 얻을 수 있다. 데이터 순서를 보장하지 않고, Key값은 중복 허용 X , Value값은 중복 허용
List는 순서가 있는 Collection이고, 데이터 중복이 허용된다.
List와 Map의 차이점은 List는 데이터 순서를 보장하지만, Map은 순서를 보장하지 않는다.

13. 직렬화 란?

Java에서 입출력할 때는 스트림이라는 데이터 통로를 통해 이동한다.
하지만 객체는 그렇지 않아서 스트림을 통해 전송이 불가능해서 객체를 스트림으로 입출력하기 위해 바이트 배열로 변환하는 것을 의미함
역 직렬화 : 스트림 -> 객체

12. 정적(static) 이란?

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

13. Java는 멀티 스레드(Multi Thread) 환경인데 멀티스레드란 무엇인가?

멀티 스레드란 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것
멀티 스레드 프로그램은 공유하는 자원에 대해 동기화 문제가 발생할 수 있다.
method area, heap area는 스레드가 공유하는 영역이다.
@ 추가적으로 JS(자바스크립트)는 싱글 스레드

14. 멀티 스레드(Multi Thread) 사용 이유는?

멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유하므로, 시스템 자원의 낭비가 적다.
하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋아진다.

2. Spring & Spring boot

profile
주니어 백엔드 개발자

0개의 댓글