오브젝트 클래스란 가장 최상위에 있는 클래스 개념으로
어디서든지 Object클래스의 메소드를 재정의해서 쓸수있다
그중 대표적인게 ToString메소드이다
toString을 오버라이드하면 해당 클래스내에선 수정된 값이 같이출력되게 바뀐다
한번 코드를 작성해보자
오브젝트를 상속받는 Book 클래스를 만들어보자
단 이 클래스는 상속이 불가능한 클래스로 선언하기위해서 앞에 final이라는 키워드를 붙였다
생성자로 title과 author를 받아오게 만든뒤 멤버변수에 집어넣도록 하자
ToString 메소드를 오버라이드하여 title과 author 사이에 콤마와 바깥에 괄호가 생기도록 만들고
Book클래스의 객체 book을 생성하여 데미안이라는 이름과 헤르만 헤세라는 작가이름을 넣으면
결과가 어떻게 출력이 될까?
ToString이 정상적으로 작동하는것을 알수있다
그렇다면 밑에있는 String클래스의 객체 str1로 안녕이라는 문구를 넣으면 어떻게될까?
String 클래스는 Book클래스의 ToString메소드의 영향을 받지않기떄문에
안녕으로 출력이 된다
이번에는 equals 메소드에 대해 알아보자
equals 메소드에 대해 자세히 이해하기위해 코드를 작성해보자
우선 E_Book 이라는 클래스를 만들어서
bookTypeId와 title author라는 멤버 변수를 만들고
생성자를 세개 다 넣어야되는 생성자로 만들자
다음은 같은 이름 같은 작가를 가진 두 객체
book1과 book2를 생성해 비교를 해보겠다
관계 연산자 ==과
논리연산자 메소드 equals를 재정의하지않고 그냥 써보겠다
결과는 둘다 같지않다로 false가 나온다
여기서 둘의 값이 같다는결과로 출력하려면 어떻게 해야할까?
그냥 equals 메소드를 사용하면 주소값을 비교하는 기능을 가진다
book1과 book2는 heap메모리에서 서로 다른 주소를 가지고있기떄문에 false가 출력이 된다
이럴때엔 객체의 속성끼리 비교하게 만들기위해 equals 메소드를 재정의 해주자
(equals 메소드는 Object클래스의 메소드이기때문에 상속과정없이 그냥 재정의 해서쓸수있다)
equals를 만약 obj 의 데이터형이 E_Book 이라면 tbook이라는 변수에 속성값을 담고
tbook과 호출한 객체의 title을 비교하여 주소값이 같다면 true를 출력하도록 재정의 해보자
title의 값이 같다면 앞서배운 Stringpool이라는 곳에서 같은 주소값을 반환하기때문에
true로 출력이 될것이다 , 결과를 확인해보자