# 이펙티브 자바

[이펙티브 자바] 아이템 11. equals를 재정의하려거든 hashCode도 재정의하라
equals를 재정의한 클래스는 hashCode도 재정의 해야 한다. 그렇지 않으면 인스턴스를 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제가 발생한다. \*\*equals 비교에 사용되는 정보가 변경되지 않았다면, hashCode 도 변하면 안

[이펙티브 자바] 아이템 10. equals는 일반 규약을 지켜 재정의 하라
equals를 다 구현했다면 세 가지만 자문해보자.대칭적인가? 추이성이 있는가? 일관적인가?equals 메서드를 재정의하지 않고 그냥 두면, 그 클래스의 인스턴스는 오직 자기 자신과만 같게 된다. 각 인스턴스가 본질적으로 고유할 때값 클래스(Integer나 String

[이펙티브 자바] 3장 | 모든 객체의 공통 메서드
Object 메서드들을 언제, 어떻게 재정의해야 하는지Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계 되었다.Object에서 final이 아닌 메서드(equals, hashCode, toString, clone, finalize

[이펙티브 자바] 아이템 9. try-finally 대신 try-with-resources를 사용하라
자바 라이브러리에는 close 메서드를 호출해 직접 닫아줘야 하는 자원이 많다.ex) InputStream, OutputStream, java.sql.Connection자원 닫기는 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어지기도 한다.전통적으로 자원이

[이펙티브 자바] 아이템 8. finalizer와 cleaner 사용을 피하라
자바에서 객체소멸은 가비지컬렉터가 담당하고,비메모리자원회수는 try-with-resources, try-finally로 해결한다.Finalizer는 예측 불가능하고, 위험하며, 대부분 불필요하다.자바에서 제공하는 두 가지 객체 소멸자, finalizer와 cleaner

[이펙티브 자바] 아이템 7. 다 쓴 객체 참조를 해제하라
자바에 GC(가비지 콜렉터)가 있기 때문에, GC가 다 쓴 객체를 알아서 회수해간다고 해서 메모리 관리에 더 이상 신경쓰지 않아도 된다는 것은 오해다.아래 Stack을 사용하는 프로그램을 오래 실행하다 보면 점차 GC 활동과 메모리 사용량이 늘어나 결국 성능이 저하될

[이펙티브 자바] 아이템 6. 불필요한 객체 생성을 피하라
불필요한 객체 생성을 피하면서 자원을 절약해야 한다.똑같은 기능의 객체를 매번 생성하기보다는 객체 하나를 재사용하는 편이 나을 때가 많다.특히, 불변 객체는 언제든 재사용할 수 있다.이 문장은 실행될 때마다 String 인스턴스를 새로 만든다. 이 코드는 새로운 인스턴

[이펙티브 자바] 아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
사용하는 자원에 따라 동작이 달라지는 클래스에는 ~정적 유틸리티 클래스~나 ~싱글턴 방식~이 적합하지 않다.이 조건을 만족하는 간단한 패턴은,인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식이다. 두 방식 모두 사전을 단 하나만 사용한다고 가정해, 그리 훌륭

[이펙티브 자바] 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라
정적 메서드와 정적 필드만을 담은 유틸리티 클래스는 객체 지향과 거리도 멀지만, 쓰임새가 있다.java.lang.Math, java.util.Arraysjava.util.Collections특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(혹은 팩터리) 모음fi

[이펙티브 자바] 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라
싱글턴: 인스턴스를 오직 하나만 생성할 수 있는 클래스ex) 함수(무상태 객체), 설계상 유일해야 하는 시스템 컴포넌트private 생성자를 가지고 있기 때문에 상속할 수 없다.private 생성자는 오직 싱글톤 클래스 자신만이 자기 오브젝트를 만들도록 제한한다.문제는

[이펙티브 자바] 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라
생성자와 정적 팩터리 메서드에는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 단점이 있다. 필수 매개변수를 받는 생성자 1개, 그리고 선택매개변수를 하나씩 늘여가며 생성자를 만드는 패턴필수 매개변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성

[이펙티브 자바] 2장 | 객체 생성과 파괴
객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법올바른 객체 생성 방법과 불필요한 생성을 피하는 방법제때 파괴됨을 보장하고 파괴 전에 수행해야 할 정리 작업을 관리하는 요령💎 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라

[이펙티브 자바] 1장 | 들어가기
이 책은 자바 언어와 그 기반 라이브러리, java.lang, java.util, java.io, java.util.concurrent, java.util.function 같은 하위 패키지를 효과적으로 사용하게끔 구성되어 있다.총 90개의 아이템이 담겨있고, 각 아이템