•
만약 코드 캐시 영역이 꽉차게 된다면 JIT 컴파일러는 어떻게 동작할까요?
◦
JIT 컴파일러는 더 이상 바이트코드를 네이티브 코드로 컴파일 할 수 없다.
◦
해당 코드는 인터프리터로 실행된다.
•
JIT 컴파일러를 사용하더라도 아무 코드도 실행되지 않았다면 캐시는 존재하지 않습니다. 이때 매우 많은 동일한 바이트코드에 대한 요청이 한 번에 애플리케이션 서버로 들어온다면 응답 속도가 느려집니다. 이를 어떻게 해결할 수 있을까요?
•
Permanent Generation에 대해 설명해 주시고, 왜 JDK 8부터 지워졌는지 설명해 주세요.
◦
permGen 영역은 힙 영역에 속한다.
◦
힙 영역은 JVM 시작 시 설정된 크기만큼 사용 가능하다.
◦
제한된 메모리 영역을 사용하는 만큼 OOM 발생할 위험이 있기 때문에,
◦
Java 8 부터 시스템의 전체 메모리를 사용하는 Native 영역의 metaspace 영역으로 대체되었다.
•
static block에 대해 설명해 주시고, 언제 사용하는지 알려주세요. (+ 단점도 같이 알아보기)
◦
static 블록은 클래스가 처음 로드될 때 동작한다. ( 인스턴스 생성과 무관 )
▪
애플리케이션 클래스 로더는 클래스가 필요한 시점에 동적으로 로드.
◦
static 블록은 클래스 변수의 초기화 또는 클래스 수준의 초기화 작업을 수행할 때 사용.
public class Example {
// static 변수
private static int staticVariable;
// static 블록
static {
System.out.println("Static block is executed.");
staticVariable = 42;
}
Java
복사
◦
모든 인스턴스에 동일한 변수 값을 공유할 수 있다.
◦
객체를 생성하지 않고 사용하기 때문에 속도가 빠르다.
◦
단점
▪
무분별한 static 사용은 메모리 누수의 원인이 된다.
•
GC의 관리 대상이 아니기 때문
•
Pass by value와 Pass by reference의 차이는 무엇일까요?
◦
Pass By Value
▪
메소드에 매개 변수를 전달할 때 값의 복사본을 전달
▪
Java는 Pass By Value만 지원
◦
Pass By Reference
▪
변수의 메모리 주소를 직접 전달
•
메소드 내부에서 값 변경 시 원본도 변경
•
다형성이 무엇이고, 왜 필요할까요?
◦
OOP의 개념 중 하나. “하나의 인터페이스가 여러 형태의 구현을 가질 수 있다.”
◦
코드의 재사용성, 확장성, 유지 보수성 증대 효과
◦
다형성 case ‘오버로딩’ , ‘오버라이딩’ , ‘업캐스팅’ , ‘다운캐스팅’ , ‘인터페이스’ , ‘추상메소드’ , ‘추상클래스’
◦
→ 클래스가 상속 관계에 있을 때 나타나는 성질들
•
상속 개념 / 언제 쓰는지 / 단점
◦
상속이란?: 부모 클래스의 속성과 메소드를 새로운 클래스가 물려 받는 것.
▪
부모의 기능을 그대로 사용하면서, 필요 시 새로운 기능을 추가하거나, 수정할 수 있다.
◦
언제 사용하는지?: IS-A 관계가 성립될 때 사용.
▪
“A는 B의 한 종류이다.” 일 때.
•
공통 기능이 많은 클래스: 물려받은 기능을 재사용
•
계층적 구조: 동물 → 포유류 → 개
•
기존 클래스 확장: 라이브러리의 클래스를 확장해서 새로운 기능을 추가할 때
•
다형성 구현: 같은 인터페이스로 다른 동작을 수행하게 할 때. (기능의 수정)
◦
상속의 단점은?:
▪
강한 결합: 자식 클래스가 부모 클래스를 강하게 의존하여, 부모의 변경이 자식에게 영향을 미침.
▪
복잡성 증가: 상속된 계층이 깊어질 수록 어떤 메소드가 어디서 정의되었는지 추적하기 어렵고, 유지보수하기 어려워진다.
▪
LSP 위반 위험: 자식 클래스의 기능 변경으로 부모 클래스를 대체할 수 없는 경우가 생김
•
상속 vs 조합(컴포지션)
◦
상속: IS-A 관계, 자식 클래스가 부모 클래스의 기능을 물려받는다.
▪
강한 결합
▪
컴파일 시점에 관계 결정
▪
클래스 상속 구조가 고정적
◦
조합: HAS-A 관계, 한 클래스가 다른 클래스의 객체를 호함해서 기능을 사용.
▪
느슨한 결합
▪
런타임에 관계 변경 가능
▪
포함된 객체 변경이 외부 클래스에 미치는 영향 최소화
▪
동적으로 객체 교체 가능
•
instanceof 키워드를 사용할 때 문제점으로 무엇이 있을까요? (추상 메서드로 쓸 때 대비 왜 성능이 느린지도 같이 보기)
◦
추상화가 깨진 코드: instanceof라는 연산 조건에 따라 구현을 해야함
◦
OCP 위반: 새로운 객체가 추가될 때마다 instanceof 조건절이 추가되어야한다. (로직의 변경)
## 숙제
•
프로젝트 주제 2개 정하고 간단히 구체화하기 (프로젝트 목표, 주요 기능 정도)
•
챕터 14부터 복습 열심히하기
•
이력서 전달하기