Book Review

Book Review/effective-java

[ITEM14] Comparable 을 구현할지 고려하라

ITEM 14 Comparable을 구현할지 고려하라 Comparable는 compareTo 메소드만 가지고있는 인터페이스다. compareTo() 메소드는 equals() 메소드와 두가지 성격을 제외하고는 같다. compareTo() 는 단순 동치성비교에 더해 순서까지 비교가능 / 제네릭하다 어떠한 클래스가 Comparable 을 구현하고 있다면 그 클래스는 자연적인 순서가 있음을 알 수 있다. 따라서 알파벳,숫자,연대 같이 순서가 명확한 값 클래스를 작성한다면 반드시 Comparable 인터페이스를 구현하자. compareTo() 메서드 규약 this other : 1 을 반환한다. compareTo 메서..

Book Review/effective-java

[ITEM13] clone 재정의는 주의해서 진행하라

ITEM 13 clone 재정의는 주의해서 진행하라 Cloneable 은 복제해도 되는 클래스를 알려주는 믹스인 인터페이스이다. 하지만 Cloneable은 의도한 목적을 제대로 이루지 못했다. Cloneable 인터페이스는 아무 메서드를 가지고 있지 않다. clone 메서드가 정의된 것이 Cloneable이 아닌 Object이고 접근 지정자마저 protected이다. 따라서 클래스 내에서 Cloneable을 구현하고 있다 해서 clone 메서드를 사용할 수 있지는 않다. public class User implements Cloneable { //해당 인터페이스를 구현하고있다고해서 사용할 수는 없다. } 그럼 왜 Cloneable 인터페이스는 존재할까? 해당 인터페이스가 존재하는 이유는 Object의 c..

Book Review/effective-java

[ITEM12] toString을 항상 재정의 하라

ITEM 12 toString을 항상 재정의 하라. 우리가 작성한 클래스의 toString을 재정의 하지 않고 호출하였을 때. 적합한 값을 반환하지 않는다. 재정의 하지 않았을 경우 클래스_이름@16진수로 표시한 해시 코드 가 반환될 뿐이다. 규약 toString의 규약은 다음과 같다. '간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야 한다.' '모든 하위 클래스에서 toString를 재정의하라' 재정의 해야 하는 이유 , 장점 toString은 직접 호출하지 않아도 다른 어딘가에서 호출하여 사용된다. ex) printf() , println(), assert 구문에 넘길 때 혹은 디버거가 객체를 출력할 때 다음과 같은 의미 없는 메시지보단 다음과 같이 의미 있는 toString을 반환하도록 ..

Book Review/effective-java

[ITEM11]equals를 재정의하려거든 hashCode도 재정의하라

ITEM 11 equals를 재정의하려거든 hashCode도 재정의하라 equals를 재정의 한다는 것은 논리적 동치성(logical equality)을 검사하기 위해서이다. 즉 다음과 같은 class의 인스턴스를 만들었을 때 해당 class가 가지고 있는 id값이 같으면 같은 객체로 보겠다는 뜻이다. public class SameObj { private final int id; @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; SameObj sameObj = (SameObj) o; return id == sameObj...

Book Review/effective-java

[ITEM10] equals 는 일반 규약을 지켜 재정의하라.

ITEM 10 equals는 일반 규약을 지켜 재정의하라. equals 메서드를 재정의하는것은 쉽다. 하지만 잘못 재정의한다면 큰 문제가 발생할수 있다. 따라서 재정의하지 않아야 하는 경우와 반대로 재정의 해야하는 경우를 알아보자. 다음에 항목에 하나라도 해당한다면 equals를 재정의하지 않는것이 좋다. 1.각 인스턴스가 본질적으로 고유하다. ​ -> 값 표현하는 개체가아니라 동작하는 개체를 표현하는 클래스. 2.인스턴스의 논리적 동치성(logical equality)을 검사할 일이 없는 경우. ​ -> Pattern의 인스턴스가 같은 정규 표현식을 나타내는지 검사. 3.상위 클래스에서 재정의한 equals가 하위클래스에도 들어맞을 때. ​ -> Set 구현체는 AbstractSet 이 구현한 equa..

Book Review/effective-java

[ITEM9]try-finally 보다는 try-with-resources를 사용하라

ITEM 9 try-finally 보다는 try-with-resources를 사용하라 Try-with-resoruces 는 자바 7부터 사용할 수 있다. 또한 try-with-resources 을 사용하기 위해선 자원을 반납하는 클래스 자체에 AutoCloseable 인터페이스를 구현하고 있어야한다. try-with-resources 는 기존 개발자들이 try -finally 부분에서 자원반납하던 행위를 직접하지 않아도된다. 이러한 기술을 지원함으로써 개발자가 자원을 닫는 행위를 놓치는 문제점을 잡을수 있고 코드가 매우 명확해진다. 예제코드를 보면서 얼마나 편해지는지 알아보자. 여기 커스텀한 자원을생성후 반납해야하는 MyResource 가있다. public class MyResource implement..

Book Review/effective-java

[ITEM7] 다 쓴 객체 참조를 해제하라

ITEM 7 다 쓴 객체 참조를 해제하라 자바는 참조하고 있지 않는 객체를 가비지 컬렉터를 통해 모두 회수한다. 정확히는 대상이 reachable 인지 unreachable 인지 확인하여 gc의 여부를 결정하기 때문에 이러한 부분에서 메모리 관리를 전혀 안해도 된다는 것은 착각이다. 그러면 메모리 누수를 발생시키는 3가지의 주범을 알아보자. 자기 메모리를 직접관리하는 클래스 예제 코드를보자. public class Stack { private static final int DEFAULT_INITIAL_CAPACITY=10; private Object[] element; private int size=0; public Stack(Object[] element) { checkSize(); this.eleme..

Book Review/effective-java

[ITEM6] 불필요한 객체 생성을 피하라

ITEM 6 불필요한 객체 생성을 피하라 만약 같은 역할을 하는 객체를 계속해서 인스턴스화 해서 만든다면? 불필요한 객체를 만듦으로 비용은 계속 들어간다. 따라서 똑같은 기능의 객체를 매번 생성하기보다는 객체 하나를 재사용 하자. ->하지만 해당 구절을 읽고 다음과 같은 생각을 가지면 안 된다. 객체를 만드는 것이 비싸며 가급적 피해야 한다는 오해가 생기면 안 된다. 객체를 재사용함에 따라 심각한 버그와 보안성의 문제가 생길 수도 있다. 문자열 객체 public static void main(String[] args) { String name ="jaejoon"; String name1 ="jaejoon"; String name2 = new String("jaejoon"); //극단적인 예시 System..

jay Joon
'Book Review' 카테고리의 글 목록 (2 Page)