본문 바로가기

Computer Sience/Java33

[Effective Java] 아이템8: finalizer와 cleaner 사용을 피하라 Chapter 02: 객체 생성과 파괴객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법올바른 객체 생성 방법에 대한 설명Finalizer와 Cleaner자바는 2가지 소멸자를 제공한다. (Finalizer & Cleaner) Finalizer는 예측 불가능하고, 위험하며, 대부분 불필요하다. 오동작, 낮은 성능, 이식성 문제의 원인이 된다. Cleaner 또한 Finalizer 보다 덜 위험하지만, 여전히 예측할 수 없고, Finalizer 단점과 거의 비슷하다.   Finalizer 이식성 문제 자바 9에서 Finalizer를 deprecated API로 지정하고 Cleaner를 그 대안으로 소개했다.  자바에서의 자원 회수 try-with-resourcestry-finally  Finali.. 2024. 10. 27.
[Effective Java] 아이템7: 다 쓴 객체 참조를 해제하라 Chapter 02: 객체 생성과 파괴객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법올바른 객체 생성 방법에 대한 설명개요 C, C++ 처럼 메모리를 직접 관리해야 하는 언어를 쓰다가 자바처럼 가비지 컬렉터(GC)를 갖춘 언어로 넘어오면 프로그래머의 삶이 훨씬 평안해진다.그래서 메모리 관리에 더 이상 신경 쓰지 않아도 된다고 오해할 수 있다. 메모리 누수 예제 - Stack public class Stack { public Object [] elements; // test 위한 public private int index = 0; // size -> index private static final int DEFAULT_INITIAL_CAPACITY = 16; publi.. 2024. 10. 27.
[Effective Java] 아이템6: 불필요한 객체 생성을 피하라 Chapter 02: 객체 생성과 파괴객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법올바른 객체 생성 방법에 대한 설명불필요한 객체 생성을 피하라똑같은 기능의 객체를 새로 만드는 대신 개체 하나를 재사용하는 것이 대부분 적절하다. 재사용을 하면 성능적인 측면에서 더 빠르다. 특히 불변 객체는 언제든 재사용할 수 있다.문자열 객체 생성 public class StringTest { public static void main(String[] args) { String name1 = "jeu"; String name2 = "jeu"; System.out.println(name1 == name2); // true String str1 = new.. 2024. 10. 26.
[Effective Java] 아이템5: 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 Chapter 02: 객체 생성과 파괴객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법올바른 객체 생성 방법에 대한 설명잘못된 사례1많은 클래스는 하나 이상의 자원에 의존한다. 책에서는 예시로 맞춤법 검사기(Spell Checker)와 맞춤법 검사기가 의존하는 사전(Dictionary)을 예시로 들고 있다.  맞춤법 검사기가 정적 유틸리티 클래스 구조를 가진다면?public interface Lexicon {}public class KoreanDictionary implements Lexicon{}public class SpellChecker { private static final Lexicon dictionary = new KoreanDictionary(); private Spe.. 2024. 10. 26.
[Effective Java] 아이템4: 인스턴스화를 막으려거든 private 생성자를 사용하라 Chapter 02: 객체 생성과 파괴객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법올바른 객체 생성 방법에 대한 설명유틸성 클래스 단순히 정적 메소드와 정적 필드를 담은 클래스 이런 클래스는 인스턴스화를 할 필요가 없다 → 인스턴스화를 막아보자.  이런 유틸 성격을 가지는 클래스는 자바 / 스프링 쉽게 찾아볼 수 있다. java.lang.Math java.util.Arraysjava.util.Collections Collections는 특정 인터페이스의 구현하는 객체들을 생성해 주는 정적 팩토리 메소드를 모아놓았다. 사용자는 해당 구현체를 몰라도 사용할 수 있다는 관점에서 알아야 하는 개념적인 무게가 줄었다고 볼 수 있다. public final class Math { private .. 2024. 10. 26.
[Effective Java] 아이템3: private 생성자나 열거 타입으로 싱글턴임을 보증하라 Chapter 02: 객체 생성과 파괴객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법올바른 객체 생성 방법에 대한 설명싱글톤 패턴 이펙티브 자바 아이템3 에서 나오는 대부분의 내용을 정리한 적 있었다. 이번엔 복습 차원으로 정리하지 않았던 내용에 대해서만 간단하게 정리하겠다.  해당 링크에는 지금 내용에 없는 내용들이 많다. 1. 직렬화시 Serializable 선언과 주의점 2. 멀티 스레딩에 안전한 여러 싱글톤 생성 방법3. 이른 초기화 방식과 지연 초기화 방식 4. enum  디자인 패턴: 싱글톤 패턴 정리 [Design Pattern] 싱글톤(Singleton) 패턴싱글톤 (Singleton) 패턴인스턴스를 오직 한개만 제공하는 클래스 싱글톤(Singleton) 패턴은 특정 클래스의 .. 2024. 10. 25.