반응형

hashcode

    lombok 사용시 Generating equals/hashCode implementation 에러 수정방법

    lombok 사용할 때 다음과 같은 에러를 본적이 있을 것이다. [에러내용]Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type. 이 에러는 상속을 받은 자식클래스에 발생하는 에러로서 다음과 같이 해결해줄 수 있다 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748package c..

    어노테이션 - 규칙 36 Override 어노테이션은 일관되게 사용하라.

    자바 1.5에 어노테이션이 추가되었을 때, 자바 기본 라이브러리에 몇 가지 어노테이션 자료형이 추가되었다. 그 중 대표적인 어노테이션 @Override이다. @Override 어노테이션은 메서드 선언부에서만 사용할 수 있고, 부모 자료형에 선언된 메서드를 재정의 할 때 사용한다. 만약 메서드를 재정의 할 때 @Override 어노테이션을 입력하지 않으면 다음과 같은 문제가 발생할 수 있다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162package effective36; import java.util.Objects; /** * Stdudent c..

    모든 객체의 공통 메서드 - 규칙 9 equals를 재정의할 때는 반드시 hashCode도 재정의하라

    일반적으로 equals 메서드만 재 정의하고 hashCode를 재정의 하지 않아, Object.hashCode의 일반 규약을 어기게 되므로, HashMap, HashSet, Hashtable 같은 해시 기반 컬렉션과 함께 사용하면 오동작하게 된다. 실제 프로젝트에서 Equals와 hashCode를 재정의 하지 않아서 문제가 된 적이 있다. http://blog.naver.com/rokking1/220920301116 ※ hashCode 선언의 규약 - 응용프로그램 실행 중에 같은 객체의 hashCode를 여러 번 호출하는 경우, equals가 사용하는 정보들이 변경되지 않았다면, 언제나 동일한 정수가 반환 되어야 한다. - equals(object) 메서드가 같다고 판단한 두 객체의 hashCode 값은..

    모든 객체의 공통 메서드 - 규칙 8 equeals 재정의할 때는 일반 규악을 따르라

    Object 는 모든 객체 생성이 가능한 클래스이긴 하지만 기본적으로 계승해서 사용하도록 설계된 클래스 이다. 그런 Object에 정의된 equals, hashCode, toString, clone, finalize는 명시적인 일반 규약이 있다. 재정의 하도록 설계된 메서드들이기 때문에 상황에 따라 재정의를 하지 않을 경우 HashMap, HashSet처럼 해당 규약에 의존하는 클래스와 함께 사용하면 문제가 발생한다. ※ equals를 재 정의 하지 않아도 되는 경우 이중 equals 메서드에 대해서 이야기 해보자. Equals 재정의를 하였을 때 실패할 경우, 문제가 되기 때문에 아래와 같은 상황에서는 구태여 재정의 하지 않아도 된다. 1. 각각의 객체가 고유하다. - Thread 같은 클래스는 Obj..

    HashMap에서 사용되는 인스턴스 객체의 equals()와 hashCode() 재 정의 중요성

    HashMap에 저장되어 있는 키 값을 통해 저장된 value 값을 찾을 때, 입력된 object와 동일한 hashCode 값을 가지고 있는키를 찾기 위해 객체에 정의된 equals 메소드를 사용한다. 두 개의 object를 재 정의한 equals를 통해 비교한 후 동일한 객체 일 경우 동일한 hashCode값을 반환한다. 그렇기에 instance 객체를 hashMap에 key값으로 사용하고 싶은 경우에는 비교에 사용되는 equals()와 동일한 객체에 대한 동일한 hashCode 값을 반환하는 hashCode() 메소드를 Override 해야한다. 참고자료 https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.K..

반응형