02. Object 클래스의 메서드 활용
정리 해 봅시다 .😘
Object Class에는 어떤 메서드 들이 들어 있는지 궁금하시죠?
- 모든~! 클레스는 Object 클레스를 상속하고 있기 때문에(Object가 모든 클레스의 부모 입니다) Object클레스의 메소드는 공짜(아무런 조치를 취하지 않아도) 사용할수 있는 편리한 메소드들 이라는점에서 관심이 생기지 않으시나요? ^^
[ equals() ]
두개의 인스턴스의 주소값이 같을때 true값(boolean형)을 리턴 해요.
- 여기에서 주소값이란 아래에서 hashCode로 얻어진 값을 가르켜요.(정확히는 주소값이 아니에요. 아래에서 자세히 설명)
- 하지만 equal의 제정의를 통해서 주소가 다르더라도 내부의 값이 같은(논리적으로 동일 하다고 표현) 경우에도 true가 리턴되도록 변화 시켜놓고 사용하는 경우가 많아요.(아래 보너스 편에서 자세히 설명)
- 재정의 방향 : 참조변수의 주소가 아니라 참조변수가 갖고 있는 맴버 변수간의 비교를 하게 만들면 됩니다.ㅎㅎ
[ hashCode() ]
- system.out.println()으로 참조변수(배열,인스턴스,오브젝트)를 넣어서 출력하면 나오는 @뒤의 정체불명의 문자들이 이 메소드를 통해서 불려오는 JVM에서 관리하는 hash방식의 데이터 주소(위치) 이에요.
- JVM에서는 주소값을 Key값(참조변수 명) = index값(hash타입)으로 저장하고 있어요.
- 아참 . 물리적(메모리)인 실제 위치를 가리키는것은 아닙니다. 물리적인 위치는 컴파일 되서 돌아가면 알수 있는데 알수 있는 방법이 따로 있습니다.
보너스편
equals를 재정의하여 참조변수의 해쉬주소 다르더라도 내부의 값이 같은경우 true가 출력되도록 바꿔 볼까요 .^^
보너스로 만약 타입을 상속받는 ( 상속받은 클레스로 만들어진 인스턴스) 클레스 일 경우에도 내부의 속성은 같은 의미를 갖고 있기 때문에. 인스턴스의 기반이 상속관계(혈연관계?ㅎㅎ)일 경우에도 내부의 속성값을 비교할수 있도록 더 좋은 코드를 만들어 봅시다.
package test_a;
public class Test {
String A;
Test(String a){
this.A=a;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Test) {
Test T = (Test)obj;
if(this.A==T.A)
return true;
else return false;
}
return false;
}
}
package test_a;
public class TestTEst {
public static void main(String[] args) {
Test A = new Test("A");
Test B = new Test("A");
System.out.println(A.equals(B));
}
}
단어 수집
에러 메세지
공부 모임
1) 카카오톡 오픈 채팅방
- 모르는것을 질문하거나
- 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도
2) 구루미 온라인 독서실
- 학습 시간도 관리 해주는 온라인 독서실
온라인 강의 주소
추천합니다 . 👍