Object클래스란?
모든 클래스의 최상위 클래스를 의미한다.
즉, 자바의 모든 클래스는 Object의 서브클래스가 된다.
그렇다면 Object를 상속하지 않아도 모든 클래스는 Object의 서브 클래스가 되는 걸까?
대답은 Yes이다.
개발자가 상속하지 않아도 컴파일러가 자동으로 java.lang.Object를 상속시킨다.
위처럼 Pra클래스는 Object클래스를 상속하지 않았지만 Object클래스의 메소드를 오버라이딩 할 수 있다.
그럼 우리가 자주 이용하는 Object클래스의 메소드에 대해서 설명하겠다.
equals()메소드
equals()메소드는 boolean타입의 리턴타입을 가지고 있고, 두 객체가 동일한 객체면 true, 아니면 false를 반환한다.
pra와 pra1 두 객체는 서로 다른 주소값을 가지는 다른 객체이다.
따라서 equals()메소드를 사용해 두 객체를 비교하게 된다면 서로 다르기 때문에 false반환하게 된다.
그렇다면 String 객체를 할 때는 어떤 방식으로 동작할까?
str1, str2는 서로 다른 객체니까 당연히 false가 나올거 같지만 위 코드를 실행하면 true가 나온다.
왜 서로 다른 객체인데 true를 반환하였을까?
그 이유는 바로 String 클래스가 Object클래스의 equals()메소드를 오버라이딩을 하여서 주소값비교가 아닌 문자열 비교로 변경하였기 때문에 위 코드에서는 true가 출력되게 된다.
그럼 서로 다른 객체가 동일한 값인지 비교할려면 어떻게 해야 할까?
equals()메소드를 개발자가 직접 오버라이딩을 하면된다.
위처럼 직접 equals()메소드를 오버라이딩을 하면 원래 객체에 equals()메소드를 사용하면 주소를 이용하기 때문에 서로 다른 객체의 값이 같아도 객체의 주소값이 다르기 때문에 false를 반환하지만, 위의 코드처럼 오버라이딩을 함으로써 값을 비교하게 된다.
위의 코드를 실행시키면 equals()메소드를 오버라이딩 하기 전에는 Pra 클래스의 객체 3개는 각각 서로 다른 주소값을 가지기 때문에 false를 반환한다.
하지만 오버라이딩을 함으로써 값을 비교하게되므로
위의 결과가 나타나게 된다.
toString()메소드
객체의 문자 정보를 리턴한다.
객체 문자 정보란?
객체를 문자열로 표현한 것을 의미
위의 실행결과와 같이 toString()메소드는 클래스명@16진해시코드로 표현을 한다.
toString()메소드 또한 개발자가 직접 오버라이딩을 할 수 있다.
위의 코드처럼 개발자가 직접 오버라이딩을 하게 되면
위처럼 개발자가 정의한대로 결과가 출력되게 된다.
'JAVA' 카테고리의 다른 글
[JAVA] Thread & Runnable & Multi Thread란? (0) | 2023.05.03 |
---|---|
[JAVA] 패키지&import & 접근 제어 지시자 (0) | 2023.04.26 |
[JAVA] final 키워드 (0) | 2023.04.23 |
[JAVA] 추상클래스란 (0) | 2023.04.23 |
[JAVA] 상속&super&오버라이딩 (0) | 2023.04.12 |