equals를 재정의할 때는 일반 규약을 따르자

이펙티브 자바! equals를 재정의할 때는 일반 규약을 따르자 equals 메서드는 재정의하기 쉬워 보이지만 실수할 여지가 많다. 만약 재정의 하지 않는다면 그 경우에는 자기 자신하고만 같다. 만약 아래 조건이 부합한다면 그래도 된다. 1. 각각의 객체가 고유하다. 2. 클래스에 논리적 동일성 검사 방법이 있건 없건 상관 없다. 3. 상위 클래스에서 재정의한 equals가 하위 클래스에서 사용하기에도 적합하다. 4. 클래스가 private 또는 packing-private선언 되고 equals메서드를 호출할 일이 없다. equals 메서드는 동치 관계를 구현한다. 1… Read More

쓸데없이 객체를 만들지 말자!

이펙티브 자바! 불필요한 객체는 만들지 말라. 동일한 객체는 필요할 때마다 만드는 것보다 재사용하는 편이 낫다. 변경 불가능한 객체는 언제나 재사용할 수 있다. 우리는 절대로 피해야 할 극단적 예를 들어보겠다. String s = new String(“hello string”); 위의 코드는 쓸데 없는 짓이다. 만약 위의 문장이 loop나 자주 호출되는 메서드 안에 있으면 쓸데 없는 객체가 수십만개 수백만게 만들어 질것이다. String s = “hello string”; 위와 같이 하면 같은 가상머신에서 실행되는 코드는 동일한 String을.. Read More

private 생성자를 사용하자

제목이 조금 이상하긴한데.. 모든 클래스에 해당되는 말은 당연히 아니다 우리가 흔히 쓰는 유틸 클래스 상태가 없는 클래스들을 말하는거다. 해당 클래스들은 모두 static 메소드를 이루어져 있다. 객체를 인스턴스할 필요가 없는 클래스들 이다. 흔히 유틸 클래스를 만들 때 인스턴스화를 막기 위해 클래스의 abstract 선언하곤 한다. abstract 선언해도 인스턴스를 생성 할 수 있다. 예를 들어 보자 @Test public void test() { ReflectionClass reflectionClass = new ReflectionClass() { }; reflectionClass.printName(“wonwoo”); } abstract class ReflectionClass.. Read More