Item 11. Equals를 재정의하려거든 Hashcode도 재정의하라
서론equals를 재정의한 클래스에서는 hashcode도 재정의 해야한다.그렇지 않으면 hash를 사용하는 HashMap, HashSet과 같은 컬렉션의 원소로 사용될 때 문제가 발생할 것이다. 이번 글을 읽기 전에 아래 글을 먼저 읽어 해시, 해시테이블에 대한 용어를 ...
Read more
Item 10. Equals는 일반 규약을 지켜 재정의하라
서론equals 메서드는 Object 클래스에 구현된 메서드로 객체 내의 정보들에 대한 동등성(equality) 비교를 목적으로 하는 메서드이다.equals 메서드를 잘못 작성하게 되면 의도하지 않는 결과들이 초래되므로 웬만하면 변경하지 않는 것이 좋다. equals를 ...
Read more
Item 9. Try-Finally 보다는 Try-With-Resources를 사용하라
서론Java 라이브러리 중에는 close메서드를 호출해 직접 닫아줘야 하는 자원이 많다. InputStream, OutputStream, Connection등이 있다.자원 닫기는 클라이언트가 놓치기 쉽기 때문에 예측할 수 없는 성능 문제로 이어지기도 한다. 나의 경 ...
Read more
Item 8. Finalizer와 Cleaner 사용은 피하라
서론Java에서는 2가지의 객체 소멸자를 제공한다. finalzier cleaner 이 2가지 객체 소멸자는 JVM내의 GC가 작동할 때 실행되는 구문이다.기본적으로 이 2가지 구문은 사용하지 말아야 한다.현재 Java 9 버전 부터는 Object 클래스에 대한 ...
Read more
Item 7. 다 쓴 객체는 참조를 해제하라
서론Java의 장점 중 하나는 가비지 컬렉션을 지원하는 언어라는 점이다.C, C++ 처럼 개발자가 메모리를 직접 할당하고 해제하는 방식이 아니기 때문에 Java에서는 메모리 관리가 굉장히 편하다는 장점이 있다. 하지만 아예 신경을 안써도 되는 것은 아니다.가비지 컬렉션 ...
Read more
Item 6. 불필요한 객체 생성을 피하라
서론똑같은 기능의 객체를 매번 생성하기 보다는 객체 하나는 재사용하는 편이 나을 때가 많다. (아니 거의 무조건 재사용 할 수 있으면 하는 게 좋다.)재사용은 빠르고 세련되며, 특히 불변 객체는 언제든지 안전하게 재사용 할 수 있다. 아주 안 좋은 객체 생성의 예1St ...
Read more
Item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
서론사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 방식이나, 싱글턴 방식이 적합하지 않다.자원에 따라 동작이 달라진다면, 자원의 수만큼 인스턴스를 만들어 동작하게 하는 것이 좋다.이를 의존 객체 주입이라고 하는데 Spring과 같은 프레임워크에서 DI의 ...
Read more
Item 4. 인스턴스화를 막으려거든 Private 생성자를 사용하라
서론단순히 static 메서드와 static 필드만을 담은 클래스를 만들고 싶을 때가 있다.보통 Utils 클래스를 정의할 떄 이런식으로 많이 사용하는데, 이러한 클래스는 인스턴스를 만들어서 사용하고자 만든 목적이 아니기 때문에 인스턴스화를 막아야 한다.생성자를 하나도 ...
Read more
Item 3. Private 생성자나 열거 타입으로 싱글턴임을 보증하라
싱글턴이란?싱글턴 객체란 Application내에서 단 1개의 인스턴스만 생성할 수 있는 클래스를 의미한다.시스템에서 유일성을 보장하기 위해 1개만 만들어야 하는 경우도 있고, 시스템 구조 상 1개 이상이 되면 개념적으로 맞지 않는 상황도 있기 때문이다. 싱글턴을 만드 ...
Read more
Item 2. 생성자에 매개변수가 많다면 빌더를 고려하라
서론정적 팩터리 메서드 팩터리와 생성자에는 똑같은 제약이 하나 있다.선택적 매개변수가 많을 경우에 적절하게 대응하기 어렵다는 점이다.매개변수가 3~4개까지는 어떻게 해보겠지만 엄청 많은 경우에는 생성자를 이용해 객체를 생성하는 과정부터가 곤욕이다. 아래의 예시를 보자 ...
Read more