Effective java 스터디
똑같은 기능의 객체를 매번 생성하기보다는
객체 하나를 재사용하는 면이 나을 때가 많다.
인스턴스를 static final 필드로 지정하고 이름을 지어 코드의 의미를 잘 전달할 수 있다.
오토박싱 : 기본 타입과 박싱된 기본 타입을 섞어 쓸 때 자동으로 상호 변환해주는 기술.
기본 타입과 그에 대응하는 박싱된 기본 타입의 구분을 흐려주지만,
완전히 없애주는 것은 아니다.
기존 객체를 재사용해야 한다면 새로운 객체를 만들지 마라.
새로운 객체를 만들어야 한다면 기존 객체를 재사용하지 마라.
가비지 컬렉션 언어에서는 (의도치 않게 객체를 살려두는) 메모리 누수를 찾기가 까다롭다.
객체가 참조하는 모든 객체를 회수해가지 못한다.
=> 해당 참조를 다 썼을 때 null 처리(참조 해제)하면 된다.
객체 참조를 null 처리하는 일은 예외적인 경우여야 한다.
일반적으로 자기 메모리를 직접 관리하는 클래스라면 프로그래머는 항시 메모리 누수에 주의해야 한다.
원소를 다 사용한 즉시 그 원소가 참조한 객체들을 다 null 처리해야 한다.
캐시 역시 메모리 누수를 일으키는 주범이다.
리스너와 콜백 : 클라이언트가 콜백을 등록만 하고 명확히 해지하지 않는다면, 뭔가 조치해주지 않는 한 콜백은 쌓임.
자원닫기는 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어지기도 한다.
static String firstLineOfFile(String path) throws IOException {
try(BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
꼭 회수해야 하는 자원을 다룰 때는 try-with-resources를 사용하자.
예외는 없다. 코드는 더 짧고 분명해지고, 만들어지는 예외 정보도 훨씬 유용하다.