Home
게임과 개발사이
Cancel

Item 14 - Comparable을 고려하라

알파벳, 숫자, 연대, 번호 등 순서가 있는 값 클래스를 작성하면 반드시 Comparable 를 구현하자. Comparable 인터페이스는 compareTo() 라는 하나의 메서드를 정의한다. 이 메서드는 Object 메서드가 아니다. 이 메서드의 성격은 Object의 equals와 유사하지만 아래와 같은 차이가 있음 ...

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 유틸 클래...