[ 백엔드 면접준비 : Java&Kotlin + SpringBoot ] Java 면접 질문 정리_01
Ⅰ. 'JVM' 이 뭔가요?
◇ "JVM [ Java Virtual Machine ] " 은 JRE { Java Runtime Environment } 의 일부로서,
Java 바이트 코드를 실행하기 위한 런타임 환경을 제공합니다.
◇ 하드웨어 및 운영 체제의 독립성을 책임지는 Java 기술의 구성 요소로,
Java의 "한 번 작성하면 어디서나 실행" 이라는 핵심 기능을 가능하게 합니다.
◇ JVM은 다음과 같은 주요 작업을 수행함으로써 작동합니다.
● 코드 로드 : 컴파일 된 바이트코드를 메모리에 로드합니다.
● 코드 검증: 로드된 Java 바이트코드의 정확성을 보장합니다.
● 코드 실행 : JVM은 기반 하드웨어에 따라서 바이트코드를 기계 언어로 해석하여 실행합니다.
Ⅱ. 'JDK', 'JRE' 및 'JVM'의 차이점은??
JVM (Java Virtual Machine)
JVM은 Java 프로그램이 실행되는 가상 머신입니다.
Java 코드는 플랫폼 독립적인 바이트코드로 컴파일되며,
JVM은 이 바이트코드를 해석하고 실행하는 역할을 합니다.
JVM은 메모리 관리, 가비지 컬렉션, 스레드 관리 등과 같은 런타임 환경을 제공하여,
Java 애플리케이션이 다양한 플랫폼에서 일관되게 실행될 수 있도록 합니다.
JRE (Java Runtime Environment)
JRE는 Java 프로그램을 실행하기 위한 환경을 제공합니다.
JRE는 JVM을 포함하고 있으며,
Java 애플리케이션이 실행되는 데 필요한 표준 라이브러리와 리소스를 제공합니다.
즉, JRE는 Java 프로그램을 실행하기 위한 필수 구성 요소를 갖춘 패키지로,
개발자는 JRE만 설치하면 Java 애플리케이션을 실행할 수 있습니다. 그러나 JRE는 Java 애플리케이션을 개발하는 데 필요한 도구는 포함하고 있지 않습니다.
JDK (Java Development Kit)
JDK는 Java 애플리케이션을 개발하기 위한 종합적인 도구 모음입니다.
JDK는 JRE를 포함하고 있으며,
추가적으로 Java 컴파일러, 디버거, 문서화 도구 등 다양한 개발 도구를 제공합니다.
개발자는 JDK를 사용하여 Java 소스 코드를 작성하고,
이를 컴파일하여 실행 가능한 프로그램으로 변환할 수 있습니다.
따라서 JDK는 Java 개발에 필요한 모든 도구를 제공하는 핵심 패키지입니다.
Ⅲ. 자바의 주요 특징은??
1. 객체 지향 프로그래밍 {OOP}
● Java는 모든 것을 객체로 다루며, 이는 코드의 재사용성과 유지 보수성을 높입니다.
객체 지향 개념인 {캡슐화, 상속, 다형성}을 지원하여, 복잡한 SW 시스템을 보다 쉽게 설계하고 관리할 수 있습니다.
@ 객체 지향적 특성.
1. 캡슐화
- 데이터와 메소드를 하나의 단위(클래스)로 묶음
- 접근 제어자( public, private 등) 를 통해 데이터를 보호.
2. 상속
- 'extends' 키둬드를 통해 클래스 간 자원 공유.
- 코드 재사용성과 확장성 제공.
3. 다형성
- 같은 메소드명으로, 다른 동작을 구현 가능.
- 접근 제어자( public, private 등) 를 통해 데이터를 보호.
● 물론 절차 지향적인 개발도 부분적으로 가능{static 메소드 사용, main메소드 중심 순차적 코딩} 하긴 하지만,
Java의 설계 철학과 구조는 객체 지향에 최적화되어있습니다.
2. 플랫폼 독립성
- 자바는 "한 번 작성, 어디서나 실행" [ Write Once, Run Anywhere ] 이라는 원칙을 따릅니다.
- 자바 코드는 JVM{Java Virtual Machine}에서 실행되므로,
JVM이 설치된 모든 플랫폼에서 동일한 코드를 실행 가능합니다.
{ 다양한 운영 체제에 맞춰서 코드를 수정할 필요가 없습니다 }
3. 강타입 언어.
- 자바는 강타입 언어로, 변수의 타입을 명시적으로 선택해야 합니다.
이는 코드의 가독성을 높이고, 타입 관련 오류를 컴파일 타임에 발견할 수 있게 해줍니다.
결과적으로 프로그램의 안전성과 보안성을 향상시킵니다.
4. 멀티 스레드 지원.
- 자바는 멀티스레드 프로그래밍을 지원하여, 여러 스레드를 동시에 실행할 수 있습니다.
이를 통해 CPU 자원을 효율적으로 활용하고, 사용자 경험을 개선 가능합니다.
5. 가비지 컬렉션.
- 자바는 자동 메로리 관리 기능인 가비지 컬렉션을 제공합니다.
- 개발자는 객체를 생성할 때 '메모리'를 수동으로 관리할 필요가 없으며,
사용되지 않는 객체는 자동으로 메모리에서 해제됩니다.
=> 메모리 누수를 방지하고, 개발자가 메모리 관리에 대한 부담을 덜 수 있습니다.
Ⅳ. Java의 "WORA(Write Once, Run Anywhere)
- "한 번 작성, 어디서나 실행" [ Write Once, Run Anywhere ] 이라는 원칙
-> Java의 WORA는 Java 앱을 어떤 장치에서든 작성하여, 바이트코드로 컴파일하고,
JVM이 설치된 어떤 장치에서든 실행할 수 있다는 것을 의미하는데
이 기능은 하드웨어와 운영 체제의 세부 사항을 추상화하는 JVM 덕분에 가능합니다.
Ⅴ. Java에서는 예외를 어떻게 처리할까
◆ Java에서는 [ try, catch, finally, throw ] 키워드를 사용하여서 예외를 처리합니다.
▼ try { 예외 탐지와 격리}
: 예외가 발생할 수 있는 코드를, try 블록 안에 래핑해서 에러를 탐지합니다.
: 예외가 발생하면, 즉시 해당 지점에서 코드실행을 중단하고 catch 블록으로 제어권을 이전합니다.
▼ catch {예외 처리 메커니즘 }
: 특정 예외 유형을 잡아내고 처리하는 블록
: 여러 개의 catch 블록을 통해 다양한 예외 유형별 처리 가능.
: catch 블록으로 예외 종류별로 핸들링이 가능합니다.
: 예외 객체를 통해서 상세한 예외 정보 확인이 가능.
▼ finally {무조건 실행되는 코드 블록 }
: try 및 catch 블록 이후에 항상 실행되는 코드를 포함하며 예외와 상관없이 실행됨.
: 예외 발생 여부와 관계없이 항상 실행.
: 주로 리소스 해제, 연결 종료 등 마무리 작업에 사용.
: try-catch 블록의 마지막에 위치.
▼ throw {수동 예외 발생}
: 예외를 수동으로 발생시키는데 throw 키워드를 사용합니다.
: 'throw new 예외 클래스()' 형태로 사용합니다.
: 특정 조건에서 의도적인 예외 생성 가능합니다.
▼ throws {예외 전파}
: 메서드가 예외를 발생시킬 수 있다는 것을 메소드 정의부분에 명시해서,
예외를 자신이 아닌 호출한 곳으로 넘길 수 있습니다.
: 메서드 선언부에 사용하여, 해당 메서드가 특정 예외를 던질 수 있음을 명시.
: 예외 처리의 책임을 호출자에게 위임.
public void exampleMethod() throws MyException {
try {
// 예외 발생 가능한 코드
if (someCondition) {
throw new MyException("Custom exception");
}
} catch (MyException e) {
// 특정 예외 처리
System.out.println(e.getMessage());
} finally {
// 항상 실행되는 코드
closeResources();
}
}
'면접준비[프론트,백,데이터,CS] > InterView 준비 [ 백엔드 ]' 카테고리의 다른 글
[ 백엔드 면접 준비 ] 백엔드 면접 준비 _ 02. (0) | 2024.12.16 |
---|---|
[ 백엔드 면접 준비 ] 백엔드 면접 준비 _ 01. (2) | 2024.12.13 |
[ 백엔드 면접 준비 ] 블로킹 vs 논블로킹 // 동기 vs 비동기 (0) | 2024.12.09 |
[ 백엔드 면접 준비 ] REST & REST API & RESTfull API 란?? (2) | 2024.12.09 |