🧷 1장 | 들어가기🧷 2장 | 객체 생성과 파괴
이 책은 자바 언어와 그 기반 라이브러리, java.lang, java.util, java.io, java.util.concurrent, java.util.function 같은 하위 패키지를 효과적으로 사용하게끔 구성되어 있다.총 90개의 아이템이 담겨있고, 각 아이템
객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법올바른 객체 생성 방법과 불필요한 생성을 피하는 방법제때 파괴됨을 보장하고 파괴 전에 수행해야 할 정리 작업을 관리하는 요령💎 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라
💎 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라
생성자와 정적 팩터리 메서드에는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 단점이 있다. 필수 매개변수를 받는 생성자 1개, 그리고 선택매개변수를 하나씩 늘여가며 생성자를 만드는 패턴필수 매개변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성
싱글턴: 인스턴스를 오직 하나만 생성할 수 있는 클래스ex) 함수(무상태 객체), 설계상 유일해야 하는 시스템 컴포넌트private 생성자를 가지고 있기 때문에 상속할 수 없다.private 생성자는 오직 싱글톤 클래스 자신만이 자기 오브젝트를 만들도록 제한한다.문제는
정적 메서드와 정적 필드만을 담은 유틸리티 클래스는 객체 지향과 거리도 멀지만, 쓰임새가 있다.java.lang.Math, java.util.Arraysjava.util.Collections특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(혹은 팩터리) 모음fi
사용하는 자원에 따라 동작이 달라지는 클래스에는 ~정적 유틸리티 클래스~나 ~싱글턴 방식~이 적합하지 않다.이 조건을 만족하는 간단한 패턴은,인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식이다. 두 방식 모두 사전을 단 하나만 사용한다고 가정해, 그리 훌륭
불필요한 객체 생성을 피하면서 자원을 절약해야 한다.똑같은 기능의 객체를 매번 생성하기보다는 객체 하나를 재사용하는 편이 나을 때가 많다.특히, 불변 객체는 언제든 재사용할 수 있다.이 문장은 실행될 때마다 String 인스턴스를 새로 만든다. 이 코드는 새로운 인스턴
자바에 GC(가비지 콜렉터)가 있기 때문에, GC가 다 쓴 객체를 알아서 회수해간다고 해서 메모리 관리에 더 이상 신경쓰지 않아도 된다는 것은 오해다.아래 Stack을 사용하는 프로그램을 오래 실행하다 보면 점차 GC 활동과 메모리 사용량이 늘어나 결국 성능이 저하될
자바에서 객체소멸은 가비지컬렉터가 담당하고,비메모리자원회수는 try-with-resources, try-finally로 해결한다.Finalizer는 예측 불가능하고, 위험하며, 대부분 불필요하다.자바에서 제공하는 두 가지 객체 소멸자, finalizer와 cleaner
자바 라이브러리에는 close 메서드를 호출해 직접 닫아줘야 하는 자원이 많다.ex) InputStream, OutputStream, java.sql.Connection자원 닫기는 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어지기도 한다.전통적으로 자원이
Object 메서드들을 언제, 어떻게 재정의해야 하는지Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계 되었다.Object에서 final이 아닌 메서드(equals, hashCode, toString, clone, finalize
equals를 다 구현했다면 세 가지만 자문해보자.대칭적인가? 추이성이 있는가? 일관적인가?equals 메서드를 재정의하지 않고 그냥 두면, 그 클래스의 인스턴스는 오직 자기 자신과만 같게 된다. 각 인스턴스가 본질적으로 고유할 때값 클래스(Integer나 String
equals를 재정의한 클래스는 hashCode도 재정의 해야 한다. 그렇지 않으면 인스턴스를 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제가 발생한다. \*\*equals 비교에 사용되는 정보가 변경되지 않았다면, hashCode 도 변하면 안