[F-lab] 2주차 복습

태그
F-lab
3 more properties
만약 코드 캐시 영역이 꽉차게 된다면 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부터 복습 열심히하기
이력서 전달하기