Home
게임과 개발사이
Cancel

Item 13 - clone 재정의는 주의해서 진행하라

Cloneable 인터페이스란? 복제해도 되는 클래스임을 명시하는 믹스인 인터페이스이다. 믹스인 클래스란? public interface Singer { String sing(String s); } interface Songwriter { String compose(boolean hit); } interface SingerSon...

Item 12 - toString을 항상 재정의하라

toString의 일반 규약 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야 한다. Object의 기본 toString : 클래스_이름@16진수_해시코드 유익하지 않은 경우가 대부분이다. 예시(전화번호) public final class PhoneNumber { // 지역코...

Item 11 - equals를 재정의하려거든 hashCode도 재정의하라.

Object 의 HashCode 규약 애플리케이션이 유지되는 동안 equals비교에 사용되는 정보(핵심필드)가 유지된다면, hashCode는 항상 같은값을 반환해야한다 equals() 로 두 객체를 같다고 판단했다면 두 객체의 hashCode는 똑같은 값을 반환해야한다 equals()가 두 객체를 다...

Item 10 - equals는 일반 규약을 지켜 재정의하라

다음 중 하나에 해당한다면 equals를 재정의하지 않는 것이 최선이다. 각 인스턴스가 본질적으로 고유하다. Ex) Thread 인스턴스의 ‘논리적 동치성(logical equality)’을 검사할 일은 없다. Ex) Pattern equals를 재정의하여 두 Pattern의 인스...

Item 9 - try-finally 보다는 try-with-resources를 사용하라

자바 라이브러리에서 close 메서드를 호출해 직접 닫아줘야 하는 자원 예시 : InputStream, OutputStream, java.sql.Connection 등 자원 닫기는 예측할 수 없는 성능 문제로 이어져 finalizer을 사용하지만 썩 믿음직스럽지 못하다. 코드 9-1. try-finally 더 이상 자원을 회수하는 최선의 방책이 아...

Item 8 - Finalizer와 Cleaner는 피하라

finalizer는 예측할 수 없고, 상황에 따라 위험할 수 있어 일반적으로 불필요하다. 오동작, 낮은 성능, 이식성 문제의 원인이 되기도 한다. Finalizer를 유용하게 쓸 수 있는 경우는 극히 드물다. 딱 두가지의 경우에 적용을 고려할만하다. 자원의 소유자가 Close 메서드를 호출하지 않는 것에 대한 안전망 역할로 자원을 반납하고자 하...

Item 7 - 다 쓴 객체 참조를 해제하라

메모리 직접 관리 자바에 GC(가비지 콜렉터)가 있기 때문에 메모리 관리에 대해 신경쓰지 않아도 될거라 생각하기 쉽지만 그렇지 않다. 다음 코드를 살펴보자. // 코드 7-1 메모리 누수가 일어나는 위치는 어디인가? (36쪽) public class Stack { private Object[] elements; private int si...

Item 6 - 불필요한 객체 생성을 피하라

똑같은 기능의 객체를 매번 생성하기보다는 객체 하나를 재사용하는 편이 나을때가 많다. 재사용은 빠르고 세련되다. 특히 불변 객체(아이템 17)는 언제든 재사용할 수 있다. 잘 못된 객체 생성 예 String s = new String("bikini"); // 개선된 버전 - 실행될 때마다 하나의 String 인스턴스를 사용 String s = "bi...

Item 5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

많은 클래스는 하나 이상의 자원에 의존한다. 이 책에서는 맞춤법 검사기인 SpellChecker와 dictionary를 예로 들고있다. 즉, SpellChecker가 dictionary를 사용하고, 이를 의존 하는 리소스 또는 의존성이라고 부른다. 이때 SpellChecker를 다음과 같이 구현하는 경우가 있다. 부적절한 구현 static 유틸 클래...

Item 4 - 인스턴스화를 막으려거든 private 생성자를 사용하라

정적 메서드와 정적 필드만을 담은 클래스를 만드는 이유 java.lang.Math, java.util.Arrays 처럼 기본 타입 값이나 배열 과련 메서드를 모아놓을 수 있다. java.util.Collections 처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아놓을 수도 있다. final클래스와 관련한 메서드들을 모...