📕 Java의 특징을 설명해주세요.
자바(Java)는 절착적 언어와 다르게 객체 지향 언어로 개발된 프로그래밍 언어입니다.
자바는 자바 가상 머신(JVM, Java Virtual Machine)을 사용하기 때문에, 운영체제와는 독립적으로 동작할 수 있습니다.
또한 “가비지 컬렉션”에 의해 메모리가 자동 관리되며, “멀티 쓰레드”를 지원합니다.
JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느리다는 단점이 있습니다.
📕 JVM의 역할에 대해 설명해주세요.
자바 가상 머신(JVM, Java Virtual Machine)이란 운영체제 위에서 자바 바이트 코드를 실행시키기 위한 가상의 기계라고 할 수 있습니다.
- 자바 바이트 코드(Java Bytecode) - 자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미합니다.
- 자바 컴파일러(Java Compiler) - 자바를 가지고 작성한 자바 소스 코드를 자바 가상 머신이 이해할 수 있는 자바 바이트 코드로 변환합니다.
📕 자바 가상 머신 구성에 대해 설명해주세요.
- 자바 인터프리터(interpreter) - 자바 컴파일러에 의해 변환된 자바 바이트 코드를 읽고 해석하는 역할을 하는 것
- 클래스 로더(class loader) - 자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야 모든 코드가 자바 가상 머신과 연결됩니다. 이렇게 동적으로 클래스를 로딩해주는 역할을 하는 것이 바로 클래스 로더(class loader)입니다.
- JIT 컴파일러(Just-In-Time compiler)
- 가비지 컬렉터(garbage collector)
📕 Java의 컴파일 과정에 대해 설명해주세요.
- 개발자가 .java 파일을 생성한다.
- build를 한다.
- 자바 컴파일러의 javac 명령어를 통해 자바 바이트코드(.class)를 생성한다.
- Class Loader를 통해 JVM 메모리 내로 로드한다.
- 실행엔진을 통해 각 운영체제에 맞는 기계어로 해석된다.
📕 가비지 컬렉션에 대해 설명해주세요.
C언어나 C++같은 언어에서는 필요한 메모리 공간을 라이브러리를 통해 운영체제로부터 할당받아 사용하다가 다 쓰면 다시 해제해서 운영체제로 반환해야 합니다.
개발자가 관리하지 않는다면 메모리 공간을 할당받기만하고 반환하지 않아 프로세스가 점점 커지다가 운영체제에 의해 시그널을 맞고 죽게됩니다. 이러한 버그를 "메모리 릭(Memory Leak)"이라고 합니다.
자바의 경우 JVM을 통해 메모리를 할당받아 더 이상 사용되지 않는 메모리 공간은 JVM이 알아서 회수한 다음 해제해주는데 이러한 동작을 "가비지 컬렉션(Garbage Collection)"이라고 합니다.
📕 Java에서 제공하는 원시 타입들에는 무엇이 있고, 각각 몇 바이트를 차지하나요?
정수형 byte, short, int, long 실수형 float, double 문자형 char 논리형 boolean이 있고,정수형 1, 2, 4, 8, 실수형 4, 8, 문자형 2, 논리형 1 바이트를 차지합니다.