- Reflection이란?
- 객체를 통해 클래스의 정보를 분석하는 방법. introspection (자기 관찰)의 속성을 띤다
- 이를 통해 실행중인 프로그램의 내부를 검사하고 속성을 수정하는 등의 행위를 할 수 있다
- 접근 제어자 종류 특성 설명
- private : 같은 클래스 내에서만 접근
- default : 같은 패키지 내애서만 접근
- protected : 같은 패키지 내, 또는 자식 클래스에서 접근
- public : 접근 제한 없음
- Static이란?
- 클래스가 로딩될 때, 메모리 공간을 할당하는데 처음 설정된 메모리 공간이 변하지 않음을 의미
- 자바의 메모리 영역
- 메서드 영역 : static 변수, 전역변수, 코드에서 사용되는 Class 정보 등이 올라간다. 코드에서 사용되는 class들은 로더로 읽어 클래스별로 런타임 필드데이터, 메서드 데이터 등을 분류해 저장한다.
- 스택(Stack) : 지역변수, 함수(메서드) 등이 할당되는 LIFO(Last In First Out) 방식의 메모리
- 힙(Heap) : new 연산자를 통한 동적 할당된 객체들이 저장되며, Garbage 컬렉션에 의해 메모리가 관리되어 진다.
- JVM 구동 순서
- 바이트 코드 ( .class ) 로 컴파일
- 클래스 로더를 통해 JVM 내부로 인입
- 바이트 코드 검증 및 재 해석
- 바이너리 코드로 변경
- static 변수 및 블록 초기화
- 인스턴스 블록 수행
- 생성자 호출
- main 함수 호출
- 제네릭이란?
- 타입 매개 변수. 타입을 매개변수(Parameter)로 사용할 수 있게 한다.
- 클래스에서 사용할 타입을 클래스 외부에서 설정하는 것.
- Java는 참조 자료형(클래스, 인터페이스)만 가능하다
- 기본 자료형을 사용하기 위해선 wrapper 클래스를 이용해야 함.
- 자바의 GC는 어떻게 동작하나요?
- GC 방식
- 힙 영역에서 사용하지 않는 객체를 제거하는 작업
- Minor gc는 young 영역에서 작업되며, Major는 Old 영역에서 일어납니다
- Minor gc의 영역은 eden에서 Survivor 1, 2로 이동되며 이는 다시 Old 영역으로 이동됩니다.
- Survivor 1 또는 2 영역 중 한 영역은 반드시 비어 있어야 합니다.
- 2개인 이유는 gc 당시 단편화를 막기 위함
- 각 영역은 minor gc 때마다 역할을 교체합니다.
- GC 종류
- SerialGc, Mark-Sweep-Compact, Concurrent Mark Sweep, Parallel GC, G1, Zgc, 셰넌도어
- hashCode() 값이 모두 같다면 어떤 일이 벌어지나요?
- null이 아닌 경우 모든 ==는 true이다
- jvm 메모리 구조를 설명해 주세요.
- PC Register: 현재 수행 중인 JVM 명령의 주소를 가진다
- Stack Area: 지역변수, 파라미터의 생성 영역. 객체 레퍼런스도 여기 저장된다
- Heap Area: 동적으로 생성된 객체, 배열이 저장되며 GC 대상
- Method Area: 상수, 맴버 변수, 메서드 정보, Type 정보 등이 저장됩니다.
- 람다 함수의 실제 실행 시점
- 런타임에 객체를 생성 할 수 있도록 레시피만을 컴파일 타임에 생성해 둔다
- 객체이기 때문에 this가 SimpleLambda 이다
- 익명 클래스와는 다르게 항상 새로운 객체를 생성하지는 않는다
- 람다와 함수형 인터페이스와의 관계
- 추상 메서드가 한 개만 존재하는 인터페이스를 간결하게 표현한 것이 람다이다
- JVM의 한계로 인해 내부 복잡도를 올리는 대신 기존 명세를 이용하기 위해 사용되었다
- 런타임에 동적으로 클래스를 정의하고 인스턴스를 생성하여 반환하도록 구현되어있다.
- 매니페스트 파일이란?
- jar 파일에서 실행하기 위한 기반 동작등을 설정하는 파일. 어플리케이션의 정보 즉, 일종의 메타정보