전체 글

Running Experiments on Myself
Java/effective java

[Effective Java] Item 14. Comparable을 구현할지 고려하자.

14. Comparable을 구현할지 고려하자.Comparablepublic interface Comparable { int compareTo(T t);}compareTo는 Object의 메서드가 아니다.compareTo는 단순 동치성 비교에 더해 순서까지 비교할 수 있으며, 제네릭하다.자연적인 순서 (논리적으로 자연스러운 순서) 를 정할 수 있다.검색, 극단값 계산, 자동 정렬되는 컬렉션 관리도 쉽게 할 수 있다.배열이라면 Arrays.sort()를 이용해 손쉽게 정렬할 수 있다.사실상 자바 플랫폼 라이브러리의 모든 값 클래스와 열거 타입이 Comparable을 구현했다.정렬된 컬렉션인 TreeSet과 TreeMap, 검색과 정렬 알고리즘을 사용하는 유틸리티 클래스인 Collections와 Arr..

Java/effective java

[Effective Java] Item 13. clone 재정의는 주의해서 진행하라

clone 재정의는 주의해서 진행하라Cloneablepublic interface Cloneable { }Cloneable : 복제해도 되는 클래스임을 명시하는 용도의 믹스인 인터페이스(기능 추가)이다.구현할 메서드가 존재하지 않으며, Object.clone()의 동작 방식만을 결정한다. Object.clone()public class Object {// ... @IntrinsicCandidate protected native Object clone() throws CloneNotSupportedException;Object는 clone() 메서드를 가지고 있지만, Cloneable 인터페이스를 구현하고 있지 않다.동작 방식Cloneable을 구현하지 않은 클래스에서 clone을 호출하면..

Java/effective java

[Effective Java] Item 12. toString을 항상 재정의하라.

toString을 항상 재정의하라.toString()객체를 문자열로 표현하는 메서드Object 클래스에 정의된 메서드 용도디버깅/로깅문자열 변환 시에 자동 호출객체 출력 Object의 기본 toString() 구현단순히 클래스_이름@16진수로_표시한_해시코드를 반환한다.toString의 일반 규약에 따르면 "간결하면서 사람이 읽기 쉬운 형태의 유익한 정보" 를 반환해야 한다.PhoneNumber@adbbd가 아닌 "707-867-5309" toString의 규약 : 모든 하위 클래스에서 toString을 재정의하라toString을 잘 구현한 클래스는 사용하기에 훨씬 즐겁고, 그 클래스를 사용한 시스템은 디버깅하기 쉽다.public static void main(String[] args) { Ph..

Java/effective java

[Effective Java] Item 11. equals를 재정의하려거든 hashCode도 재정의하라.

equals를 재정의하려거든 HashCode도 재정의하라.equals를 재정의한 클래스 모두에서 HashCode도 재정의해야 한다.그렇지 않으면 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으킬 것이다. HashCode란?임의의 데이터(객체, 문자열)을 고정된 길이의 정수값으로 매핑하는 함수(해시 함수)의 결과같은 내용의 객체는 동일한 해시 코드를 가진다.다른 내용의 객체라도 동일한 해시 코드를 가질 수 있다. (해시 충돌)해시 충돌을 최소화하고 고른 분포를 가지도록 설계하는 것이 좋다. 용도해시 기반 자료구조에서 검색 시에 객체의 동일성 비교를 빠르게 수행할 수 있도록 해준다.HashMap, HashSet데이터 무결성 검증에도 사용된다. 해시 함수(hash function)..

Java/effective java

[Effective Java] Item 10. equals는 일반 규약을 지켜 재정의하라

10. equals()는 일반 규약을 지켜 재정의하라equals 재정의하지 않은 경우equals()를 재정의하지 않을 경우 클래스의 인스턴스는 오직 자기 자신과만 같게 된다.== 연산자와 동일하게 동작하여 객체의 메모리 주소를 비교한다.객체 식별성(identity)을 비교한다.class Food { private final String name; private final int price; public Food(String name, int price) { this.name = name; this.price = price; } }public class Main { public static void main(String[] args..

Java/effective java

[Effective Java] 3장. 모든 객체의 공통 메서드 - 0. 들어가기

0. 도입Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계되었다.Object에서 final이 아닌 메서드(equals, hashcode, toString, clone, finalize)는 모두 재정의를 염두에 두고 설계된 것이다.재정의시 지켜야 하는 일반 규약이 명확히 정의되어 있다.=> 모든 클래스는 이 메서드들을 일반 규약에 맞게 재정의해야한다. 3장에서는 final이 아닌 Object 메서드들을 언제 어떻게 재정의해야 하는지를 다룬다.finalize 메서드는 아이템 8에서 다루었으니 더이상 언급하지 않는다.Comprable.compareTo의 경우 Object의 메서드는 아니지만 성격이 비슷하여 함께 다룬다.

Java/effective java

[Effective Java] Item 9. try-finally보다는 try-with-resources를 사용하라.

try-finally보다는 try-with-resources를 사용하라자원 닫기는 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어질 수 있다.상당수가 안전망으로 finalizer를 사용하지만 finalizer는 그리 믿을만 하지 않다. try-finally : 전통적으로 쓰이는 방법코드가 지저분하다.package effectivejava.chapter2.item9.tryfinally; import java.io.*; public class Copy { private static final int BUFFER_SIZE = 8 * 1024; // 코드 9-2 자원이 둘 이상이면 try-finally 방식은 너무 지저분하다! (47쪽) static void copy(..

Java/effective java

[Effective Java] Item 8. finalizer와 cleaner 사용을 피하라.

finalizer와 cleaner 사용을 피하라.Java의 2가지 객체 소멸자객체 소멸자: 객체가 메모리에서 제거될 때 자동으로 호출된다.finalizer기본적으로 쓰지 말아야 한다.예측할 수 없고 상황에 따라 위험할 수 있어 일반적으로 불필요하다.cleanerfinalizer의 대안이다.finalizer보다 덜 위험하지만 예측 불가능하고 느리고 일반적으로 불필요하다. Java의 finalizer와 cleaner는 c++의 파괴자와 다르다.특정 객체와 관련된 자원을 회수C++에서 파괴자 : 프로그래머가 명시적으로 호출한다.Java의 가비지 컬렉터: 가비지 컬렉터가 접근 불가능한 자원을 회수하고 프로그래머는 아무런 작업을 하지 않아도 된다.비메모리 자원을 회수C++에서 파괴자가 수행한다.Java는 try-..

mint*
Minty Box