재정의

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

    Comparable을 구현할지 고려하라 Comparable을 구현한다는 것은 그 클래스의 인스턴스들에 자연적인 순서를 부여하는 것이다. 알파벳, 숫자, 연대 같이 순서가 명확한 값 클래스를 작성할 때는 Comparable인터페이스를 구현하는 것이 좋다. Comparable 규약 BigDecimal n1 = BigDecimal.valueOf(12312312); BigDecimal n2 = BigDecimal.valueOf(22212322); BigDecimal n3 = BigDecimal.valueOf(12312312); BigDecimal n4 = BigDecimal.valueOf(22212322); // 1. 반사성 n1.compareTo(n1) => true // 2. 대칭성 n1.compareTo(..

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

    equals의 재정의가 필요 없는 경우 다음과 같은 상황에서는 equals 메서드의 재정의가 필요하지 않다. 각 인스턴스가 본질적으로 고유하다. => 값을 표현하는 것이 아니라 동작하는 개체를 표현하는 클래스가 해당된다. => Thread가 좋은 예로 Object의 equals는 이러한 클래스에 딱 맞게 구현되어 있다. 인스턴스의 논리적 동치성을 검사할 일이 없다. 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다. 클래스가 private이거나 package-private이고 equals 메서드를 호출할 일이 없다. 다음과 같이 equals가 실수로 호출되는 것을 막을 수 있다. @Override public boolean equals(Object o) { throw new Asser..