본문 바로가기

EffectiveJava4

이펙티브 자바 - clone 재정의 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - Cloneable 인터페이스 Cloneable 은 객체의 복제를 허용한다는 사실을 알려주는 믹스인(mixin) 인터페이스이다. 하지만 문제점이 한 가지 있는데 clone 메소드가 없고 Object 의 clone 메소드의 접근제어자가 protected 라는것이다. 이렇게 되면 clone 메서드가 구현되어있으리라는 보장이 없는데 그럼에도 불구하고 널리 사용되므로 알아둘 필요가 있다. Cloneable 은 protected 접근제어자를 갖는 Object 의 clone 메소드가 어떻게 동작할지를 정하는 역할을 한다. clone 메서드가 정의되어있지도 않은 Cloneable 인터페이스를 도대체 왜 신경써야하는지 의문이 들 수 있다. 그냥 Cl.. 2021. 10. 11.
이펙티브 자바 - toString 재정의 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - toString 의 default 구현 toString 을 별도로 재정의 하지 않고 그냥 사용하게 될 경우 기본형은 클래스명@16진수와 같은 형태를 띄게 된다. 프로그램에 특별히 해를 끼치는것은 아니지만 사람이 보기에 그다지 유용한 정보는 아니다. /** * Returns a string representation of the object. In general, the * {@code toString} method returns a string that * "textually represents" this object. The result should * be a concise but informative representation .. 2021. 10. 4.
이펙티브 자바 - equals 재정의 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - equals 재정의 equals 메소드는 IDE 에서 자동으로 완성해주기 때문에 쉽다고 생각할 수 있지만 사실은 생각해야할 게 많다. equals 메소드를 정의하지 않아도 되는 경우가 있는데 이때 모든 객체는 자기 자신과만 동일하다. - equals 메소드를 재정의 하지 않아도 되는 경우 각 객체가 고유한 경우: 주로 Value Object 가 아닌 활성 객체(Active Entity, ex - Thread) 와 같은 경우가 이에 해당한다. 클래스에 동치성 검사방법이 존재하지 않아도 상관 없을 때 상위 클래스의 equals 메소드를 하위 클래스에서 그대로 사용가능한 경우: 대부분의 Set, List, Map 클래스는 각각 Abstra.. 2021. 9. 23.
이펙티브 자바 - 종료자 사용을 피하라 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - 종료자 Java 의 종료자(finalize)는 예측 불가능하며 대체로 위험하고 일반적인 상황에서는 불필요 하다. C++ 소멸자의 경우 메모리 반환과 자원반환의 일반적인 수단이지만, Java 의 경우 GC가 메모리를 정리해주고 자원반환과 같은 경우에도 try-finally 구문을 사용하기 때문에 정말 특수한 상황이 아니면 종료자를 사용할 필요가 없다. - 종료자의 단점 종료자의 첫번째 단점은 예측이 되지 않는다는것이다. 즉시 실행이 보장되지 않는데 모든 참조가 사라지고 난 후 종료자가 실행되기까지에는 어느정도 간격이 존재한다. 그래서 특히 time-critical 한 작업에는 절대로 종료자는 사용하면 안된다. 만약 file close .. 2021. 9. 22.