훌륭해요!
정답률 80%
문제별 결과
Java의 record는 상속(extends)을 지원한다.
record는 암시적으로 final이며 다른 클래스를 상속할 수 없습니다. 인터페이스 구현만 가능합니다.
Java에서 synchronized는 공정한(fair) 잠금을 보장한다.
synchronized는 공정성을 보장하지 않습니다. 공정한 잠금이 필요하면 ReentrantLock(fair=true)을 사용합니다.
Java에서 CompletableFuture는 동기적으로만 실행된다.
CompletableFuture는 비동기 프로그래밍을 위한 클래스입니다. supplyAsync(), thenApplyAsync() 등으로 비동기 실행됩니다.
Java에서 volatile은 원자성(atomicity)을 보장한다.
volatile은 가시성(visibility)만 보장합니다. 원자성이 필요하면 AtomicInteger 등 Atomic 클래스를 사용합니다.
Java에서 volatile 키워드는 변수의 가시성을 보장한다.
volatile은 변수가 메인 메모리에서 읽고 쓰도록 하여 스레드 간 가시성을 보장합니다.
Java에서 Stream의 중간 연산(map, filter)은 즉시 실행된다.
Stream의 중간 연산은 지연(lazy) 실행됩니다. 최종 연산(collect, forEach)이 호출될 때 실행됩니다.
Java에서 Virtual Threads(Java 21)는 수백만 개의 경량 스레드를 지원한다.
Virtual Threads는 OS 스레드가 아닌 JVM 관리 스레드로, 매우 적은 오버헤드로 대량의 동시성을 지원합니다.
Java에서 CompletableFuture는 비동기 프로그래밍을 위한 클래스이다.
CompletableFuture.supplyAsync(() -> ...).thenApply(...)로 비동기 작업을 체이닝합니다. Java 8에서 도입되었습니다.
Java에서 Generic 타입 정보는 런타임에 유지된다.
Java의 Generic은 타입 소거(Type Erasure)로 컴파일 시 제거됩니다. 런타임에는 타입 정보가 없습니다.
Java의 GC(가비지 컬렉션)는 메모리 누수를 완전히 방지한다.
GC가 있어도 참조를 해제하지 않으면 메모리 누수가 발생합니다. static 컬렉션, 리스너 미해제 등이 대표적입니다.