Java/EffectiveJava 13

Effective Java Item8. finalizer와 cleaner 사용을 피하라

자바는 finalizer와 cleaner 두 가지 객체 소멸자를 제공한다.finalizer : 예측할 수 없고, 상황에 따라 위험할 수 있어 일반적으로 불필요하다.cleaner : finalizer보다는 더 위험하지만, 여전히 예측할 수 없고, 느리고, 일반적으로 불필요하다.finalizer와 cleaner는 하나의 자원의 소유자가 close 메서드를 호출하지 않는 것에 대비한 안전망 역할이다.FileInputStream, FileOutputStream, ThreadPoolExecutro가 대표적이다.cleaner와 finalizer는 안정망 역할이나 중요하지 않은 네이티브 자원 회수용으로만 사용하자. 물론 이런 경우라도 불확실성과 성능 저하에 주의해야한다.네이티브 피어(native peer)와 연결된 ..

Java/EffectiveJava 2025.01.12

Effective Java Item5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스(static class)나 싱글턴(singleton) 방식이 적합하지 않다.그러기 위해서는 여러 자원 인스턴스를 지원해야하며, 클라이언트가 원하는 자원을 사용하기 위해서는 인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식인 의존 객체 주입 방식(Dependency Injection) 을 사용한다.public class SpellChecker { private final Lexicon dictionary; public SpellChecker(Lexicon dictionary) { this.dictionary = Objects.requireNonNull(dictionary); } public bo..

Java/EffectiveJava 2025.01.12

EffectiveJava Question Series -1- (Item. 1 ~ Item. 7)

이펙티브 자바를 읽고 궁금한 점에 대한 시리즈물입니다. item 1. 생성자 대신 정적 팩토리 메서드를 고려하라. Java8에서 interface는 어떻게 변경이 되었고, 왜 변경하였을까요? Java8부터 Defualt Method와 Static Method가 추가됨. Java8 이전까지는 추상메서드와 상수 정의만 가능하였음. Default Method : 기본 구현을 가지는 Method Static Method : Class의 Static Method와 같음. 재정의 불가능 Default Method : 기존 인터페이스가 변경이 되면, 인터페이스를 구현하는 모든 클래스들이 해당 메소드를 구현해야 하는 문제가 있어, 해당 문제를 해결하기 위하여 인터페이스에 메소드를 구현해 놓을 수 있도록 함. Stati..

Java/EffectiveJava 2021.05.09