본문 바로가기

Effective JAVA12

[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.
[Effective Java] 아이템1: 생성자 대신 정적 팩터리 메소드를 고려해라 Chapter 02: 객체 생성과 파괴객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법올바른 객체 생성 방법에 대한 설명정적 팩터리 메서드클래스 인스턴스를 얻는 기본적인 방법 → public 생성자 클래스는 생성자와 별도로 정적 팩터리 메소드(static factory method)를 제공할 수 있다.단순하게 클래스 인스턴스를 반환하는 정적 메소드  Boolean class public final class Boolean implements java.io.Serializable, Comparable, Constable { public static final Boolean TRUE = new Boolean(true); public static final Boolean FALS.. 2024. 10. 21.