등가성4 객체의 등가성(객체 비교)_hashCode 메소드 [4/4] [ hashCode 메소드 ] 객체 내부의 필드 값을 hash값으로 바꿔 hash값을 리턴해줌 같은 값은 무조건 동일 hash값을 가짐 하지만 hash값이 동일하더라도 값이 다를 수 있기 때문에 equals 메소드와 혼용 필수 equals 메소드보다 비교 연산이 빠르기 때문에 hashCode를 먼저 비교 후 equals 수행 동일한 객체는 무조건 같은 hash값을 가지지만 낮은 확률로 서로 다른 두 객체가 같은 hash값을 가질 수도 있습니다. 따라서 hashCode 메소드를 통해 동일한 hash값이 도출되면 equals 메소드를 다시 수행해 값을 비교해줍니다. 이렇게 하는 이유는 hash값을 도출하는 연산이 더 빨라서 값이 다른 객체는 대부분 hashCode에서 걸러낼 수 있기 때문입니다. 추가로 같.. ▸JAVA/기본 문법 2019. 12. 10. 객체의 등가성(객체 비교)_equals 메소드 [3/4] [ equals 메소드 ] 객체 내부의 값을 모두 비교해 동일 값을 가진 객체를 판별하는 메소드 equals 메소드는 모든 클래스의 기본적인 부모 클래스가 되는 Object 클래스 포함된 메소드입니다. 하지만 기본 메소드를 그대로 사용할 경우 올바른 비교가 되지 않기 때문에 실제 사용 시에는 해당 클래스에 맞도록 오버라이딩 해서 사용해줍니다. 물론 오버라이딩 하지 않고 다른 함수를 만들어 사용해도 무방합니다만, 혼선을 방지하기 위해 그냥 오버라이딩을 해주는 쪽이 좋습니다. 먼저 Object에 포함된 기본 equals 메소드의 코드를 보면 객체 자체를 관계 연산자(==)로 비교합니다. 따라서 내부적으로 같은 값을 가진 객체 2개라도 다른 메모리 주소를 가지기 때문에 서로 다른 값으로 인식합니다. 자기 자.. ▸JAVA/기본 문법 2019. 12. 10. 객체의 등가성(객체 비교)_instanceof 타입 비교 [2/4] [ instanceof ] 해당 객체의 타입 판별 상속받은 부모 클래스도 같은 객체 타입으로 판단 instanceof는 좌측의 객체가 우측의 타입이 맞는지 확인해 줍니다. 자식클래스는 부모클래스의 타입이기 때문에 "자식클래스 객체 instanceof 부모클래스 타입"은 true가 됩니다. 하지만 당연히 반대는 성립하지 않습니다. 기준이 되는 좌측은 인스턴스가, 우측은 인스턴스가 아닌 타입이 명시돼야 합니다. 참고로 조건문에서 instanceof를 사용해 타입을 판별한 후, 해당 클래스의 메소드를 따로 호출하는 것은 객체지향 관점에서는 그리 좋지 못한 방식입니다. 그것보다는 오버라이딩을 사용해 같은 메소드를 가진 뒤, 객체만 호출하고 오버라이딩된 메소드를 실행하는 것이 보다 효율적입니다. package.. ▸JAVA/기본 문법 2019. 12. 10. 객체의 등가성(객체 비교)_관계 연산자(==) 비교 [1/4] [ 관계 연산자(==) 비교 ] 기본 변수(원시타입)일 경우 값을 비교 참조 변수(원시타입 외)일 경우 값이 아닌 저장된 주소(포인터)를 비교 ※ 원시타입(primitive) 변수 1. 논리타입 : boolean 2. 정수타입 : byte, short, int, long 3. 실수타입 : float, double 4. 문자타입 : char 관계 연산자(==) 좌우에 원시타입 변수가 하나라도 있으면 "값"을 비교해 줍니다. 아래와 같이 정수를 비교했을 때 일반 변수와 다른 객체의 값을 비교하더라도 같은 값으로 인식하고 있습니다. 하지만 객체(참조변수)와 객체를 비교했을 때는 다른 값으로 인식합니다. 객체간의 비교는 값 자체가 아닌 값이 저장된 포인터 "주소"를 비교하고, 서로 다른 객체는 다른 메모리 주소.. ▸JAVA/기본 문법 2019. 12. 10. 이전 1 다음 💲 추천 글 반응형