🗑️ 가비지 컬렉션 (Garbage Collection, GC)
- *가비지 컬렉션(GC)**은 자바의 중요한 메모리 관리 메커니즘이다. 개발자가 명시적으로 메모리를 할당 해제할 필요 없이, JVM이 **더 이상 참조되지 않는 객체(쓰레기 객체)를 자동으로 찾아내어 메모리에서 제거(해제)**한다.
- 자동 메모리 관리: C/C++와 같은 언어에서는 개발자가 직접 malloc/free를 사용하여 메모리를 할당하고 해제해야 하지만, 자바는 GC가 이 작업을 대신하여 메모리 누수를 줄이고 개발 편의성을 높여준다.
- GC 동작 시점: JVM이 필요하다고 판단할 때 (예: 메모리가 부족해질 때) 또는 특정 조건이 충족될 때 주기적으로 작동한다. 개발자가 GC를 명시적으로 호출할 수는 있지만, JVM에 의해 무시될 수 있으므로 권장되지 않는다.
💥 NullPointerException (NPE)
- *NullPointerException (NPE)**은 자바 개발자가 가장 흔하게 접하는 런타임 예외 중 하나다. 참조형 변수가 null 값을 가지고 있는 상태에서 해당 변수를 통해 객체의 멤버(필드 또는 메서드)에 접근하려고 할 때 발생한다.
String text = null;
System.out.println(text.length()); // NullPointerException 발생!
// text가 null이므로, 어떤 String 객체도 가리키지 않는데 length() 메서드를 호출하려고 함
🛡️ NPE를 방지하는 방법
- null 체크: 객체를 사용하기 전에 해당 참조 변수가 null인지 미리 확인한다.
- if (text != null) { System.out.println(text.length()); } else { System.out.println("text는 null이다."); }
- 옵셔널(Optional) 사용: Java 8부터 도입된 Optional 클래스를 사용하여 null이 될 수 있는 값을 안전하게 다룰 수 있다.
- 방어적 코딩: 메서드 매개변수나 반환값이 null이 될 수 있는지 항상 고려하고, null이 전달되지 않도록 유효성 검사를 수행한다.