effective java(8)
-
[Effective Java] 아이템 9 : try-finally 보다는 try-with-resources를 사용하라
try-finally InputStream, OutputStream, java.sql.Connection -> 클라이언트가 지나칠 가능성이 있기에 성능에도 문제를 줄 수 있다. 그래서 안전망으로 아이템 8에서 사용한 Finalizer를 사용한다. 또한, 자원이 닫히는 것을 보장하는 try-finally가 존재한다. https://devaily.tistory.com/34 [Effective Java] 아이템 8 : finalizer와 cleaner 사용을 피하라 자바의 객체 소멸자 Finalizer : 예측할 수 없고, 상황에 따라 위험할 수 있어 일반적으로 불필요, 그냥 쓰지 마세요.. 그냥 쓰지 말라고 Cleaner : Finalizer 보다는 덜 위험하지만, 여저힌 위험하고, 불 devaily.tis..
2022.03.31 -
[Effective Java] 아이템 8 : finalizer와 cleaner 사용을 피하라
자바의 객체 소멸자 Finalizer : 예측할 수 없고, 상황에 따라 위험할 수 있어 일반적으로 불필요, 그냥 쓰지 마세요.. 그냥 쓰지 말라고 Cleaner : Finalizer 보다는 덜 위험하지만, 여저힌 위험하고, 불필요하다. C++의 destructor와 Java의 finalizer & cleaner 파괴자는 특정 객체와 관련된 자원을 회수하는 보편적인 방법이고 자바의 소멸자들은 접근할 수 없게 된 객체를 회수하는 역할을 가비지 컬렉터가 담당한다. 자바에서는 try-with-resources와 try-finally를 사용해 해결한다. 왜 Finalizer와 Cleaner의 사용을 자제해야하나? Finalizer와 Cleaner는 즉시 수행된다는 보장이 전혀 없다. 위 두 가지로는 데때 실행되야..
2022.03.30 -
[Effective Java] 아이템 7 : 다 쓴 객체 참조를 해제하라
다 쓴 객체 참조를 해제하라 C같은 메모리를 직접 관리 하는 언어에서 자바와 같이 Garbage Collector를 가진 언어를 사용하면 편리성은 증대해진다. Garbage Collecotor가 사용한 객체를 회수하기 때문이다. 그렇다고 메모리 관리에 주의를 기울이지 않으면 안된다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity()..
2022.03.16 -
[Effective Java] 아이템 6 : 불필요한 객체 생성을 피하라
재사용성 같은 기능의 객체를 매번 생성하는 것 보다는 객체 하나를 재사용하는 것이 더 좋다. 재사용을 하면 반응 속도가 더 빠르고 코드도 세련되어 보인다. 특히 불변 객체는 언제든 재사용할 수 있다. String s = new String("bikini"); 이런 코드는 사용하지 않아야 하는 극단적인 예이다. 왜냐? 코드가 실행 될 때마다 String 인스턴스를 계속 생성해낸다. 만약 이 코드가 반복문이나 자주 호출되는 메소드 안에 존재한다면 실행시 쓸데없는 생성만 계속 될 것이다. 어떻게 사용해야 하나? String s = "bikini"; 이렇게 매번 new 생성자로 새로 생성되는 것이 아니라. 딱 하나의 인스턴스만 사용하게 사용하자. 이와 같이 인스턴스를 사용하면 같은 객체를 재사용할 수 있게 보장..
2022.03.16 -
[Effective Java] 아이템 5 : 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
클래스가 하나 이상의 자원에 의존한다면 싱글턴 패턴이나 정적 유틸리티 클래스에서는 사용을 하지 않은 것이 좋다. 사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다. 정적 유틸리티를 잘못 사용한 예 public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} //아이템 4 - 객체 생성 방지 public static boolean isValid(String word) { ... } public static List suggestions(String typo) { ... } } 싱글턴을 잘못 사용한 예 public class SpellChe..
2022.03.15 -
[Effective Java] 아이템 3 : private 생성자나 열거 타입으로 싱글턴임을 보증하라
Singleton 싱글톤 패턴은 인스턴스화를 제한하고, 클래스의 하나의 인스턴스만 JVM에 존재하도록 한다. 싱글톤 패턴은 Global access point에서 인스턴스를 가져올 수 있도록 제공한다. 로깅, 드라이버 개체, 캐싱 및 스레드 풀에 사용된다. Abstract Factory, Builder, Protorype and Facade 등과 같은 디자인 패턴에도 사용된다. 장점 객체를 생성하면 재사용이 가능해서 메모리 사용 낭비를 막을 수 있다. 전역 객체이기 때문에 다른 객체와도 공유가 가능하다. 단점 클래스의 싱글턴화 시 클라이언트 테스트가 어려워진다. 타입을 인스턴스 정의 시 구현한 인터페이스로 만든 싱글턴이 아닐시 인스턴스를 Mock로 대체 불가 싱글턴 생성 방식 Public Static F..
2022.03.10