객체5 객체의 등가성(객체 비교)_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. 클래스, 인스턴스, 객체의 차이 혼용하거나 좁은 의미로 쓰기도 하지만 세 가지는 모두 다른 의미를 가지고 있습니다. 사실 클래스와 인스턴스는 의미가 명확한데 객체라는 것은 워낙 포괄적인 의미라 모호할 수 있으니 정확한 개념을 잡고 있어야 커뮤니케이션에 오류가 줄어들 것 같습니다. [ 클래스 ] 클래스가 어떻게 생겼는지 정해둔 양식지, 설계도 C언어의 구조체 정의와 같음 (실제로 사용하기 전 구조체 정의만 한 상태) 설문조사를 하기 위해 설문조사 항목(변수)와 절차(메소드)를 하나의 문서로 만들어서 컴퓨터에 저장해둔 상태가 클래스입니다. 즉, 아직 인쇄되진 않고 양식만 존재하는 상태입니다. [ 인스턴스 ] 클래스를 담은 일종의 클래스 변수 C언어 구조체에서 구조체 타입 변수 하나를 생성한 것과 동일 객체의 하위 개념 (같은 개념은 .. ▸JAVA/기본 상식 2019. 12. 9. 이전 1 다음 💲 추천 글 반응형