# Effective Java

[Effective Java 3E] Item8. finalize와 Cleaner사용을 피하라
자원을 즉시 회수해야할 필요성이 있을 경우, finalize() 와 Cleaner대신 `AutoClosable`을 구현한 클래스를 try-with-resources와 함께 사용하자

[Effective Java 3E] Item6. 불필요한 객체 생성을 피하라
*주의: 객체 생성이 무조건적으로 나쁘다는 것은 아니다. 상황에 따라 적절하게 객체를 Retrieve하는 방법도 고려하자

try-finally 보단 try-with-resources를 사용하라
Java에서는 try-catch-finally와 throw, throws 키워드가 있다.try-catch-finally : try 블록에서 로직을 실행한다. catch 블록은 try 블록에서 발생한 예외를 catch 해 처리한다. 마지막 finally 블록에서 try

불필요한 객체 생성을 피하라
불필요한 객체가 반복적으로 생성되고 있는 것을 피해야한다.불필요하게 객체가 반복적으로 생성하지 않도록 하기 위하여 Flyweight 패턴을 사용하여 같은 객체를 공유해서 사용하거나, 생성 비용이 비싼 객체를 캐싱하여 재사용해야한다.불필요한 객체를 생성하는 가장 간단한

자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
인스턴스를 생성할 때, 생성자( 또는 정적 팩터리, 빌더 등)에 필요한 자원을 넘겨주는 방식이 의존 객체 주입이다.변형으로 생성자에 해당 자원 자체가 아닌 자원 팩터리를 넘겨줄 수 있다.의존성이 수 천개나 되는 큰 프로젝트에서는 코드가 어지러워지는데, Spring 같은

64. 객체는 인터페이스를 사용해 참조하라
구체 클래스 대신 인터페이스를 사용한다. 적합한 인터페이스가 없다면 클래스의 계층구조 중 필요한 기능을 만족하는 상위의 클래스를 타입으로 사용한다.
[Effective Java] 아이템 17. 변경 가능성을 최소화하라
불변 클래스 >불변 클래스란? 그 인스턴스의 내부 값을 수정할 수 없는 클래스다. 불변 인스턴스에 저장된 상태는 고정되어 객체가 파괴되는 순간까지 절대 변경되지 않는다. 자바 플랫폼 라이브러리에도 String, 기본 타입의 박싱된 클래스들, BigInteger, B
[Effective Java] 아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라
아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

상속보다 컴포지션을 사용하라
상위 클래스가 어떻게 구현되는냐에 따라 하위 클래스의 동작에 이상이 생길 수 있다. 상위 클래스의 변경이 코드 한 줄 바꾸지 않은 하위 클래스의 동작에 영향을 미친다는 이야기이다.
1. 생성자 대신 정적 팩터리 메서드를 고려하라
클래스는 생성자와 별도로 정적 팩터리 메서드 (static factory method)를 제공한다. 생성자에 제공하는 파라미터가 거기에서 반환하는 객체를 잘 설명하지 못하는 경우에 이름을 가질 수 있는 static 팩토리를 사용하는 것이 알아보기 보다 더 쉽고 읽기 편